主頁 > 企業開發 > 4.3 x64dbg 搜索記憶體可利用指令

4.3 x64dbg 搜索記憶體可利用指令

2023-07-08 08:07:53 企業開發

發現漏洞的第一步則是需要尋找到可利用的反匯編指令片段,在某些時候遠程緩沖區溢位需要通過類似于jmp esp等特定的反匯編指令實作跳轉功能,并以此來執行布置好的ShellCode惡意代碼片段,LyScript插件則可以很好的完成對當前行程記憶體中特定函式的檢索作業,

一般而言遠程緩沖區溢位攻擊通常利用的是一些具有緩沖區溢位漏洞的函式或是特定的匯編指令片段,如:

  • strcpy:該函式將一個字串復制到另一個字串緩沖區中,但不會檢查緩沖區的大小,因此很容易導致緩沖區溢位,
  • gets:該函式將用戶輸入的資料讀入字串緩沖區中,但不會檢查緩沖區的大小,因此很容易導致緩沖區溢位,
  • sprintf:該函式將一個字串格式化到字串緩沖區中,但不會檢查緩沖區的大小,因此很容易導致緩沖區溢位,

在遠程緩沖區溢位攻擊中,攻擊者也可以利用匯編指令jmp esp來實作對攻擊代碼的執行,該指令允許攻擊者跳轉到堆疊中的任意位置,并從那里執行惡意代碼,

4.3.1 搜索可利用匯編指令集

在默認情況下,LyScript插件并不具備搜索連續指令的能力,雖然提供了get_disasm_code()系列的反匯編函式,但此類函式通常僅僅只能實作簡單的反匯編功能,讀者如果需要實作其他附加功能,含需要自行動手去實作,首先我們自行實作一個簡單的匯編指令檢索功能,用于尋找可利用的指令片段"pop esp","jmp esp","jmp eax","pop ecx"等指令集,

這段代碼實作的機制可總結為如下步驟;

  • 1.呼叫connect函式來連接到要除錯的程式,并使用get_local_baseget_local_size函式獲取程式的記憶體范圍,
  • 2.定義一個名為search_asm的串列,該串列包含要搜索的匯編指令,
  • 3.使用一個while回圈來遍歷記憶體范圍中的每一個地址,并呼叫get_disasm_one_code函式獲取該地址處的反匯編代碼,
  • 4.使用另一個for回圈來遍歷search_asm串列中的每一個指令,并檢查當前反匯編代碼是否與串列中的指令匹配,如果匹配,則輸出該地址和反匯編代碼,

代碼很容易被理解和實作,本質上僅僅只是提取所記憶體中所有的匯編指令集,并依次列舉對比是否符合串列中的條件,其最終實作代碼如下所示;

from LyScript32 import MyDebug

if __name__ == "__main__":
    dbg = MyDebug()
    dbg.connect()

    local_base_start = dbg.get_local_base()
    local_base_end = local_base_start + dbg.get_local_size()
    print("開始地址: {} --> 結束地址: {}".format(hex(local_base_start),hex(local_base_end)))

    search_asm = ["pop esp","jmp esp","jmp eax","pop ecx"]

    while local_base_start <= local_base_end:
        disasm = dbg.get_disasm_one_code(local_base_start)
        # print("地址: 0x{:08x} --> 反匯編: {}".format(local_base_start,disasm))

        # 尋找指令
        for index in range(0, len(search_asm)):
            if disasm == search_asm[index]:
                print("地址: {} --> 反匯編: {}".format(hex(local_base_start), disasm))

        # 遞增計數器
        local_base_start = local_base_start + dbg.get_disasm_operand_size(local_base_start)

    dbg.close()

如上代碼被運行后,則會輸出當前行程內所有可被利用的指令片段,其輸出效果圖如下圖所示;

4.3.2 搜索可利用機器碼

機器碼的搜索與匯編指令集的搜索方式基本保持一致,但慶幸的是搜索指令集可使用scan_memory_all()這個官方函式,該函式可用于掃描當前EIP所處位置,也就是當前EIP所在模塊的所有符合條件的機器碼,需要注意的是,在搜索具有漏洞函式時,通常我們會搜索行程內的完整模塊,則此時應該先得到該模塊的入口地址,并通過set_register()設定到該模塊所在記憶體,然后再次對該記憶體區域進行搜索,代碼中opcode用于指定一段機器碼序列,此處讀者可指定搜索多種機器碼,并將搜索結果放入到該串列內進行存盤,

