工具篇(持續更新) pwn中常使用的工具

2021-10-18 17:38:48 字數 2637 閱讀 9820

pwn作為ctf比賽中的重要一部分,用到的工具不及其他部分的多,但是工具相對來說也比較難用。主要用的工具有:pwntools、checksec、ropgadget、one_gadget、gdb+pwndbg、ida pro等等。

pwntools是乙個用python編寫的ctf框架和開發庫,旨在快速構建原型和開發,並旨在使編寫利用指令碼盡可能簡單。

通過以下命令用來安裝python3下的pwntools包:

$ sudo

apt-get update

$ sudo

apt-get

install python3 python3-pip python3-dev git libssl-dev libffi-dev build-essential

$ python3 -m pip --default-timeout=100 install --upgrade pip

$ python3 -m pip --default-timeout=100 install --upgrade pwntools

以上命令執行完畢後進入python3輸入from pwn import *,如下圖顯示則安裝成功。

checksec是乙個指令碼軟體,在安裝pwntools後被順帶安裝,可以用來檢視可執行檔案的程式架構資訊和保護資訊。如下圖使用:

ropgadget這個工具允許你在二進位制檔案中搜尋**gadget片段,以方便rop的利用。ropgadget支援x86、x64、arm、arm64、powerpc、sparc和mips架構上的elf/pe/mach-o格式。在安裝pwntools後被順帶安裝。以下是常用的ropgadget指令:

# 查詢可儲存暫存器的**

$ ropgadget --binary rop --only 'pop|ret'

# 查詢字串

$ ropgadget --binary rop --string "/bin/sh"

# 查詢有int 0x80的位址

$ ropgadget --binary rop --only 'int'

one-gadget 是glibc裡呼叫execve(』/bin/sh』, null, null)的一段非常有用的gadget。在我們能夠控制ip(也就是pc)的時候,用one-gadget來做rce(遠端**執行)非常方便,比如有時候我們能夠做乙個任意函式執行,但是做不到控制第乙個引數,這樣就沒辦法呼叫system(「sh」),這個時候one-gadget就可以搞定了。如果你想知道one-gadget原理,click here!

通過以下命令安裝one_gadget:

# 先安裝ruby

$ sudo add-apt-repository ppa:brightbox/ruby-ng

$ sudo

apt-get update

$ sudo

apt-get remove ruby

$ sudo

apt-get

install ruby2.6 ruby2.6-dev

# 再安裝one_gadget

$ sudo gem install one_gadget

one-gadget 的使用非常簡單,比如說希望在某個libc中找到某段啟動shell的gadget,只需鍵入以下命令:$ one_gadget libc-2.23.so

可見輸出結果不僅僅給出了gadget對應的libc偏移,還給出了約束,這樣只需要控制程式在滿足約束的前提下跳轉到對應的位址執行gadget便可以獲得shell。

gdb 全稱「gnu symbolic debugger」,從名稱上不難看出,它誕生於 gnu 計畫,是 linux 下常用的程式偵錯程式。發展至今,gdb 已經迭代了諸多個版本,當下的 gdb 支援除錯多種程式語言編寫的程式,包括 c、c++、go、objective-c、opencl、ada 等。實際場景中,gdb 更常用來除錯 c 和 c++ 程式。而pwndbg (/poʊndbæg/)是乙個gdb外掛程式,它使得用gdb進行除錯變得不那麼麻煩,且更加專注於底層軟體開發人員、硬體黑客、反向工程師和開發人員所需的特性。而pwndbg是gdb上的一種外掛程式,可以使得除錯功能更強大。

gdb一般在安裝c/c++編譯套件的時候會被自動安裝到系統中,在沒有給它裝外掛程式的情況下,gdb的執行如下:

可以使用如下命令安裝pwndbg外掛程式:

$ git clone 

$ cd pwndbg

$ ./setup.sh

在安裝好pwndbg後,開啟gdb如下:

gdb+pwndbg的常用基本指令:

linux使用中常見命令(持續更新)

學習docker的過程中需要在linux的環境下進行,在這裡將使用到的linux常用命令記錄一下 1.uname a linux檢視版本當前作業系統核心資訊 2.cd home 進入 home 目錄 cd 返回上一級目錄 cd 返回上兩級目錄 cd 進入個人的主目錄 3.ctrl c 強制終止該程式...

Golang中常見的問題 持續更新

這裡列舉一些我們學習golang時常遇見的問題,他們都是符合golang語言語法的,可以正常的編譯,但是可能會出現執行結果錯誤,或者是由資源洩露的風險 當引數的可變引數是空介面型別時,傳入空介面的切片時需要注意引數的展開的問題 func main fmt.println a fmt.println ...

nvprof工具使用及結果分析,持續更新。。。

會持續更新。nvprof是用來測試了解並優化cuda或openacc應用程式的效能的分析工具。分析工具使您能夠從命令列收集和檢視分析資料。nvprof a.out a.out為編譯後的可執行檔案 示例結果如下 nvprof metrics achieved occupancy a.outnvprof...