
關於ROPR
ROPR是一款速度極快且功能強大的ROPGadget查找工具,該工具支持多線程運行,可以幫助廣大研究人員快速尋找和定位目標ROPGadget。
ROP(Return Oriented Programming),即返回導向編程,而ROPGadget是一些包含匯編指令的代碼段,通常以ret指令結尾,這些指令已經作為可執行代碼存在於每個源碼文件或代碼庫中,而這些小工具可用於二進制攻擊,並破壞易受攻擊的可執行文件。
當許多ROPGadget的地址寫入緩衝區時,就形成了ROP鏈。如果攻擊者可以將堆棧指針移動到此ROP鏈中,則控制權將會完全轉移給攻擊者。
大多數可執行文件包含足夠的小工具來編寫ROP鏈一旦我們知道了地址,就可以使用包含在同一地址空間(如libc)中的動態庫。
而使用ROPGadget的好處在於,無需在任何地方編寫新的可執行代碼,攻擊者可以僅使用程序中已經存在的代碼來實現其目標。
工具要求
工具需要使用cargo(Rust構建系統)來構建和使用ROPR。
工具下載源碼安裝
廣大研究人員可以使用下列命令將該項目源碼克隆至本地,並構建項目代碼:
gitclonehttps://github.com/Ben-Lichtman/roprcdroprcargo build --release(向右滑動,查看更多)
此時,應用程序將會安裝到target/release/ropr路徑下。或者,下列命令同樣可以安裝ROPR:
gitclonehttps://github.com/Ben-Lichtman/roprcdroprcargo install --path .(向右滑動,查看更多)
此時,應用程序將會安裝到~/.cargo/bin路徑下。
Cargo安裝
此時,應用程序將會安裝到~/.cargo/bin路徑下。
工具使用USAGE:ropr[OPTIONS]<BINARY>ARGS:<BINARY>待檢查的文件路徑OPTIONS: -b, --base-pivot 用於更改基指針的ROPGadget過濾器 -c, --colour <COLOUR> 開啟輸出顏色高亮和明文顯示 -h, --help 打印工具幫助信息 -j, --nojop 移除"JOP Gadgets" -m, --max-instr <MAX_INSTR> 一個小工具中的最大指令數量[默認: 6] -n, --noisy 包含潛在的低質量小工具 -p, --stack-pivot 過濾堆棧指針後的小工具 -r, --norop 移除普通的"ROP Gadgets" -R, --regex <REGEX> 執行正則表達式搜索 --range <RANGE> 搜索地址範圍(十六進制),例如 `0x1234-0x4567` --raw <RAW> 將輸入文件當作代碼段 -s, --nosys 移除系統調用和其他中斷 -V, --version 打印工具版本信息
(向右滑動,查看更多)
工具使用演示
比如說,如果我們想要使用其他註冊表鍵值來填充rax,我們就可以使用正則表達式「^mov eax, ...;」來選擇過濾器:
❯ropr/usr/lib/libc.so.6-R"^moveax,...;">/dev/null==> Found 197 gadgets in 0.118 seconds(向右滑動,查看更多)
現在,我們就可以在命令行添加某些過濾器來獲取高質量的處理結果了:
❯ ropr /usr/lib/libc.so.6 -m 2 -j -s -R "^mov eax, ...;"0x000353e7: mov eax, eax; ret;0x000788c8: mov eax, ecx; ret;0x00052252: mov eax, edi; ret;0x0003ae43: mov eax, edx; ret;0x000353e6: mov eax, r8d; ret;0x000788c7:moveax,r9d;ret;==> Found 6 gadgets in 0.046 seconds(向右滑動,查看更多)
接下來,我們可以查看到mov小工具的地址為0x00052252。
項目地址
ROPR:https://github.com/Ben-Lichtman/ropr