linux下so注入,linux下的共享库. so 注入: 如何定位 dlopen() 地址?_shared-libraries_开发99编程知识库...

最近我對Linux感興趣,我正在嘗試創建一個能夠注入共享對象( 例如 )的程序。 .so 文件。'動態載入庫'。"庫"。我知道這可以通過設置環境變數來完成。

我已經知道如何在 Windows 下做這個。 有幾種方法,但是一般來說,你可以通過使用 CreateRemoteThread() 創建遠程線程來調用 LoadLibrary() 。 當然,你需要在遠程進程中的地址,但是( 以我的經驗) 總是處於每個進程的相同偏移量。

我已經做了一些關於如何在Linux下做到這一點的研究。 例如 Phrack 59中的一個有趣的文章展示了如何做到這一點。 本文還附加了一個源代碼,但是由於某些假設是由目標進程組成的,因這裡無法使用。 我遇到的其他問題: 一個,文章,但這隻解釋了如何從gdb中進行它。 ( 我將發布更多鏈接,但網站將我限製為 2: -/。)

首先,我想在遠程進程中獲取 dlopen() 函數的地址。 為這裡,我發現我必須獲得進程的elf頭,並循環訪問符號表。 實際上,我成功地做到了,

1 ) 獲取elf頭( 在我的體驗中存儲在 0 x400000下的64bits 下) 。

2 ) 在標記為動態的程序標題中查找全局偏移表。

3 ) 通過訪問全局偏移表中的第二個條目來檢索第一個 link_map 。

4 ) 遍歷link_map鏈的動態部分,從而獲取字元串表的地址,符號表和哈希表( *Hash_Table + 0 x4保存符號表中的條目數量) 。

5 ) 在符號表中循環

我的程序的一些示例輸出:** looking at lib"" **

Trying to find symbol main in symbol table... numentries: 49

index 1 name: val: 0

...

index 49 name: memcpy val: 0

symbol not found.

** looking at lib"" **

Trying to find symbol main in symbol table... numentries: 11

index 1 name: val: 0

...

index 11 name: __vdso_time val: 0xffffffffff700a80

symbol not found.

** looking at lib"/lib/x86_64-linux-gnu/libc.so.6" **

Trying to find symbol main in symbol table... numentries: 2190

index 1 name: val: 0

...

index 2190 name: wcpcpy val: 0xa3570

symbol not found.

但是,我無法找到dlopen的有效地址 ! ( 甚至是主要的地址) 為了測試,我讓程序分析自己,我知道主要存在。 我還嘗試 readelf -s來查看符號表,它顯示:Symbol table '.symtab' contains 151 entries:

Num: Value Size Type Bind Vis Ndx Name

. . .

149: 0000000000401880 216 FUNC GLOBAL DEFAULT 13 main

所以readelf設法找到了主要的,而我不能。 我還查看了libelf庫,但這依賴於從應用程序文件讀取,而不是訪問進程( 例如 )的內存。 在進程運行時,它不能使用。) 有關如何在遠程過程中找到 dlopen()的線索。

我正在運行 12.04 64位。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值