<menu id="guoca"></menu>
<nav id="guoca"></nav><xmp id="guoca">
  • <xmp id="guoca">
  • <nav id="guoca"><code id="guoca"></code></nav>
  • <nav id="guoca"><code id="guoca"></code></nav>

    ROPgadget

    隨著 NX 保護(No-eXecute 不可執行)的開啟,以往直接向棧或者堆上直接注入代碼的方式難以繼續發揮效果。攻擊者們也提出來相應的方法來繞過保護,目前主要的是 ROP(Return Oriented Programming),其主要思想是在棧緩沖區溢出的基礎上,利用程序中已有的小片段( gadgets )來改變某些寄存器或者變量的值,從而控制程序的執行流程。所謂gadgets 就是以 ret 結尾的指令序列,通過這些指令序列,我們可以修改某些地址的內容,方便控制程序的執行流程。

    之所以稱之為 ROP,是因為核心在于利用指令集中的 ret 指令,改變指令流的執行順序。
    具體利用細節將在棧溢出章節介紹。

    ROPgadget工具可以幫助你尋找合適的gadgets,在編寫你的ROP exp的時候有很大作用。ROPgadget支持 x86, x64, ARM, ARM64, PowerPC, SPARC和MIPS架構下的ELF/PE/Mach-O文件格式。

    安裝

    如果你要使用ROPgadget,你首先需要安裝Capstone(反匯編框架)

    $ sudo pip install capstone
    

    Capstone支持多平臺(Windows, ios, android, cygwin…)交叉編譯請參考https://github.com/aquynh/capstone/blob/master/COMPILE.TXT
    Capstone安裝好后,ROPgadget可以作為一個standalone工具使用。

    $ ROPgadget.py
    

    或者通過python安裝庫

    $ python setup.py install
    $ ROPgadget
    

    直接通過Pypi安裝也可以

    $ pip install ropgadget
    $ ROPgadget

    測試一下安裝完成
    ROPgadget

    具體使用方法

    usage: ROPgadget.py [-h] [-v] [-c] [--binary <binary>] [--opcode <opcodes>]
                        [--string <string>] [--memstr <string>] [--depth <nbyte>]
                        [--only <key>] [--filter <key>] [--range <start-end>]
                        [--badbytes <byte>] [--rawArch <arch>] [--rawMode <mode>]
                        [--rawEndian <endian>] [--re <re>] [--offset <hexaddr>]
                        [--ropchain] [--thumb] [--console] [--norop] [--nojop]
                        [--callPreceded] [--nosys] [--multibr] [--all] [--noinstr]
                        [--dump]

    參數

        -h, --help           顯示幫助文檔
        -v, --version        版本號
        -c, --checkUpdate    檢測新版本是否可用
        --binary <binary>    指定二進制文件進行分析
        --opcode <opcodes>   在可執行段中查找opcode
        --string <string>    在可讀的段中查找字符串
        --memstr <string>    查找單個byte在所有的可執行段中
        --depth <nbyte>      搜索引擎的深度
        --only <key>         只顯示特別的指令
        --filter <key>       過濾特定指令
        --range <start-end>  在地址之間尋找(0x...-0x...)
        --badbytes <byte>    拒絕特定指令在gadget的地址下
        --rawArch <arch>     指定文件架構
        --rawMode <mode>     指定源文件的mode
        --rawEndian <endian> 指定源文件的endianness
        --re <re>            正則表達式
        --offset <hexaddr>   指定gadget的地址偏移
        --ropchain           ROP chain的生成
        --thumb              在ARM架構下使用搜索引擎thumb 模式
        --console            使用交互終端對于搜索引擎
        --norop              禁止ROP搜索引擎
        --nojop              禁止JOP搜索引擎
        --callPreceded       僅顯示call-preceded的gadgets
        --nosys              禁止SYS搜索引擎
        --multibr            允許多分枝gadgets
        --all                禁止刪除重復的gadgets,即顯示所有
        --noinstr            禁止gadget指令終端打印
        --dump               輸出gadget bytes

    參考

    本文章首發在 網安wangan.com 網站上。

    上一篇 下一篇
    討論數量: 0
    只看當前版本


    暫無話題~
    亚洲 欧美 自拍 唯美 另类