這段代碼的實作原理可總結為如下所示的步驟;

  • 定義一個名為opcode的串列,該串列包含要搜索的機器碼,
  • 然后使用一個for回圈來遍歷每個模塊,并呼叫get_all_module函式獲取程式中的模塊串列,對于每個模塊,它將eip暫存器設定為該模塊的入口點,然后呼叫scan_memory_all函式搜索該模塊中是否存在要搜索的機器碼,
  • 如果找到了指定的機器碼,則輸出模塊名稱、匹配個數以及機器碼,并輸出該機器碼所在的地址,

根據上述流程可總結為如下所示的代碼片段;

from LyScript32 import MyDebug
import time

if __name__ == "__main__":
    dbg = MyDebug()
    dbg.connect()

    # 需要搜索的指令集片段
    opcode = ['ff 25','ff 55 fc','8b fe']

    # 回圈搜索指令集記憶體地址
    for index,entry in zip(range(0,len(opcode)), dbg.get_all_module()):
        eip = entry.get("entry")
        base_name = entry.get("name")
        if eip != 0:
            dbg.set_register("eip",eip)
            search_address = dbg.scan_memory_all(opcode[index])

            if search_address != False:
                print("搜索模塊: {} --> 匹配個數: {} --> 機器碼: {}"
            .format(base_name,len(search_address),opcode[index]))
                # 輸出地址
                for search_index in search_address:
                    print("[*] {}".format(hex(search_index)))

        time.sleep(0.3)
    dbg.close()

strcpy函式為例,讀者只需要搜索特征['57 8b 7c 24 08 eb 6e','ff 55 fc','8b fe']即可定位到當前模塊內所有呼叫該函式機器其他函式的記憶體地址,

運行后即可輸出當前模塊內所有被呼叫機器碼的詳細地址,輸出效果如下圖所示;

原文地址

https://www.lyshark.com/post/af00a46a.html

文章作者:lyshark (王瑞)
文章出處:https://www.cnblogs.com/LyShark/p/17535906.html
本博客所有文章除特別宣告外,均采用 BY-NC-SA 許可協議,轉載請注明出處!

轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/556804.html

標籤:其他

上一篇:萬字好文:大報文問題實戰

下一篇:返回列表

