滲透測試思路整理
1.單目標滲透(web)
1.1.資訊收集
滲透的開始都是資訊收集,很多時候一次滲透的成功與否決定性因素就是資訊收集,也許多了一個資訊點就是突破口。
1.1.1.目錄爆破
對於目錄爆破,目標不多的時候,應儘可能做一下目錄爆破,假如有防護可以調低執行緒數,再不行就做針對性手測。例如這是php的站就不要測jsp, aspx了,因此手動目錄爆破前最好先做指紋收集。
工具推薦:dirsearch https://github.com/maurosoria/dirsearch
1.1.2.指紋收集
收集cms資訊、中介軟體資訊、系統資訊、程式語言等等。
工具推薦:wappalyzer google\firefox外掛
1.1.3.前端程式碼介面收集
特指前端是因為不只包括html原始碼,也包括js程式碼中的介面、重要url,往往有些路徑爆破不出來,但可以通過前端程式碼審計獲得,從而繞過一些流程得到站點的脆弱點,甚至是未授權訪問等。
1.1.4.子域名爆破
例如一個主域名example.com,不一定要這樣:oa.example.com, test.example.com,也可以:oatest.example, testoa.example。即不一定爆破點兩邊都有‘.’,也可以插入在子域名中。
工具推薦:subDomainsBrute https://github.com/lijiejie/subDomainsBrute
1.1.5.fofa.so
合理運用fofa.so,例如可以用來輔助查詢真實ip,查詢子域名站點,查詢該伺服器其他的web服務。也可以獲得該站點的icon_hash,再反查同樣icon_hash的網站,通過其他同icon_hash的站暴露的脆弱點,拿回目標來測試。
1.1.6.真實ip
查真實ip方法:fofa查,海外ping ip,dnslog,dns解析歷史,查旁站等。
1.1.7.google hacking
搜尋該站點的使用者名稱格式,例如學號、工號,需要什麼找什麼,運用google高階搜尋語法。
1.2.掃描(被動掃描與主動掃描)
被動掃描,手動瀏覽頁面,結合掃描器掃描手動瀏覽過的頁面,或使用工具純人工測試掃描;主動掃描,使用掃描器建立任務,開啟掃描,睡醒收漏洞。
1.2.1.常用工具
首先列舉一下我用得比較多的工具:AWVS,Nessus,Xray,goby,sqlmap,vulmap,XSStrike,burp。
AWVS: 主動掃描web服務效果比較好的,覆蓋面廣,誤報率較低,功能也比較全面,可設定api。
Nessus: 一般用來掃描非web服務,個人認為web漏洞掃描效果不好,這裡主要先講web,因此先不提。
Xray: 被動掃描web服務效果比較好的,覆蓋面廣,誤報率低,可設定api。個人使用感覺,sql注入掃描和xss掃描比AWVS突出,但是被動掃描的時候,預設發包量過大。
goby: 一般用於資產掃描,資產掃描比較快速,但也會有漏的,拿來埠掃描是很不錯的。另外,goby可以新增很多外掛,可以加入goby聯動rad,也可以加AWVS的api,但我還沒嘗試過。
sqlmap: sql注入專用,我一般用於一些直覺像注入點的,我就往sqlmap扔;或者一些手注fuzz找到繞過方法,再用tamper引數做繞過。
vulmap: 用來識別和掃描框架、CMS漏洞,各種CVE。
XSStrike: AWVS或者Xray或者手注發現了一個XSS疑似點,想方設法繞想做彈窗的時候可以直接上這個工具,誤報率較低。
burp: 每天用,每時每刻沒關過。
1.2.2.掃描思路
首先判斷有沒有防護:
a) 有防護:
那就先不用主動掃描器,Xray也先不用,首先做不引起防護的資訊收集,比如前端程式碼介面收集、指紋收集、真實ip、子域名爆破、手動的目錄爆破。然後接下來的思路是先整體後區域性,先從CMS、框架、中介軟體、外掛入手,從CVE漏洞入手,使用搜索引擎找對應的版本的漏洞復現;再從web基本漏洞入手,例如:xss、sql注入、檔案上傳等。
這些都排查完了以後,再看前端程式碼介面有什麼,遍歷一遍,看有沒有脆弱點。
完了以後再看手動目錄爆破的結果,遍歷一遍,找脆弱點。
完了以後再看有沒有子域名爆破出來,遍歷一遍,找脆弱點。
再完了以後找真實ip,看能不能繞過CDN,可能本站是沒有防護的呢。
再完了以後沒找到真實ip,那就用burp抓關鍵頁面的包,找互動點和脆弱點,憑經驗手注。
完了以後手注也差不多也沒什麼了能幹了的,就當沒防護的開幹。
b) 無防護:
上掃描器加burp手測,怎麼效率高怎麼來。
思路還是由整體到區域性:先從CVE入手,再測web基本漏洞。
AWVS、Xray掃到的sql注入,根據給出的請求包,去sqlmap構造一個,但是要把payload刪掉,換成一個簡單的資料,例如:id=1‘ or 1=1-- 換成Id =1就好了,下面詳細一點講。
挖到的XSS先手測,因為開啟XSStrike去測可能都已經手測出來了,手測實在不能彈窗的話就用XSStrike。
檔案上傳點都過一遍,但同類型的點只看一個就好了,就比如同一頁面下不同的標籤下都有上傳點,看一個就好了,要麼程式碼都是一樣的,要麼用的一個上傳介面。
1.3.漏洞挖掘
1.3.1.SQL注入
一個請求中,引數少的話可以直接使用burp重放修改引數插入sql語句測試;引數多的話,可以直接上sqlmap。GET方法請求的話可以直接使用-u引數,POST方法的話我習慣使用-r引數,直接把burp包全選複製,vim 一個新檔案,直接貼上,然後加-r引數。使用sqlmap的時候我習慣加上--random-agent引數,伺服器響應慢的話還會加上--time-sec引數。無腦扔sqlmap的請求一般不加--level/--risk,但是高度懷疑的點就會加上--level/--risk。其次使用sqlmap的時候有一些可能需要做簡單的繞過的,可以使用--tamper引數,檢視有什麼tamper的話可以使用--list-tampers引數。
再說回到注入點的payload的問題,舉個例子:
POST /Home/Login HTTP/1.1 Host: 1xx.2xx.1xx.xx User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:90.0) Gecko/20100101 Firefox/90.0 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8 Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2 Accept-Encoding: gzip, deflate Content-Type: application/x-www-form-urlencoded Content-Length: 94 Origin: http://1xx.2xx.1xx.xx Connection: close Referer: http://1xx.2xx.1xx.xx/Home/Login Upgrade-Insecure-Requests: 1 USERNAME=1)%20AND%208315%3d8315%20AND%20(3433%3d3433&PASSWORD=21232f297a57a5a743894a0e4a801fc3
像上面這種情況,username直接複製過來使用sql注入的payload在裡面的,我們就需要把它清除掉,變成這樣:
POST /Home/Login HTTP/1.1 Host: 1xx.2xx.1xx.xx User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:90.0) Gecko/20100101 Firefox/90.0 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8 Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2 Accept-Encoding: gzip, deflate Content-Type: application/x-www-form-urlencoded Content-Length: 94 Origin: http://1xx.2xx.1xx.xx Connection: close Referer: http://1xx.2xx.1xx.xx/Home/Login Upgrade-Insecure-Requests: 1 USERNAME=1&PASSWORD=21232f297a57a5a743894a0e4a801fc3
然後再儲存成一個txt檔案,再使用sqlmap的-r引數掃描,會比夾雜著payload的請求成功機率高。
遇到mssql注入時,假如時聯合注入,大概率可以直接進入os-shell;假如不能os-shell只能sql-shell的情況,一般不能執行系統命令。下週仍需研究一下遇到sql-shell但知道web絕對路徑的時候,看有沒有辦法使用sql-shell寫一個webshell。
1.3.2.XSS
挖XSS的第一感覺肯定就是:輸入什麼回顯什麼。我的一般思路是在資料中插入<script>,或者<img>,<a>等標籤,先不插入其他。然後在頁面中按f12看插入點的標籤有沒有被變色。如果變色了那肯定是執行了插入的程式碼。
大體思路就是:插入的payload,從短到長。舉例一下:
<img> #不執行,繞過 <iMg> #執行,加長 <iMg src> #執行,加長 <iMg src=x onerror> #不執行,繞過 <iMg src=x onERroR> #不執行,繞過 <iMg src=x onStaRT> #執行,加長 <iMg src=x onStaRT=alERt(123)> #執行,成功彈窗
怎麼才能知道有沒有執行,我的方法一般是f12看顏色就能知道。假如手測比較困難彈窗可以用XSStrike,它會給出很多彈窗的payload。
1.3.3.檔案上傳
檔案上傳思路都差不多了,首先判斷是什麼限制:
前端限制字尾名,後端限制字尾名、content-type、檔案頭識別、木馬查殺等。
然後準備好一個資料夾裡面放各種馬和變種馬。php/jsp/apsx馬,再準備好把字尾改成了,jpg/pdf...的馬,準備增加了檔案頭幻數的馬。再準備好.htaccess,user.ini這樣的檔案,方便需要什麼傳什麼。
1.3.4.弱口令
固定使用者名稱爆破密碼,固定密碼爆破使用者名稱。
1.3.5.未授權訪問
附上401越權小技巧:(作者看藍色框內)
別的漏洞就沒什麼見解了,歡迎補充和指點。
2.多目標滲透(web)
多目標還是建立在單目標上,接下來這部分簡述一些自己的見解。
2.1.資訊收集
埠掃描+服務識別+目錄爆破
首先發現埠,找到所有http服務,並識別狀態碼,這個goby可以做到。
目錄爆破:
首先開啟網頁檢視,假如是除200、403、404、401外的連線超時、500等稀奇古怪的狀態碼的可以直接略過。
假如是403、404,可能只是找不到Index,因此可以爆破目錄,往往會有驚喜。
假如是401,可以嘗試401越權小技巧,當然試幾個就算了,提高效率。
假如是200,但現實nginx、apache等初始頁面的,說明還沒動過,可以直接略過。
假如是200,但頁面上寫著body標籤的字,禁止訪問、無法訪問等,說明可能動過但廢棄掉了,直接爆破目錄,會有驚喜。
使用dirsearch掃描後,響應包大小也是很重要的,可能有很多個200,但是返回包都是一樣大的,看其中一個就Ok了,這種大概率都是沒有營養的。
批量化:把403, 404狀態碼的url匯出來,使用dirsearch批量掃描,這樣的狀態碼一般要麼不出東西,要麼出有營養的東西,很快能找到脆弱點。但dirsearch批量掃描需要結合指令碼。
2.2.掃描
假如是200,頁面也有內容,但幾乎是純靜態而且是比較老的,就不用再一個個頁面搜後端互動點了,有互動點就測,不需要一個個靜態頁面找,直接目錄爆破,說明很久沒更新使用,可能有驚喜。
假如是200,頁面很豐富,很多功能點和後端互動點,找一個點手測幾次,發現沒有防護直接上掃描器,xray或者awvs。
有防護的話可能就要花點心思了,先手測,要用掃描器的話先用掃CMS、外掛的掃描器,如vulmap,再上AWVS或者xray,或許xray把執行緒調低,還是可以的。
也可以先手測,沒有頭緒再上掃描,掃到被ban了也可以換目標。等伺服器緩過來再回去看。
簡而言之,量大就要提高效率,快速找脆弱點。
2.3.漏洞挖掘
挖漏洞就和單目標雷同了。
3.web外滲透
3.1.資訊收集
埠掃描+指紋識別
發現什麼埠執行著什麼服務,獲得該服務的指紋資訊。
3.2.掃描
Nessus是一個好幫手。
對照常見漏洞服務和埠把風險項標出。
3.3.漏洞挖掘
能用poc&exp就不手測,重點關注各服務未授權訪問和弱口令。
一些CVE或弱口令,不一定要去網上找,很多服務的弱口令爆破工具,msf裡面就有。
寫得不好,水了,有待補充,歡迎師傅們斧正。