聊一聊滲透測試過程中的腳本功能
今天就來給大家聊一聊在滲透測試中我們可能需要寫的腳本功能,我平時代替手工提升效率使用的語言是 python,所以就以 python 為例貫穿整個滲透過程的功能,也可以作為指導(dǎo),針對性的去學(xué)習(xí)和實踐。
滲透過程中通常包含信息收集和漏洞利用兩個主要部分,在信息收集中,我們要收集目標(biāo)的外圍資產(chǎn)信息,也就是我們在外部可以直接訪問的服務(wù)器和應(yīng)用,這其中包括:域名信息、IP 信息、企業(yè)內(nèi)部員工信息、端口開放信息、web 應(yīng)用信息等。
信息收集
域名信息包含一級域名的注冊信息以及企業(yè)對外解析的所有二級域名列表等,注冊信息可以通過 whois 的方式去查看,互聯(lián)網(wǎng)上存在很多網(wǎng)站提供 whois 查詢的功能。
獲取企業(yè)所有二級以上域名的途徑很多,比如:
- 通過爬蟲的方式去目標(biāo)網(wǎng)站爬取
- 通過搜索引擎搜索相關(guān)數(shù)據(jù)
- 通過字典進(jìn)行枚舉(dns 解析)
IP 信息是企業(yè)對外開放的所有 IP 列表,越多越好,獲取 IP 的途徑主要有兩種,一種是通過收集到的域名解析出該企業(yè)的 IP 列表;第二種是通過 whois 查詢這些 IP 信息,看這些 whois 信息中是否包含目標(biāo)公司的信息,從而確認(rèn) IP 的歸屬,有的時候,whois 中包含的是一個 IP 段,獲取你可以通過 IP 獲取公司的整個 IP 段。
用戶郵箱的收集主要通過搜索引擎尋找那些安全意識不到位公開泄漏的郵箱地址,還可以通過網(wǎng)上泄露的公司相關(guān)文檔中保存的郵箱地址,更多的方式這里不說了,自己思考吧。
端口信息的獲取主要通過掃描的方式,利用前面收集到的 IP 信息,利用端口掃描的方式獲取所有開放的端口以及相關(guān)服務(wù)。
web 應(yīng)用信息主要是方便我們尋找 web 應(yīng)用的漏洞,其中包含 web 指紋、服務(wù)器信息、目錄結(jié)構(gòu)等。
涉及自動化的場景
(1) 如果我們需要測試的域名非常多時候,想要了解這些域名的基礎(chǔ)信息,如果一個一個去 whois 查詢,是不是會很累?我們能否進(jìn)行自動化?當(dāng)然可以,實現(xiàn)的方式也很簡單,我們在網(wǎng)絡(luò)上找一個可以查詢域名 whois 信息的網(wǎng)站,查看其查詢接口,使用 python 的 requests 庫請求接口查詢即可,然后寫一個 for 循環(huán),自動獲取所有域名信息保存,跑完自己查看結(jié)果即可。
(2) 在收集二級域名列表時,我們需要從搜索引擎里提取相關(guān)記錄,手工復(fù)制是不現(xiàn)實的,畢竟大廠的二級以上的域名都是上千上萬的,所以我們需要從搜索引擎拿到搜索結(jié)果并將二級以上的域名提取出來,請求內(nèi)容上面已經(jīng)說了,提取域名主要用到的是 python 的 re 庫,學(xué)習(xí)正則的使用至關(guān)重要。
(3) 收集域名列表除了爬蟲、搜索引擎的方式外,還可以用字典枚舉,枚舉的過程主要用到的是 dns 的解析功能,python 中的 socket 庫,其中有個函數(shù) gethostbyname 可以實現(xiàn)你想要的功能,***準(zhǔn)備一份字典就可以開跑了。
(4) 獲取了一大批的 IP 地址,還想擴(kuò)展更多的 IP,那么就需要對收集到的 IP 進(jìn)行 whois 查詢,Linux 下存在一個工具 whois 直接可以查詢 IP 的 whois 信息,效率蠻高的,我們可以用 python 的 os 模塊等可以執(zhí)行系統(tǒng)命令的模塊調(diào)用 Linux 下的 whois 程序查詢你想查的 IP 地址,***處理查詢的所有結(jié)果即可。
(5) IP 列表和 IP 段獲得之后,我們要知道這些 IP 上開放了那些端口和服務(wù),這時就需要對這些 IP 進(jìn)行端口掃描,最簡單的方式就是使用 nmap 來掃描,python 的調(diào)用方式跟上面的一樣,我們還可以自己寫端口掃描工具,其中最核心的是判斷 IP 的某個端口是否開放,TCP 的三次握手原理我們要懂,可以用 python 的 socket 庫,還可以用 scapy 庫構(gòu)造協(xié)議進(jìn)行檢測。
(6) 在端口掃描的時候,需要加快速度,降低檢測的時間,那么就需要用到 python 的 threading 庫,使用多線程技術(shù),提升速度,在 guthub 上有很多封裝好的 threadpool 庫,直接利用就好。
(7) 對于 web 應(yīng)用,***步是要獲取基本的信息,我們可以使用 python 的 httplib、urllib、urllib2 等基礎(chǔ)庫,獲取 IP 的 web 端口下的基本信息,包括 header 中的服務(wù)器信息、默認(rèn)首頁的標(biāo)題和內(nèi)容等。
(8) 目錄結(jié)構(gòu)信息獲取的方式***種是通過爬蟲根據(jù)網(wǎng)站的鏈接探測目錄結(jié)構(gòu)和文件列表,還可以通過自己收集的字典,進(jìn)行枚舉目錄和文件,這里用到的庫跟上面的類似,至于收集的全不全,就看你收集的字典夠不夠好。
漏洞利用
經(jīng)過信息收集模塊之后,我們對企業(yè)的資產(chǎn)信息有了大概的了解,其中可能會包含存在漏洞的應(yīng)用,在漏洞利用階段,需要自動化的地方不多,畢竟漏洞利用是具有破壞性的,大概提一下。
- 網(wǎng)絡(luò)層面的漏洞利用可以用 scapy 構(gòu)造協(xié)議進(jìn)行利用
- web 層面主要是那些與 http 協(xié)議相關(guān)的庫,如:urllib、httplib、requests 等
其他的大家可以補(bǔ)充討論。
總結(jié)
這里提到的東西還是不全面,本文的主要目的是告訴大家,在搞滲透的時候,盡量實現(xiàn)自動化,總結(jié)規(guī)律,提升工作效率,在有限的生命里做更多的事,懶人是改變世界的主要驅(qū)動力,有些時候不要太勤快,容易導(dǎo)致你浪費(fèi)大量不必要的時間。