1. 程式人生 > 其它 >滲透測試思路整理

滲透測試思路整理

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裡面就有。

寫得不好,水了,有待補充,歡迎師傅們斧正。