拋磚引玉之gcc生成可可攜帶字符串的shellcode

看雪學院2018-10-15 10:15:06

原理:


通過linker script實現自定義section,將代碼段和只讀數據段鏈接到一起,生成一個dll,再用objcopy生成binary。



要求:


windows10,裝上debian或者ubuntu應用;

也可以直接用linux mingw-w64(gcc for windows gcc的一個發行版,用於編譯出exe dll sys等)。



步驟:


1,在linux shell中運行以下命令安裝mingw-w64。

1,在linux shell中運行以下命令安裝mingw-w64


2,解壓附件,並在shell中cd到附件目錄,執行以下命令編譯。

make all


3,運行例子。

./exec.exe



效果:




shellcode的hexdump:




附件:


entry_x86_64.S  入口彙編代碼,用於獲取PEB,並調用c代碼。編譯得出entry.o。鏈接的時候此文件需要放在前面,這樣使代碼放在shellcode頭部。其中用到的偏移量隨着各個操作系統版本的不同也有所變化,


sc.c  shellcode的c代碼部分,這裏只拿kernel32.dll的handle,並進一步得到其他相關的數據。然後調用MessageBoxA。需要注意的是,c代碼部分不能有全局變量,否則會出錯。


winapi.h windows的一些api的聲明。


sc.lds 鏈接腳本,將text代碼段和rdata只讀數據段直接拼接在一起。傳入到ld命令。


exec.c shellcode的測試程序,allocate一處讀寫執行的內存,拷貝shellcode到此內存,然後直接調用。


Makefile



後記:


這裏只是介紹gcc生成shellcode,其中有些細節也是可以展開的但是時間有限這裏就不展開了,況且論壇裏已經有帖子討論相關的內容了。另外關於編譯腳本,不懂Makefile的也要進行一定的學習才能基於本例繼續開發。


這個例子也是從我另一個弄着自己玩的pubg項目裏抽取出來的,別的部分是黑科技,就不放出來了。




- End -



看雪ID:malokch                         

https://bbs.pediy.com/user-453009.htm



本文由看雪論壇 malokch 原創

轉載請註明來自看雪社區



熱門圖書推薦:

逆向經典,初學者必備
立即購買!



熱門技術文章推薦:

  • 一步一步學pwntools

  • ratel,讓Xposed模塊在免root的環境下跑起來

  • 看雪CTF國慶賽落幕,是誰slay全場?

  • CVE-2018-17405漏洞預警及OpenZepplin詳解






公眾號ID:ikanxue
官方微博:看雪安全

商務合作:[email protected]

閲讀原文

TAGS: