pwn題查找字符串方法記錄

記憶力不太好,簡單記錄一下,用作備忘

更新:2020年4月6日:補充更新一些方法

假設現在有文件如下:

  • 待 Pwn 程序:mypwn
  • libc 文件:libc.so

需要查找的字符串 /bin/sh 在上訴兩個文件中都存在。

查找程序中的字符串

0x0 IDA strings window

將程序加載到 IDA 後,使用快捷鍵 shift+F12 打開 strings window ,查看程序中出現的全部字符。

在這裏插入圖片描述

0x1 Linux strings 命令

strings -a -t x mypwn | grep "/bin/sh"
> 540

返回的是地址最低 3 位。因爲就算隨機化,最低 3 位地址也保持不變。

0x2 ROPgadget

ROPgadget --binary mypwn --string '/bin/sh'

0x3 pwntools search 方法

from pwn import *
p = process("./mypwn")
binsh = p.search("/bin/sh").next()

pwntools 中用 ELF 加載程序(mypwn)後,elf 對象有一個 search 方法好像也可以查找字符串,未實測。

2020年4月6日 補充測試完成

查找 libc 中的字符串

0x0 pwntools search 方法

from pwn import *
libc = ELF("./libc.so")
binsh = libc.search("/bin/sh").next()
# 這個地址不是真實地址,使用時還需要加上偏移
# 即一般情況下進行下面的處理後,才能正常使用
binsh_addr = binsh + libc_base	# 泄露的libc基地址

0x1 libcSearch

使用 libcSearch 之前需要泄露出地址,以初始化 libcSearch 。這裏假設泄露出 puts 地址。

from LibcSearcher import *
libc = LibcSearch('puts',puts_leak)
binsh = libc.dump("str_bin_sh")
# 這個地址不是真實地址,使用時還需要加上偏移
# 即一般情況下進行下面的處理後,才能正常使用
binsh_addr = binsh + libc_base	# 泄露的libc基地址

0x2 ROPgadget

ROPgadget --binary libc.so --string '/bin/sh'
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章