命令执行漏洞原理及在windows和linux中的利用方法还有自动化漏洞工具的简单了解
前言:此次学习命令执行漏洞,记录一下。
命令执行漏洞原理
定义:Web应用程序接收用户输入,拼接到要执行的系统命令中执行
产生原因:
1.用户输入未过滤或净化
过滤:用户输入某个关键字时,命令不能执行,则是被过滤掉了。
净化:用户输入一些敏感内容时,这些内容会被消除掉,但是命令会继续执行。
2.拼接到系统命令中执行。
和SQL注入漏洞原理类似(差别还是挺大的,只是这一点比较相似)。
PHP下命令执行函数
在PHP中具有执行系统命令功能的函数如下(部分):
1.system
2.exec
3.shell_exec
4.passthru
5.popen
6.proc_popen
某些情况下,要注意存在以上函数的php文件,有可能是webshell
漏洞演示:
栗子:
<?php
echo "please input get args cmd!";
echo "<pre>"; //格式化页面
if(isset($_GET["cmd"])){
system($_GET["cmd"]);
}
echo "</pre>"; //是页面更加直观,起换行作用。去掉的话,显示信息不会换行。下面做对比。
?>
windows使用phpstudy集成环境,在网站根目录下建立一个cmd1.php
(自定义)。复制上面的代码,保存。访问cmd1.php
,可以看到下面的页面。
输入命令:?cmd=ipconfig
可以执行。
现在修改一下代码,看看<pre>
的作用是什么
刷新查看。
可以看到比较乱。
查看源码:
所以可以看出来<pre>
的作用了。
在URL前面加个view-source:也可以的。
windows系统命令执行漏洞
命令执行示例代码分析
使用以下PHP代码,对指定目标执行ping命令
<?php
echo "<pre>"; //格式化输出
$arg = $_GET['cmd']; //GET方式执行命令
if($arg){
system("ping $arg");
}
echo "</pre>";
?>
命令执行漏洞利用思路
代码中拼接用户的输入并代码system函数执行,但是无法直接执行用户的自定义命令。
思路:截断输入,重新拼接。两条命令都输入并执行。
windows系统下命令执行漏洞拼接符介绍
在windows系统下的cmd命令中,有以下一些截断拼接符。
& 前面的语句为假则直接执行后面的
&& 前面的语句为假则直接出错,后面的也不执行
| 直接执行后面的语句
|| 前面执行出错执行后面的语句
栗子:
打开cmd
ping www.baidu.com
ping 111 & ipconfig
ping 127.0.0.1 && ipconfig
ping 127.0.0.1 | ipconfig
ping 111 || ipconfig
还有几个命令就不放图了,可以尝试一下。
Linux系统命令执行漏洞
<?php
echo "<pre>";
$arg = $_GET['cmd'];
if($arg){
system("ping -c 4 $arg"); //ping 4次
}
echo "</pre>";
?>
-c 4 就是ping4次,windows默认执行4次,而linux默认执行无数次。
kali linux
测试环境搭建
1.启动apache服务,service apache2 start
2.拷贝代码到 /var/www/html/目录下的一个文件中。
使用vim命令进行编辑。
编辑完成输入:wq!
保存并退出。
输入ifconfig查看IP地址。
linux系统命令执行漏洞拼接符介绍
在linux系统下的shell命令下,有以下一些截断拼接符
; (英文输入)前面的执行完,执行后面的。
| 是管道符,显示后面的执行结果。
|| 当前面的执行出错时执行后面的。
& 无论前面语句真假都会执行。
&& 只有前面的语句为真,才会执行后边的语句。
在kali中实验,与windows系统中步骤无太大差别。
仍然可以。
自动化工具介绍
commix
Commix是一个使用python开发的漏洞测试工具,这个工具是为了方便的检测一个请求是否存在命令注入漏洞,并对其进行测试,在其作者发布的最新版本中支持直接导入burp的历史记录进行检测,大大提高了易用性。
项目地址: github项目传送门
安装不介绍。kali自带有。也可以使用git命令克隆到windows系统,需要python环境。
中途出了点毛病,kali里的好久没更新了,回头更新一下再用。windows系统上的commix使用方法与linux系统有点不同,可网上找博客进行学习。