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