跟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 commands execution/Intruder/command_exec.txt
https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Remote commands execution/Intruder/command-execution-unix.txt

原文地址:https://www.cnblogs.com/KevinGeorge/p/10212667.html