一般不會(huì)只使用一種語(yǔ)言的,取決于具體的攻擊場(chǎng)景。 比如說(shuō)需要攻擊某個(gè)漏洞的時(shí)候,一般需要把一段惡意代碼送到目標(biāo)機(jī)器里。這段惡意代碼行話(huà)叫“payload”,一般只能根據(jù)漏洞成因選擇特定的編程語(yǔ)言:
XSS / CSRF 漏洞一般只能用 JavaScript。
SQL注入一般只能構(gòu)造畸形SQL語(yǔ)句,命令執(zhí)行類(lèi)的會(huì)摻一點(diǎn)bash、DOS命令。
反序列化漏洞一般用JSON、XML等,取決于具體的數(shù)據(jù)交換語(yǔ)言。
溢出漏洞一般用匯編、C編寫(xiě)shellcode,而且一般需要用到專(zhuān)門(mén)的 Jump-Oriented Compiler。
拿Web Shell的時(shí)候,需要根據(jù)當(dāng)前Web服務(wù)器配置選擇相應(yīng)的ASP、PHP、ASPX等語(yǔ)言。
另外,將payload送入目標(biāo)機(jī)器一般需要構(gòu)造特殊的提交方式:如果需要構(gòu)造畸形HTTP請(qǐng)求的話(huà),我一般選擇Python,requests庫(kù)真的很好用。
如果需要在套接字層直接提交TCP/UDP數(shù)據(jù)的話(huà),我一般選擇C,也會(huì)考慮Python。
剩下的情形對(duì)語(yǔ)言一般就沒(méi)有強(qiáng)制要求了,我平時(shí)大概隨心情在 Go 和 Python 之間選一個(gè)。