文章目錄
- 第一章 信息收集
- 第二章 環境搭建
- 第三章 滲透工具
- 3.1sqlmap
- 3.1.1安裝
- 3.1.2入門
- 3.1.3進階:參數講解
- 1.--level 探測等級
- 2.--is-dba 當前用戶是否爲管理員權限
- 3.--roles 列出數據庫管理員的角色(僅Oracle)
- 4.referer HTTP Referer頭
- 5.--sql-shell 運行自定義SQL語句
- 6.--os-cmd,--os-shell 運行任意操作系統命令
- 7.--file-read 從數據庫服務器中讀取文件
- 8.--file-write,--file-dest 上傳文件到數據庫服務器中
- 9.--identify-waf 判斷目標是否有安全防護(WAF/IDS/IPS)進行試探
- 3.1.4 SQLmap自帶繞過腳本tamper的講解
- 常用的tamper腳本
- apostrophemask.py
- base64encode.py
- multiplespaces.py
- space2plus.py
- nonrecursivereplacement.py
- space2randomblank.py
- unionalltounion.py
- securesphere.py
- space2hash.py
- space2mssqlblank.py(mssql)
- space2mssqlhash.py
- between.py
- percentage.py
- sp_password.py
- charencode.py
- randomcase.py
- charunicodeencode.py
- space2comment.py
- equaltolike.py
- greatest.py
- ifnull2ifisnull.py
- modsecurityversioned.py
- space2mysqlblank.py
- modsecurityzeroversioned.py
- space2mysqldash.py
- bluecoat.py
- versionedkeywords.py
- halfversionedmorekeywords.py
- space2morehash.py
- apostrophenullencode.py
- chardoubleencode.py
- unmagicquotes.py
- randomcomments.py
- 3.2burpsuite
- 3.3nmap
- 第四章 Web安全原理
- 4.1SQL注入基礎
- 4.2SQL注入進階
- 4.3SQL注入繞過
- 4.4XSS基礎
- 4.5XSS進階
- 4.6CSRF
- 4.7SSRF
- 4.8文件上傳
- 4.9暴力破解
- 4.10命令執行
- 4.11邏輯漏洞挖掘
- 4.12XXE
- 4.13WAF
- 第五章 Metasploit
- 5.1Metasploit簡介
- 5.2Metasploit基礎
- 5.3主機掃描
- 5.4漏洞利用
- 5.5後滲透攻擊:信息收集
- 5.6後滲透攻擊:權限提升
- 5.7後滲透攻擊:移植漏洞利用代碼模塊
- 5.8後滲透攻擊:後門
- 5.9內網攻擊域滲透實例
- 第六章 Powershell
第一章 信息收集
滲透測試之前,最重要的一步就是信息收集,在這個階段,我們要儘可能的手機目標組織的信息。越是瞭解測試目標,更有利於測試工作的進行。在信息收集過程中,主要收集服務器的配置信息和網站的敏感信息,包括域名以及子域名信息、目標網站系統、CMS指紋、目標網站真實IP、開放的端口等。只要是與目標網站相關的信息,我們都應該儘量去收集。
1.1域名信息
得到了目標域名後,第一件事就是獲取域名的註冊信息。包括該域名的DNS服務器和註冊人的信息等。域名信息收集的方法有以下幾種。
1.1.1whois查詢
Whois是一個標準的互聯網協議,可用於收集網絡註冊信息,註冊域名、IP地址等信息。在Whois查詢中,得到註冊人的姓名和郵箱信息通常對測試個人站點非常有用,可以通過搜索引擎和社交網絡挖掘出域名所有人的很多信息。對於中小站點,域名所有人往往就是管理員。使用kali系統中的whois查詢功能如下圖所示:
在線的第三方whois查詢網站還有愛站工具網、站長之家、VirusTotal,通過這些網站可以查詢域名的相關信息,如域名服務商,域名擁有者,以及他們的郵箱、電話、地址等。
1.1.2備案信息查詢
網站備案是根據國家法律規定,網站所有者需要向國家有關部門申請備案,這是國家信息產業部對網站的一種管理,爲了防止在網上從事非法的網站經營活動的發生。主要正對國內。
常用的網站有以下這兩個:
ICP備案查詢網,
天眼查。
1.2敏感信息
Google是世界上最強的搜索引擎之一,對於滲透測試者而言,它可能是一款絕佳的黑客工具。我們可以 通過構造特殊的關鍵字語法來搜索互聯網上相關的敏感信息 。其常見用法及說明如下表:
關鍵字 | 說明 |
---|---|
site | 指定域名 |
inurl | URL中存在關鍵字的網頁 |
intext | 網頁正文中的關鍵字 |
filetype | 指定文件類型 |
intitle | 網頁標題中的關鍵字 |
link | link:baidu.com 即表示返回所有和baidu.com做了鏈接的URL |
info | 查找指定站點的一些基本信息 |
cache | 搜索Google裏關於某些內容的緩存 |
利用搜索引擎還可以收集數據庫文件、SQL注入、配置信息、源代碼泄露、未授權訪問和robots.txt等敏感。
另外,通過burpsuite的repeater功能同樣可以獲取一些服務器信息,如運行server類型和版本、PHP版本信息等。針對不同的server,可以利用不同的漏洞進行測試。
除此之外,也可以嘗試在github上尋找相關敏感信息。如數據庫鏈接信息、郵箱密碼、UC-key、阿里的osskey,有時還可以找到泄露的源代碼等。
讀者可以通過烏雲漏洞列表查看歷史漏洞信息。
1.3子域名信息
如果目標網絡規模較大,一般從其子域名入手。子域名收集方法常見以下幾種。
1.3.1 子域名檢測工具
常用的子域名收集工具有:Layer子域名挖掘機、K8、wydomain、Sublist3r、dnsmaper、subDomainsBrute、Maltego CE等。筆者重點推薦Layer子域名挖掘機、SubList3r和subDomainsBrute。
Layer子域名挖掘機使用較簡單,只需要在域名對話框中直接輸入域名即可,掃描結果顯示包括域名、解析IP、CDN列表、Web服務器和網站狀態等。
SubList3r可以列舉多種資源,如Google、Yahoo、bing、百度等搜索引擎中可查到的子域名,還可以列出Netcraft、VirusTotal、ThreatCrowd、DNSdumpster和Reverse DNS查到的子域名。
subDomainsBrute的特點是可以用小字典遞歸發現三級、四級域名,用法如下:
python subDomainsBrute.py xxx.com
1.3.2搜索引擎枚舉
可以使用Google語法搜索子域名:site:xxx.com
1.3.3第三方聚合應用枚舉
很多使用第三方服務匯聚了大量DNS數據,它可以通過檢索某個給定的子域名。只需要在其搜索欄中輸入域名。也可以使用DNSdumpster網站、在線DNS偵查和搜索的工具挖掘出指定域潛藏的大量子域。
1.3.4證書透明公開日誌枚舉
證書透明度是證書授權機構的一個項目,證書授權機構會將每個SSL/TLS證書發佈到公共日誌中。一個SSL/TLS證書通常包含域名、子域名和郵件地址,這些也經常成爲攻擊者非常希望獲得的有效信息。查找某個域名所屬證書的嘴就簡單的方式就是使用搜索引擎搜索一些公開的CT日誌。
推薦使用crt.sh和censys這兩個網站。
除此之外、還可以利用一些在線網站查詢子域名,如子域名爆破網站、IP反查綁定域名網站。
1.4端口信息
通過掃描服務器開放的端口及其對應的服務,可對症下藥。使用的最常見工具是Nmap,還有無狀態端口掃描工具Masscan、ZMap和御劍高速TCP端口掃描工具。
常見端口、服務描述及其攻擊方式如下:
- 文件共享服務端口
端口號 | 服務 | 攻擊方式 |
---|---|---|
21/22/69 | ftp/tftp文件傳輸協議 | 允許匿名的上傳、下載、爆破和嗅探 |
2049 | NFS服務 | 配置不當 |
139 | Samba服務 | 爆破、未授權訪問、遠程代碼執行 |
389 | ldap | 目錄訪問協議 |
- 遠程鏈接服務端口
端口號 | 服務 | 攻擊方式 |
---|---|---|
22 | SSH遠程連接 | 爆破、SSH隧道及內網代理轉發、文件傳輸 |
23 | Telnet遠程連接 | 爆破、嗅探、弱口令 |
3389 | rdp遠程桌面連接 | shift後門(Windows server2003以下)、爆破 |
5900 | VNC | 弱口令爆破 |
5632 | PyAnywhere服務 | 抓密碼、代碼執行 |
- 郵件服務端口
端口號 | 服務 | 攻擊方式 |
---|---|---|
25 | SMTP郵件服務 | 郵件僞造 |
110 | POP3協議 | 爆破、嗅探 |
143 | IMAP協議 | 爆破 |
- 網絡常見協議端口
端口號 | 服務 | 攻擊方式 |
---|---|---|
53 | DNS域名系統 | 允許區域傳遞、DNS劫持、緩存投毒、欺騙 |
67/68 | DHCP服務 | 劫持、欺騙 |
161 | SNMP協議 | 爆破、收集目標內網信息 |
- 特殊服務端口
端口號 | 服務 | 攻擊方式 |
---|---|---|
2181 | Zookeepr服務 | 未授權訪問 |
8069 | Zabbix服務 | 遠程執行、SQL注入 |
9200/9300 | Elasticsearch服務 | 遠程執行 |
11211 | Memcache服務 | 未授權訪問 |
512/513/514 | Linux Rexec服務 | 爆破、Rlogin登錄 |
873 | Rsync服務 | 匿名訪問、文件上傳 |
3690 | Svn服務 | Svn泄露、未授權訪問 |
50000 | SAP Management Console | 遠程執行 |
1.5指紋信息
指紋信息指網站CMS指紋識別、計算機操作系統及web容器的指紋識別等。
根據一些特定文件中的某些特徵,就可以判斷出使用的CMS。
滲透測試中有必要對其進行指紋識別,識別出指紋就可以更好的進行相關漏洞的測試。
CMS又稱整站系統或文章系統。常見的CMS有dedecms(織夢)、Discuz、PHPWEB、PHPWind、PHPCMS、ECShop、Dvbbs、SiteWeaver、ASPCMS、帝國、Z-Blog、WordPress等。
代表工具:御劍Web指紋識別、WhatWeb、椰樹、輕量Web指紋識別等。在線工具:BugScaner,雲悉指紋,WhatWeb。
1.6真實IP
首先判斷目標是否使用了CDN,可以通過ping測試判斷。
如果可知目標沒有使用CDN,可以直接通過www.ip138.com獲取目標的一些IP及域名信息。
如果使用了CDN,需要繞過CDN來找到CDN。可以通過如下幾種方法來進行繞過CDN:
- 內部郵箱源
一般的郵件系統都在內部,不會經過CDN解析。通過目標網站用戶註冊和RSS訂閱功能,查看郵件頭中的域名信息,通過ping測試得到IP地址。 - 掃描文件測試文件
如phpinfo、test等,從而找到目標的真實IP。 - 分站域名
很多網站主站流量較大,會使用CDN,但是分站一般不會使用。通過找到分站的IP,很多情況下,分站和主站在同一個網段裏面,從而判斷出主站存在的網段。然後藉助Masscan等工具批量掃描對應IP段中所有開了80/443/8080端口的IP,然後逐個訪問,觀察結果是否爲目標站點。 - 國外訪問
國內有的網站只對國內網站加速,對國外不一定加速。可以通過App Synthetic Monitor進行ping測試。 - 從APP獲取
如果網站有自己的APP,可以利用Fiddler或burpsuite抓取APP的請求,從裏面找到真實ip。 - 繞過CloudFlare CDN查找真實IP。
很多網站使用了CloudFlare CDN,對於這類網站可以通過CloudFlareWatch對CloudFlare客戶端進行真實ip查詢。
1.7敏感目錄文件
滲透測試中,探測目錄結構和隱藏的敏感文件是必不可少的。這波操作可能會獲得後臺管理頁面,文件上傳頁面,以及網站源代碼等。
工具有:DirBuster、御劍後臺掃描珍藏版、wwwscan、Spinder.py(輕量級快速單文件目錄後臺掃描)、Sensitivefilescan(輕量級快速單文件目錄後臺掃描)、Weakfilescan(輕量級快速單文件目錄後臺掃描)等。
DirBuster的使用:
要求使用java環境
在target URL輸入目標地址
請求方式:auto
線程:20-30
URL to full:/{dir} 這裏{dir}是一個變量,表示字典裏的每一行。
如果掃描的是http://www.xxx.com/admin/,那麼URL to fuzz填:/admin/{dir}
若輸入:/admin/{dir}.php,表示admin下面所有的php文件。
除此以外,還可以使用WebScan等第三方工具。
1.8社會工程學
一方面可以通過社工方法獲取一些相關信息。
另一方面也可以通過社工庫查詢一些信息。
第二章 環境搭建
2.1在Linux中安裝LANMP
2.2在Windows中安裝wamp
2.3搭建DVWA漏洞平臺
2.4搭建SQL注入平臺
2.5搭建XSS測試平臺
第三章 滲透工具
3.1sqlmap
SQLmap是一個自動化的SQL注入工具
主要功能:掃描、發現並利用給定的URL的SQL注入漏洞。包括數據庫指紋識別、數據庫枚舉、數據提取、訪問目標文件系統,並在獲取完全的操作權限時實行任意命令。
支持數據庫:MySQL、Oracle、PostgreSQL、SQL server、Access、DB2、SQLite、Firebird、Sybase、SAP MaxDB。
包含的注入技術:
- 基於布爾類型的盲注,即可以根據返回頁面判斷條件真假的注入。
- 基於延時的注入,即不能根據頁面的返回信息判斷任何信息,要用條件語句查看時間延時語句是否已經執行。
- 基於報錯的注入,即頁面會返回錯誤消息,或者把注入的語句的結果直接返回到頁面中。
- 聯合查詢注入,在可以使用union的情況下注入。
- 堆查詢注入,可以同時執行多條語句時的注入。
3.1.1安裝
略
3.1.2入門
1.判斷是否存在注入
sqlmap.py -u http://target?id=1
當目標有多個參數時,需要加雙引號
sqlmap.py -u "http://target?id=1&uid=2"
2.判斷文本中是否存在注入
從文件中加載HTTP,SQLMAP可以從一個文本中獲取HTTP求情,這樣就可以不設置其他參數(cookie,post數據等),txt文件中的內容爲Web數據包。
sqlmap.py -r target.txt
3.查詢當前用戶下的所有數據庫
sqlmap.py -u http://target?id=1 --dbs
4.查詢某個數據庫中的表名
sqlmap.py -u http://target?id=1 -D xxx --tables
5.獲取某數據庫中某表的字段
sqlmap.py -u http://target?id=1 -D xxx -T xxx --columns
6.獲取字段內容
sqlmap.py -u http://target?id=1 -D xxx -T xxx -C xxx,xxx --dump
7.獲取數據庫中所有用戶
sqlmap.py -u http://target?id=1 --users
8.獲取數據庫用戶的密碼
sqlmap.py -u http://target?id=1 --passwords
9.獲取當前網站數據庫的名稱
sqlmap.py -u http://target?id=1 --current-db
10.獲取當前數據庫用戶名稱
sqlmap.py -u http://target?id=1 --current-user
3.1.3進階:參數講解
1.–level 探測等級
共1-5五個等級,默認爲1,SQLmap使用的payload在xml/payload.xml中,也可以根據響應的格式添加自己的payload。5級包含色payload最多,可自動破解cookie、XFF等頭部注入。cookie在level2的時候會測試,http useragent/referer在level3的時候會測試。
2.–is-dba 當前用戶是否爲管理員權限
sqlmap.py -u http://target?id=1 --is-dba
3.–roles 列出數據庫管理員的角色(僅Oracle)
如果當前用戶有權限讀取包含所有用戶的表,輸入該命名會列出每個用戶的角色。也可以使用-U參數指定查看哪個用戶的角色。
4.referer HTTP Referer頭
可以自定義Referer頭進行欺騙,level3及以上會對Referer進行注入測試。
5.–sql-shell 運行自定義SQL語句
該命令用於執行指定的SQL語句
sqlmap.py -u http://target?id=1 --sql-shell
6.–os-cmd,–os-shell 運行任意操作系統命令
在數據庫爲MySQL、PostpostgreSQL、SQL Server,並且當用戶有權限使用特定的函數時,如果數據庫爲MySQL、PostgreSQL,SQLmap上傳一個二進制庫,包含用戶自定義的函數sys_exec()和sys_eval(),那麼創建這兩個函數就可以執行系統命令。在SQLserver中,SQLmap將使用xp_cmdshell存儲過程、如果被禁用(SQLserver2005及以上默認關閉),則SQLmap會從新啓用它;如果不存在,會自動創建。
用–os-shell參數可以模擬一個真實的shell,輸入想執行的命令。當不能執行多語句時(比如PHP和asp的後端數據庫爲MySQL),仍然可以使用INTOOUTFILE寫進可寫目錄,創建一個Web後門。–os-shell支持ASP、ASP.NET、JSP和PHP四種語言(要想執行該參數、需要由數據庫管理員權限,也就是–is-dba的值爲true)
7.–file-read 從數據庫服務器中讀取文件
該命令用於讀取執行文件,在數據庫爲MySQL、PostpostgreSQL、SQL Server,並且當用戶有權限使用特定的函數時,讀取的文件可以是文本,可以是二進制文件。
sqlmap.py -u http://target?id=1 --file-read "C:/example.exe"
8.–file-write,–file-dest 上傳文件到數據庫服務器中
該命令用於寫入本地文件到服務器中,當數據庫爲MySQL、PostgreSQL或SQLserver,並且在當前用戶有權限使用特定函數時,上傳的文件可以是文本,也可以是二進制文件。
9.–identify-waf 判斷目標是否有安全防護(WAF/IDS/IPS)進行試探
3.1.4 SQLmap自帶繞過腳本tamper的講解
tamper參數對數據做修改來繞過waf等設備,其中大部分腳本主要使用正則模塊替代攻擊載荷字符編碼的方式繞過waf的檢測規則。
sqlmap.py -u http://target?id=1 --tamper "模塊名"
常用的tamper腳本
apostrophemask.py
作用:將引號替換爲UTF-8,用於過濾單引號。
base64encode.py
作用:替換爲base64編碼
multiplespaces.py
作用:圍繞SQL關鍵字添加多個空格
space2plus.py
作用:用加號替換空格
nonrecursivereplacement.py
作用:作爲雙重查詢語句,用雙重語句替代預定義的SQL關鍵字(適用於非常弱的自定義過濾器,例如將select替換爲空)。
space2randomblank.py
作用:將空格替換爲其他有效字符。
unionalltounion.py
作用:將UNION ALL SELECT替換爲UNION SELECT
securesphere.py
作用:追加特製的字符串。
space2hash.py
作用:將空格替換爲#號,並添加一個隨機字符串和換行符。
space2mssqlblank.py(mssql)
作用:將空格替換爲其他空符號
space2mssqlhash.py
作用:將空格替換爲#號,並添加一個換行符。
between.py
作用:用NOT BETWEEN 0 AND 替換大於號(>),用BETWEEN AND 替換等於號(=)
percentage.py
作用:ASP允許在每個字符前面加上一個%。
sp_password.py
作用:從DBMS日誌的自動模糊處理的有效載荷中追加sp_password。
charencode.py
作用:對給定的payload全部字符使用URL編碼(不處理已編碼的字符)。
randomcase.py
作用:隨機大小寫。
charunicodeencode.py
作用:字符串Unicode編碼。
space2comment.py
作用:將空格替換爲/**/。
equaltolike.py
作用:將等號替換爲like。
greatest.py
作用:繞過對“>”的過濾,用GREATEST替換大於號。測試通過的數據庫有MySQL4、MySQL5.0、MySQL5.5、Oracle 10g、PostgreSQL 8.3、PostgreSQL8.4、PostgreSQL 9.0。
ifnull2ifisnull.py
作用:繞過對IFNULL的過濾,替換類似IFNULL(A,B)爲IF(ISNULL(A),B,A)。測試通過的數據庫類型版本有MySQL5.0、MySQL5.5。
modsecurityversioned.py
作用:過濾空格,使用MySQL內聯註釋方式注入。測試MySQL5.0可行。
space2mysqlblank.py
作用:將空格替換爲其他空白符號(MySQL5.1測試通過)
modsecurityzeroversioned.py
作用:使用MySQL內聯注入方式(/! 00000/)進行注入。(mysql5.0測試通過)
space2mysqldash.py
作用:將空格替換爲–,並添加一個換行符。
bluecoat.py
作用:在SQL語句之後用有效的隨機空白符替換空格符,隨後用like替換等於號。
通過測試的數據路和版本爲MySQL5.1和SGOS。
versionedkeywords.py
作用:註釋繞過
halfversionedmorekeywords.py
作用:當數據庫爲Mysql時繞過防火牆,在每個關鍵字前面添加MySQL版本註釋。測試通過的數據庫類型和版本有MySQL4.0.18和MySQL5.0.22。
space2morehash.py
作用:將空格替換爲#號,並添加一個隨機字符串和換行符。測試通過的數據庫和版本有MySQL5.1.41。
apostrophenullencode.py
作用:在有效負荷的結束位置加載零字節字符編碼。
chardoubleencode.py
作用:對給定的payload全部字符使用雙重URL編碼(不處理已經編碼的字符)。
unmagicquotes.py
作用:用一個多字組合(%bf%27)和末尾通用註釋一起替換空格。
randomcomments.py
作用:用/**/分割SQL關鍵字。
最好掌握tamper插件的編寫規則,這樣在應對各種實戰環境時候才能更加自如。
3.2burpsuite
3.2.1安裝
略
3.2.2入門
1.Proxy
Proxy是利用burp開展測試流程的核心,通過代理模式,可以讓我們攔截、查看、修改所有在客戶端和服務器之間傳遞數據。
攔截功能主要由intercept選項卡中的forword、drop、interception is on/off和action構成。
- Forword表示將攔截的數據包或修改後的數據包發送至服務端。
- Drop表示丟棄當前攔截的數據包
- interception is on表示開啓攔截功能,interception is off表示關閉攔截功能。
- 單擊Action按鈕,可以進一步發送數據包到其他組件做進一步測試。
burp有四種消息類型顯示數據包:
- raw主要顯示web請求的raw格式,以純文本的形式顯示數據包,包含求情地址、HTTP協議版本、主機頭、瀏覽信息、accept可接受的內容類型、字符集、編碼方式、cookie等,可以手動修改這些參數來完成對服務器的滲透測試。
- Parmas主要顯示客戶端請求的參數信息。
- headers中顯示的是數據包中的頭信息,以鍵值對的方式顯示。
- hex對應的raw中信息的二進制內容,可以使用hex編輯器對請求內容進行修改,再進行00截斷的時候非常好用。
2.spider
spider爬蟲可以幫我們更加了解系統結構,其中spider爬取到的內容將在target中展示。
3.decoder
對原始數據進行各種編碼格式和散列的轉換。
3.2.3進階
1.Scanner
用於自動檢測Web系統的各種漏洞。
主動掃描:burp會嚮應用發送新的請求並通過payload驗證漏洞。會產生大量的請求和應答數據,直接影響服務器性能,不適合在生產環境使用。主要使用以下兩類漏洞。
- 客戶端漏洞,如XSS、HTTP頭部注入、操作重定向。
- 服務端漏洞,如SQL注入、命令行注入、文件遍歷。
被動掃描:burp不會重新發送新的求情,只是對已存在的請求和應答進行分析,對於服務器端來講,比較安全,適合用於生產環境的檢測。一般來說,下列漏洞在被動模式下容易被檢測出來:
- 提交的密碼爲明文。
- 不安全的cookie屬性,例如缺少HTTPonly和安全標誌。
- cookie的範圍缺失。
- 跨域腳本包含和站點引用泄露。
- 表單值自動填充,尤其是密碼。
- SSL保護的內容緩存。
- 目錄列表。
- 提交密碼後應答延遲。
- session令牌不安全傳輸。
- 敏感信息泄露,例如內部IP地址、電子郵件地址、堆棧跟蹤等信息泄露。
- 不安全的ViewState的配置。
- 錯誤或不規範的Content-Type指令。
2.intruder
intruder是一個高度可配置的工具,可以對Web應用程序進行自動化攻擊,如通過標識符枚舉用戶名、ID和賬戶號碼,模糊測試,SQL注入,跨站,目錄遍歷等。
原理:在原有請求的基礎上,通過修改各種請求參數獲取不同的請求應答。
常用場景:
- 標識符枚舉。如用戶名、文件ID和密碼等。
- 提取有用的數據。在某些場景下,不是簡單地識別有效標識符,而是通過簡單標識符提取其他數據。例如,通過通過個人的用戶空間ID獲取所有用戶在個人空間的名字和年齡。
- 模糊測試。
攻擊模式
- Sniper 使用單一的payload組,對每個位置參數都進行一次放置。請求數爲位置數和payload數量的乘積。
- Battering ram 使用單一的payload組,一次性對所有位置都放置相同的payload,適合相同參數值放置在多個位置的場景。請求數量爲payload的個數。
- Pitchfork 使用多個payload組,每個位置對應一個組,一次遍歷各個組中的payload給對應位置。請求數量爲payload數量最少的那個組的payload數量。
- Cluster bomb 使用多個payload組,笛卡爾積形式進行參數位置放置。請求數量爲所有payload組payload數量的乘積。
3.Repeater
手動修改、補發個別HTTP請求,並分析其響應的工具。通常和其他工具結合起來使用。
Repeater分析選項有四種消息類型:
- raw主要顯示web請求的raw格式,以純文本的形式顯示數據包,包含求情地址、HTTP協議版本、主機頭、瀏覽信息、accept可接受的內容類型、字符集、編碼方式、cookie等,可以手動修改這些參數來完成對服務器的滲透測試。
- Parmas主要顯示客戶端請求的參數信息。
- headers中顯示的是數據包中的頭信息,以鍵值對的方式顯示。
- hex對應的raw中信息的二進制內容,可以使用hex編輯器對請求內容進行修改,再進行00截斷的時候非常好用。
4.Comparer
提供可視化的差異對比功能,來對比分析兩次數據之間的區別。使用場景有:
- 枚舉用戶名的過程中,對比分析登陸成功和失敗時,服務器反饋結果的區別。
- 使用intruder進行攻擊,對不同的服務端響應,可以很快分析出兩次響應的區別。
- 進行SQL注入的盲注的測試時,比較兩次響應消息的差異,判斷響應結果與注入條件的關聯關係。
數據加載的常用方式:
- 從其他burp工具通過上下文菜單轉發過來。
- 直接粘貼。
- 從文件中加載。
5.Sequencer
用於分析樣本隨機性質量的工具。可以用它測試應用程序的會話令牌(Sesion token)、密碼重置令牌是否可預測等場景。通過數據樣本分析,可以很好的降低關鍵數據被僞造的風險。
3.3nmap
被設計用來快熟掃描大型網絡,包括主機探測與發現、開放的端口情況、操作系統與應用服務指紋識別、WAF識別及常見安全漏洞。圖形化界面爲Zenmap,分佈式框架爲Dnmap。
nmap特點如下所示:
- 主機探測:探測網絡上的主機,如列出響應TCP和ICMP請求、ICMP請求、開放特別端口的主機。
- 端口掃描:探測目標主機所開放的端口。
- 版本探測:探測目標主機的網絡服務,判斷其服務名稱及端口號。
- 系統探測:探測目標主機的操作系統及網絡設備的硬件屬性。
- 支持探測腳本的編寫:使用nmap腳本引擎(NSE)和Lua編程語言。
3.3.1安裝
略
3.3.2入門
1.參數
例如:blah.highon.coffee, namp.org/24, 192.168.0.1;10.0.0-25.1-254
- -iL filename 從文件中讀取待檢測的目標,文件中的表示方法支持機名,ip,網段
- -iR hostnum 隨機選取,進行掃描.如果-iR指定爲0,則是無休止的掃描
- –exclude host1[, host2] 從掃描任務中需要排除的主機
- –exculdefile exclude_file 排除文件中的IP,格式和-iL指定掃描文件的格式相同
主機發現
- -sL 僅僅是顯示,掃描的IP數目,不會進行任何掃描
- -sn ping掃描,即主機發現
- -Pn 不檢測主機存活
- -PS/PA/PU/PY[portlist] TCP SYN Ping/TCP ACK Ping/UDP Ping發現
- -PE/PP/PM 使用ICMP echo, timestamp and netmask 請求包發現主機
- -PO[prococol list] 使用IP協議包探測對方主機是否開啓
- -n/-R 不對IP進行域名反向解析/爲所有的IP都進行域名的反響解析
掃描技巧
- -sS/sT/sA/sW/sM TCP SYN/TCP connect()/ACK/TCP窗口掃描/TCP Maimon掃描
- -sU UDP掃描
- -sN/sF/sX TCP Null,FIN,and Xmas掃描
- –scanflags 自定義TCP包中的flags
- -sI zombie host[:probeport] Idlescan
- -sY/sZ SCTP INIT/COOKIE-ECHO 掃描
- -sO 使用IP protocol 掃描確定目標機支持的協議類型
- -b “FTP relay host” 使用FTP bounce scan
指定端口和掃描順序
- -p 特定的端口 -p80,443 或者 -p1-65535
- -p U:PORT 掃描udp的某個端口, -p U:53
- -F 快速掃描模式,比默認的掃描端口還少
- -r 不隨機掃描端口,默認是隨機掃描的
- –top-ports “number” 掃描開放概率最高的number個端口,出現的概率需要參考nmap-services文件,ubuntu中該文件位於/usr/share/nmap.nmap默認掃前1000個
- –port-ratio “ratio” 掃描指定頻率以上的端口
服務版本識別
- -sV 開放版本探測,可以直接使用-A同時打開操作系統探測和版本探測
- –version-intensity “level” 設置版本掃描強度,強度水平說明了應該使用哪些探測報文。數值越高,服務越有可能被正確識別。默認是7
- –version-light 打開輕量級模式,爲–version-intensity 2的別名
- –version-all 嘗試所有探測,爲–version-intensity 9的別名
- –version-trace 顯示出詳細的版本偵測過程信息
腳本掃描
- -sC 根據端口識別的服務,調用默認腳本
- –script=”Lua scripts” 調用的腳本名
- –script-args=n1=v1,[n2=v2] 調用的腳本傳遞的參數
- –script-args-file=filename 使用文本傳遞參數
- –script-trace 顯示所有發送和接收到的數據
- –script-updatedb 更新腳本的數據庫
- –script-help=”Lua script” 顯示指定腳本的幫助
OS識別
- -O 啓用操作系統檢測,-A來同時啓用操作系統檢測和版本檢測
- –osscan-limit 針對指定的目標進行操作系統檢測(至少需確知該主機分別有一個open和closed的端口)
- –osscan-guess 推測操作系統檢測結果,當Nmap無法確定所檢測的操作系統時,會盡可能地提供最相近的匹配,Nmap默認進行這種匹配
防火牆/IDS躲避和哄騙
- -f; --mtu value 指定使用分片、指定數據包的MTU.
- -D decoy1,decoy2,ME 使用誘餌隱蔽掃描
- -S IP-ADDRESS 源地址欺騙
- -e interface 使用指定的接口
- -g/ --source-port PROTNUM 使用指定源端口
- –proxies url1,[url2],… 使用HTTP或者SOCKS4的代理
- –data-length NUM 填充隨機數據讓數據包長度達到NUM
- –ip-options OPTIONS 使用指定的IP選項來發送數據包
- –ttl VALUE 設置IP time-to-live域
- –spoof-mac ADDR/PREFIX/VEBDOR MAC地址僞裝
- –badsum 使用錯誤的checksum來發送數據包
Nmap 輸出
- -oN 將標準輸出直接寫入指定的文件
- -oX 輸出xml文件
- -oS 將所有的輸出都改爲大寫
- -oG 輸出便於通過bash或者perl處理的格式,非xml
- -oA BASENAME 可將掃描結果以標準格式、XML格式和Grep格式一次性輸出
- -v 提高輸出信息的詳細度
- -d level 設置debug級別,最高是9
- –reason 顯示端口處於帶確認狀態的原因
- –open 只輸出端口狀態爲open的端口
- –packet-trace 顯示所有發送或者接收到的數據包
- –iflist 顯示路由信息和接口,便於調試
- –log-errors 把日誌等級爲errors/warings的日誌輸出
- –append-output 追加到指定的文件
- –resume FILENAME 恢復已停止的掃描
- –stylesheet PATH/URL 設置XSL樣式表,轉換XML輸出
- –webxml 從namp.org得到XML的樣式
- –no-sytlesheet 忽略XML聲明的XSL樣式表
時間性能優化
- -T 時間優化(0-5)(paranoid|sneaky|polite|normal|aggressive|insane)
- -F 快速掃描。
- –max-retries 調整重傳次數。
- –min-hostgroup/–max-hostgroup size 設置組的大小
- –min-parallelism/–max-parellelism time 指定時間內的探針數
- –min-rtt-timrout/–max-rtt-timrout/initial-rtt-timrouttime 指定探針超時
- –scan-delay/-max-scan-delay time 指定探針之間的時延
- –max-retries tries 指定探針重傳轉發數
- –host-timeout time 設置掃描主機的最大時間
- –defeat-rst-ratelimit 設置rst的限制
其他nmap選項
- -6 開啓IPv6
- -A OS識別,版本探測,腳本掃描和traceroute
- –datedir DIRNAME 說明用戶Nmap數據文件位置
- –send-eth / --send-ip 使用原以太網幀發送/在原IP層發送
- –privileged 假定用戶具有全部權限
- –unprovoleged 假定用戶不具有全部權限,創建原始套接字需要root權限
- -V 打印版本信息
- -h 輸出幫助
2.常用方法
掃描單個地址
nmap ip
掃描多個目標地址
nmap ip1 ip2
掃描一個網段
nmap ip1-ip2
掃描某個地址的網段
nmap ip/24
掃描主機列表targets.txt中的所有目標地址
nmap -iL targets.txt
掃描某一個目標地址之外的其他目標地址
nmap ip1/24 -exclude ip2
掃描除了某一文件中目標地址之外的目標地址
nmap ip1/24 -excludefile targets.txt
掃描某一目標地址的21、22、23、80端口
nmap -p 21,22,23,80 ip
對目標地址進行路由跟蹤
nmap --traceroute ip
掃描目標地址所在C段的在線情況
nmap -sP ip/24
目標地址操作系統的指紋識別
nmap -O ip
目標地址提供的服務版本檢測
nmap -sV ip
探測防火牆狀態
nmap -sF -T4 ip
3.狀態識別
nmap輸出爲掃描列表,包括端口號、端口狀態、服務名稱、服務版本及協議。
通常狀態有六種:
狀態 | 含義 |
---|---|
open | 開放,表示應用程序正在監聽該端口的鏈接,外部可以訪問 |
filtered | 被過濾,表示端口被防火牆或其他設備阻攔,無法訪問 |
closed | 關閉,表示端口未開啓 |
unfiltered | 未被過濾,表示nmap無法確定端口所處的狀態 |
open/filtered | 開放或被過濾,nmap不能識別 |
closed/filtered | 關閉或被過濾,nmap無法識別 |
3.3.3進階
nmap的腳本默認存放在…/nmap/scripts/下面。
nmap的腳本的分類
auth: 負責處理鑑權證書(繞開鑑權)的腳本
broadcast: 在局域網內探查更多服務開啓狀況,如dhcp/dns/sqlserver等服務
brute: 提供暴力破解方式,針對常見的應用如http/snmp等
default: 使用-sC或-A選項掃描時候默認的腳本,提供基本腳本掃描能力
discovery: 對網絡進行更多的信息,如SMB枚舉、SNMP查詢等
dos: 用於進行拒絕服務攻擊
exploit: 利用已知的漏洞入侵系統
external: 利用第三方的數據庫或資源,例如進行whois解析
fuzzer: 模糊測試的腳本,發送異常的包到目標機,探測出潛在漏洞
intrusive:入侵性的腳本,此類腳本可能引發對方的IDS/IPS的記錄或屏蔽
malware: 探測目標機是否感染了病毒、開啓了後門等信息
safe: 此類與intrusive相反,屬於安全性腳本
version: 負責增強服務與版本掃描(Version Detection)功能的腳本
腳本參數
--script=defualt:使用默認的腳本進行掃描
--script=<Lua scripts>:使用某個腳本進行掃描
--script-args=key1=value1,key2=value2:爲腳本傳遞參數
--script-args-file=filename:使用文件向腳本傳遞參數
--script-trace:顯示腳本執行過程中發送和接收的數據
--script-updatedb:更新腳本庫數據‘’
--script-help:顯示對應腳本幫助信息
案例
1.鑑權掃描
使用–script=auth可以對目標主機或目標主機所在網段進行應用弱口令。
nmap --script=auth ip
2.暴力破解
可對數據庫、SMB、SNMP進行簡單的密碼暴力猜解
nmap --script=brute ip
3.掃描常見漏洞
可檢測目標主機或網段是否存在常見漏洞
nmap --script=vuln ip
4.應用服務掃描
nmap具備很多常見應用服務的腳本,如VNC、MySQL、telnet、rsync等
nmap --script=realvnc-auth-bypass ip
5.探測局域網內更多服務開啓的情況
nmap -n -p 445 --script=broadcast ip
6.whois解析
nmap -script external 域名
第四章 Web安全原理
4.1SQL注入基礎
4.1.1SQL注入的原理
Web應用程序對用戶輸入的數據合法性沒有判斷,前端傳入後端的參數是攻擊可控的,並且參數帶入數據庫查詢,攻擊者可以構造不同的SQL語句來實現對數據庫的任意操作。
SQL注入漏洞產生的條件
- 參數用戶可控:前端傳給後端的參數時攻擊者可以控制的
- 參數帶入數據庫查詢:傳入的參數拼接到SQL語句,並且帶入數據庫查詢。
當傳入ID參數爲1’時:
select * from users where id = 1'
這不符合數據庫語法規範,會報錯。當傳入參數爲 1 and 1=1 時,執行的SQL語句如下圖所示:
select * from users where id = 1 and 1=1
因爲1=1爲真,且where語句中 id=1 也爲真,所以頁面會返回與 id=1 相同的結果。當傳入的id參數爲 1 and 1=2時,由於1=2不成立,所以返回假,頁面就會返回與 id=1 不同的結果。
由此可初步判斷SQL注入漏洞的存在。
4.1.2與MySQL注入相關的注入點
MySQL默認在數據庫中存放有一個“information_schema”數據庫。我們需記住其中的三個表:SCHEMATA、TABLES、COLUMNS
。
SCHEMATA存儲該用戶創建的所有數據庫的庫名,需記住裏面記錄數據庫庫名的字段名爲:SCHEMA_NAME
。
TABLES存儲用戶創建的所有數據庫的庫名和表名,需記住TABLE_SCHEMA
和TABLE_NAME
這兩個字段。
COLUMNS存儲該用戶創建的所有數據庫的庫名、表名和字段名,須記住TABLE_SCHEMA、TABLE_NAME、COLUMN_NAME
。
常用的MySQL查詢和函數
1.MySQL查詢語句
不知道條件
SELECT 想要查詢字段名 FROM 數據庫名.表名
知道一個條件
SELECT 想要查詢字段名 FROM 數據庫名.表名 WHERE 已知條件字段名='已知條件的值'
知道兩個條件
SELECT 想要查詢字段名 FROM 數據庫名.表名 WHERE 已知條件字段名='已知條件的值'
2.limit的用法
limit的使用格式是limit m,n
,表示選取從m
位置開始取n
個元素。m
從0
開始。
3.需記住的幾個函數
datebase():當前網站使用的數據庫
version():當前MySQL版本
user():當前MySQL的用戶
4.註釋符
MySQL中,常見註釋符的表達方式:#或–空格或/**/。
5.內聯註釋
內聯註釋的形式:/! code/。內聯註釋可以用於整個SQL語句中,用來執行我們的SQL語句。
index.php?id=-15/*! UNION*//*! SELECT*/1,2,3
4.1.3Union注入攻擊
以DVWASQL注入來演示:
當輸入爲1
時顯示如圖所示:
然後輸入爲1’時,報出如下錯誤:
由報錯信息可判斷出該處參數值爲單引號字符型。
然後輸入1' and '1'='1
,結果顯示和輸入1
時相同:
再輸入1' and '1'='2
,結果未正常顯示:
由此可判斷此處可能存在注入,嘗試判斷該表的字段數量:
①輸入1’ order by 2#,結果可正常顯示