命令执行漏洞
1. 漏洞原理
用户输入的数据未被过滤,被拼接到原本要执行的系统命令中执行并返回结果
2. 利用条件
1.用户输入的数据未被过滤或净化
过滤:输入的数据存在某些敏感关键字时不执行该条命令
净化:输入的数据存在某些敏感关键字时消除该敏感内容再继续执行命令
2.Web应用程序调用了能执行系统命令的函数
PHP命令执行函数
system()
passthru()
exec()
shell_exec()
popen()
proc_popen()
3. 漏洞复现-直接复现
利用system()命令执行函数执行ipconfig系统命令
3.1 简单漏洞代码
<?php
// 在浏览器页面 以原有格式输出 在目标机的终端中执行的结果
echo"<pre>";
// 是否设置了以GET方式提交的cmd参数值
if(isset($_GET["cmd"])){
// 将提交的cmd参数值拼接到system()函数中执行
system($_GET["cmd"]);}echo"</pre>";
?>
3.2 GET复现
3.3 POST复现
在漏洞代码中修改方法为POST后进行复现
4. 漏洞复现-利用拼接符复现
无法直接执行输入的命令时可以在传参位置利用拼接符执行
&:前句为假执行后句。 前句为真则两句都执行。
&&:前句为假直接出错,不执行后句。 前句为真则两句都执行。
|:直接执行后句。
||:前句为假执行后句。 前句为真只执行前句。
Linux比Windows多一个;表示执行完前句后执行后句
4.1 简单漏洞代码
# 该代码用于对指定目标执行ping命令,但未严格过滤用户的输入# ping -n 3 --> Windows执行3次ping命令,Windows默认执行4次# ping -c 3 --> Linux执行3次ping命令,Linux默认执行无限次<?php
echo"<pre>";
// 使用变量arg保存以GET方式提交的cmd参数值
$arg=$_GET['cmd'];
// 变量arg是否为空即是否以GET方式向其提交了cmd参数值
if($arg){
system("ping $arg");}echo"</pre>";
?>
4.2 Windows
4.3 Kali Linux
简单环境搭建
service apache2 start
vim /var/www/html/mlzx.php
<?php
echo"<pre>";
// 使用变量arg保存以GET方式提交的cmd参数值
$arg=$_GET['cmd'];
// 变量arg是否为空即是否以GET方式向其提交了cmd参数值
if($arg){
system("ping -c 3 $arg");}echo"</pre>";
?>
复现
5. 漏洞危害
1.继承Web服务器程序的权限去执行操作系统的命令
2.任意文件读取,导致敏感信息泄露 --> cat /etc/passwd
3.任意文件写入,写入一句话木马连接蚁剑 --> echo “文件内容” > “写入路径”
6. 漏洞修复
1.尽量不要使用命令执行函数 --> 在php.ini的disable_functions中添加要禁用的函数
2.在进入命令执行函数前严格过滤用户输入的数据,如&、&&、|、||、;等符号与cat、echo等关键字
7. commix工具
commix是使用Python开发的漏洞测试工具,用于检测一个请求是否存在命令执行漏洞,能建立shell连接。
commix的shell是通过页面(Web应用程序)传递参数(命令)执行的,其执行结果会返回到commix终端。
commix -h --> 帮助信息
工具地址:https://github.com/stasinopoulos/commix
commix -u “有传参的URL”
版权归原作者 Zamasu777 所有, 如有侵权,请联系我们删除。