1. 程式人生 > >跟bWAPP學WEB安全(PHP程式碼)--OS命令注入

跟bWAPP學WEB安全(PHP程式碼)--OS命令注入

背景


這是溫故知新的一個系列,也是重新拾起WEB安全的一個系列,同時希望能稍微有點對初學者的幫助。第一篇先來講講OS命令注入
bWAPP裡面有兩個頁面也就是兩個漏洞,來驗證OS命令注入。一個是有回顯的,一個是沒有的,其實本質都是一樣,沒有回顯的,可以利用類似ceye平臺來驗證dns請求或者http請求,自己搭建一個也不難,flask或者Django起一個,除錯模式,看日誌也是OK的。

難度區分


一般來講,bWAPP有三個難度,高中低,一般高的也不是不可以繞過,但是很複雜,不在這個系列裡面去溫故知新或者去記錄了,但是有些會給出連結,供參考。

正文


前兩個作為開篇前言,後面的系列就不會再寫了,下面開始正文。

程式碼分析


先上程式碼:

  <?php

    if(isset($_POST["target"]))
    {

        $target = $_POST["target"];

        if($target == "")
        {

            echo "<font color=\"red\">Enter a domain name...</font>";

        }

        else
        {

            echo "<p align=\"left\">" . shell_exec("nslookup  " . commandi($target)) . "</p>";

        }

    }

    ?>

可以看出問題的關鍵就在這裡shell_exec,高危函式,類似的還有很多,可以參考我的部落格WEB安全第一篇--對伺服器的致命一擊:程式碼與命令注入

追蹤程式碼,再來看看

function commandi($data)
{

    switch($_COOKIE["security_level"])
    {

        case "0" :

            $data = no_check($data);
            break;

        case "1" :

            $data = commandi_check_1($data);
            break;

        case "2" :

            $data = commandi_check_2($data);
            break;

        default :

            $data = no_check($data);
            break;

    }

    return $data;

}

可以看出難度不同,檢查不同,難度低沒有檢查,難度中等,使用commandi_check_1函式進行檢查,難度高等使用commandi_check_2函式進行檢查。具體來看看這兩個檢查函式

function commandi_check_1($data)
{
    
    $input = str_replace("&", "", $data);
    $input = str_replace(";", "", $input);
    
    return $input;
    
}

function commandi_check_2($data)
{
   
    return escapeshellcmd($data);
    
}

function commandi_check_3($data)
{
    
    $input = str_replace("&", "", $data);
    $input = str_replace(";", "", $input);
    $input = str_replace("|", "", $input);
    
    return $input;
    
}

不檢查的好說,直接 | 拼接在執行的命令就行了,難度高的用來escapeshellcmd函式,標準PHP防禦OS命令執行的函式,繞過方式可以參考Exploit/bypass PHP escapeshellarg/escapeshellcmd functions

我們來說說中等

中等難度


在中等難度中過濾了&和;其實這沒啥用一個|拼接一樣執行,我們按照commandi_check_3的標準過濾掉|,再來嘗試注入。
可以嘗試``我們來試試


Payload:%26%26%60id%20>1.txt%60

參考文獻


https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Remote%20commands%20execution/Intruder/command_exec.txt
https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Remote%20commands%20execution/Intruder/command-execution-unix.txt