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