跟bWAPP学WEB安全(PHP代码)--OS命令注入

时间:2023-03-09 07:12:37
跟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的标准过滤掉|,再来尝试注入。

可以尝试``我们来试试

跟bWAPP学WEB安全(PHP代码)--OS命令注入

跟bWAPP学WEB安全(PHP代码)--OS命令注入

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

跟bWAPP学WEB安全(PHP代码)--OS命令注入

参考文献


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