標籤雲
其他(162226) Python(38266) JavaScript(25527) Java(18291) C(15239) 區塊鏈(8275) C#(7972) AI(7469) 爪哇(7425) MySQL(7290) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5876) 数组(5741) R(5409) Linux(5347) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4613) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2438) ASP.NET(2404) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) HtmlCss(1993) .NET技术(1986) 功能(1967) Web開發(1951) C++(1942) python-3.x(1918) 弹簧靴(1913) xml(1889) PostgreSQL(1882) .NETCore(1863) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • IEEE1588PTP在數字化變電站時鐘同步方面的應用

    IEEE1588ptp在數字化變電站時鐘同步方面的應用 京準電子科技官微——ahjzsz 一、電力系統時間同步基本概況 隨著對IEC 61850標準研究的不斷深入,國內外學者提出基于IEC61850通信標準體系建設數字化變電站的發展思路。數字化變電站與常規變電站的顯著區別在于程序層傳統的電流/電壓互 ......

    uj5u.com 2020-09-10 03:51:52 more
  • HTTP request smuggling CL.TE

    CL.TE 簡介 前端通過Content-Length處理請求,通過反向代理或者負載均衡將請求轉發到后端,后端Transfer-Encoding優先級較高,以TE處理請求造成安全問題。 檢測 發送如下資料包 POST / HTTP/1.1 Host: ac391f7e1e9af821806e890 ......

    uj5u.com 2020-09-10 03:52:11 more
  • 網路滲透資料大全單——漏洞庫篇

    網路滲透資料大全單——漏洞庫篇漏洞庫 NVD ——美國國家漏洞庫 →http://nvd.nist.gov/。 CERT ——美國國家應急回應中心 →https://www.us-cert.gov/ OSVDB ——開源漏洞庫 →http://osvdb.org Bugtraq ——賽門鐵克 →ht ......

    uj5u.com 2020-09-10 03:52:15 more
  • 京準講述NTP時鐘服務器應用及原理

    京準講述NTP時鐘服務器應用及原理京準講述NTP時鐘服務器應用及原理 安徽京準電子科技官微——ahjzsz 北斗授時原理 授時是指接識訓通過某種方式獲得本地時間與北斗標準時間的鐘差,然后調整本地時鐘使時差控制在一定的精度范圍內。 衛星導航系統通常由三部分組成:導航授時衛星、地面檢測校正維護系統和用戶 ......

    uj5u.com 2020-09-10 03:52:25 more
  • 利用北斗衛星系統設計NTP網路時間服務器

    利用北斗衛星系統設計NTP網路時間服務器 利用北斗衛星系統設計NTP網路時間服務器 安徽京準電子科技官微——ahjzsz 概述 NTP網路時間服務器是一款支持NTP和SNTP網路時間同步協議,高精度、大容量、高品質的高科技時鐘產品。 NTP網路時間服務器設備采用冗余架構設計,高精度時鐘直接來源于北斗 ......

    uj5u.com 2020-09-10 03:52:35 more
  • 詳細解讀電力系統各種對時方式

    詳細解讀電力系統各種對時方式 詳細解讀電力系統各種對時方式 安徽京準電子科技官微——ahjzsz,更多資料請添加VX 衛星同步時鐘是我京準公司開發研制的應用衛星授時時技術的標準時間顯示和發送的裝置,該裝置以M國全球定位系統(GLOBAL POSITIONING SYSTEM,縮寫為GPS)或者我國北 ......

    uj5u.com 2020-09-10 03:52:45 more
  • 如何保證外包團隊接入企業內網安全

    不管企業規模的大小,只要企業想省錢,那么企業的某些服務就一定會采用外包的形式,然而看似美好又經濟的策略,其實也有不好的一面。下面我通過安全的角度來聊聊使用外包團的安全隱患問題。 先看看什么服務會使用外包的,最常見的就是話務/客服這種需要大量重復性、無技術性的服務,或者是一些銷售外包、特殊的職能外包等 ......

    uj5u.com 2020-09-10 03:52:57 more
  • PHP漏洞之【整型數字型SQL注入】

    0x01 什么是SQL注入 SQL是一種注入攻擊,通過前端帶入后端資料庫進行惡意的SQL陳述句查詢。 0x02 SQL整型注入原理 SQL注入一般發生在動態網站URL地址里,當然也會發生在其它地發,如登錄框等等也會存在注入,只要是和資料庫打交道的地方都有可能存在。 如這里http://192.168. ......

    uj5u.com 2020-09-10 03:55:40 more
  • [GXYCTF2019]禁止套娃

    git泄露獲取原始碼 使用GET傳參,引數為exp 經過三層過濾執行 第一層過濾偽協議,第二層過濾帶引數的函式,第三層過濾一些函式 preg_replace('/[a-z,_]+\((?R)?\)/', NULL, $_GET['exp'] (?R)參考當前正則運算式,相當于匹配函式里的引數 因此傳遞 ......

    uj5u.com 2020-09-10 03:56:07 more
  • 等保2.0實施流程

    流程 結論 ......

    uj5u.com 2020-09-10 03:56:16 more
最新发布
  • 4.3 x64dbg 搜索記憶體可利用指令

    發現漏洞的第一步則是需要尋找到可利用的反匯編指令片段,在某些時候遠程緩沖區溢位需要通過類似于`jmp esp`等特定的反匯編指令實作跳轉功能,并以此來執行布置好的`ShellCode`惡意代碼片段,`LyScript`插件則可以很好的完成對當前行程記憶體中特定函式的檢索作業。在遠程緩沖區溢位攻擊中,攻... ......

    uj5u.com 2023-07-08 08:07:53 more
  • 萬字好文:大報文問題實戰

    大報文問題,在京東物流內較少出現,但每次出現往往是大事故,甚至導致上下游多個系統故障。大報文的背后,是不同商家業務體量不同,特別是B端業務的采購及銷售出庫單,一些頭部商家對京東系統支持業務復雜度及容量能力的要求越來越高。因此我們有必要把這個問題重視起來,從組織上根本上解決。 ......

    uj5u.com 2023-07-08 08:07:46 more
  • 4.3 x64dbg 搜索記憶體可利用指令

    發現漏洞的第一步則是需要尋找到可利用的反匯編指令片段,在某些時候遠程緩沖區溢位需要通過類似于`jmp esp`等特定的反匯編指令實作跳轉功能,并以此來執行布置好的`ShellCode`惡意代碼片段,`LyScript`插件則可以很好的完成對當前行程記憶體中特定函式的檢索作業。在遠程緩沖區溢位攻擊中,攻... ......

    uj5u.com 2023-07-08 08:06:48 more
  • 萬字好文:大報文問題實戰

    大報文問題,在京東物流內較少出現,但每次出現往往是大事故,甚至導致上下游多個系統故障。大報文的背后,是不同商家業務體量不同,特別是B端業務的采購及銷售出庫單,一些頭部商家對京東系統支持業務復雜度及容量能力的要求越來越高。因此我們有必要把這個問題重視起來,從組織上根本上解決。 ......

    uj5u.com 2023-07-08 08:06:41 more
  • 前端Vue組件之仿京東拼多多領取優惠券彈出框popup 可用于電商商

    #### 隨著技術的發展,開發的復雜度也越來越高,傳統開發方式將一個系統做成了整塊應用,經常出現的情況就是一個小小的改動或者一個小功能的增加可能會引起整體邏輯的修改,造成牽一發而動全身。通過組件化開發,可以有效實作單獨開發,單獨維護,而且他們之間可以隨意的進行組合。大大提升開發效率低,降低維護成本。 ......

    uj5u.com 2023-07-07 09:23:41 more
  • 前端Vue自定義精美底部操作欄導航欄工具列 可用于電商購物車底部

    #### 隨著技術的發展,開發的復雜度也越來越高,傳統開發方式將一個系統做成了整塊應用,經常出現的情況就是一個小小的改動或者一個小功能的增加可能會引起整體邏輯的修改,造成牽一發而動全身。通過組件化開發,可以有效實作單獨開發,單獨維護,而且他們之間可以隨意的進行組合。大大提升開發效率低,降低維護成本。 ......

    uj5u.com 2023-07-07 09:23:37 more
  • 前端Vue組件之仿京東拼多多領取優惠券彈出框popup 可用于電商商

    #### 隨著技術的發展,開發的復雜度也越來越高,傳統開發方式將一個系統做成了整塊應用,經常出現的情況就是一個小小的改動或者一個小功能的增加可能會引起整體邏輯的修改,造成牽一發而動全身。通過組件化開發,可以有效實作單獨開發,單獨維護,而且他們之間可以隨意的進行組合。大大提升開發效率低,降低維護成本。 ......

    uj5u.com 2023-07-07 09:23:04 more
  • 4.2 x64dbg 針對PE檔案的掃描

    通過運用`LyScript`插件并配合`pefile`模塊,即可實作對特定PE檔案的掃描功能,例如載入PE程式到記憶體,驗證PE啟用的保護方式,計算PE節區記憶體特征,檔案FOA與記憶體VA轉換等功能的實作,首先簡單介紹一下`pefile`模塊。pefile模塊是一個用于決議Windows可執行檔案(PE... ......

    uj5u.com 2023-07-07 09:22:37 more
  • 4.2 x64dbg 針對PE檔案的掃描

    通過運用`LyScript`插件并配合`pefile`模塊,即可實作對特定PE檔案的掃描功能,例如載入PE程式到記憶體,驗證PE啟用的保護方式,計算PE節區記憶體特征,檔案FOA與記憶體VA轉換等功能的實作,首先簡單介紹一下`pefile`模塊。pefile模塊是一個用于決議Windows可執行檔案(PE... ......

    uj5u.com 2023-07-07 09:16:25 more
  • 關于JS定時器的整理

    在JS中定時器有非常大的作用,例如: 執行延遲操作:使用setTimeout可以在一定的延遲后執行特定的代碼。這對于需要在一定時間后執行某些操作的情況非常有用,例如延遲顯示提示資訊、執行影片效果等。 定期重繪資料:使用setInterval可以定期執行某段代碼,例如定時從服務器獲取最新資料并更新頁面 ......

    uj5u.com 2023-07-07 08:48:51 more