Python2 input函式漏洞利用

cha0s32發表於2024-06-05

在 Python2 中,input 函式相當於

eval(raw_input(prompt))

如果輸入的資料是一個惡意的表示式,存在任意程式碼執行的風險

例項演示

  • 字串拼接

image-20240605115652670

  • 命令執行
__import__('os').system('cat /etc/passwd')
image-20240605120157892

靶場利用

在 vulnhub bottleneck 靶機中,遇到 input 漏洞利用的情況

# 核心程式碼

foreach($blacklist as $elem){
    if(strstr($imagefile, $elem) !== FALSE)
        $isblocked = TRUE;
}
// report the intrusion to the soc and save information locally for further investigation
if($isblocked){
    $logfile = 'intrusion_'.$timestamp;
    $fp = fopen('/var/log/soc/'.$logfile, 'w');
    fwrite($fp, "'".$imagefile."'");
    fclose($fp);
    exec('python /opt/ids_strong_bvb.py </var/log/soc/'.$logfile.' >/tmp/output 2>&1');
    print_troll();
    exit();
}

程式碼的意思是引數輸入要是包含黑名單的字串中,則將輸入輸出到日誌檔案中

我們不知道 ids_strong_bvb.py 的內容是什麼,但靶機中存在檔案包含漏洞可讀取 /tmp/output 的內容

由於靶機中還存在定時清空 /tmp/output 的程式, 所以還需要先 讀一個包含黑名單字串的路徑,在立刻讀取 output 檔案,方可讀取

如圖所示,先讀取這兩個路徑

image-20240605121442701

輸出為:

image-20240605121457819

/etc 後加單引號使 程式報錯

image-20240605121611763

知道程式中包含 input 引數,經由上面輸出推測得,使用者輸入由input函式處理

由報錯可以知道閉合規則,將payload放到 /etc' and payload and '中即可

image-20240605121852275

輸出:

image-20240605121924908

更改system裡面的命令,可造成任意命令執行,直接getshell,進行下一步提權。

相關文章