RCE(远程代码执行)
Ping
我们尝试写入一个IP地址,比如127.0.0.1(本机的回环地址)
、
接下来我们尝试和IP进行拼接查询语句,比如whoami,net user ,netstat -an 等等
这样九爆出了用户名,接下来我们看看源代码,以下是主要的一段代码
if(isset($_POST['submit']) && $_POST['ipaddress']!=null){
$ip=$_POST['ipaddress'];
// $check=explode('.', $ip);可以先拆分,然后校验数字以范围,第一位和第四位1-255,中间两位0-255
if(stristr(php_uname('s'), 'windows')){//判断操作系统的是windows还是linux
// var_dump(php_uname('s'));
$result.=shell_exec('ping '.$ip);//直接将变量拼接进来,没做处理
}else {
$result.=shell_exec('ping -c 4 '.$ip);
}
}
主要的问题是他没有对用户的输入进行任何的过滤,才会出现远程代码执行的漏洞
eval
看一下提示说后台执行eval函数,所以我们尝试执行php代码中的phpinfo函数
成功了,在这里小编提醒一下payload是下面这个,记得加分号因为eval里是执行的php代码
,php代码每一行结束都有分号
payload:phpinfo();
不理解php函数的看这个PHP代码审计-CSDN博客
PHP反序列化
让我们填写一个序列化之后的东西
<?php
class S{
var $test = "pikachu";
function __construct(){
echo $this->test;
}
}
//O:1:"S":1:{s:4:"test";s:29:"<script>alert('xss')</script>";}
$html='';
if(isset($_POST['o'])){
$s = $_POST['o'];
if(!@$unser = unserialize($s)){
$html.="<p>大兄弟,来点劲爆点儿的!</p>";
}
else{
$html.="<p>{$unser->test}</p>";
}
}
?>
这里可以直接去反序列化,下面是php构造序列化的代码
<?php
class S{
var $test = "<script>alert('xss')</script>";
}
$a = new S();
$b = serialize($a);
echo $b;
?>
Unsafe Fileupload
client check
看一下提示,可以大概了解到大概是前端的绕过
我们看一下代码,我们可以看到是前端的js代码绕过,所以我们直接禁用js就ok了
<script>
function checkFileExt(filename)
{
var flag = false; //状态
var arr = ["jpg","png","gif"];
//取出上传文件的扩展名
var index = filename.lastIndexOf(".");
var ext = filename.substr(index+1);
//比较
for(var i=0;i<arr.length;i++)
{
if(ext == arr[i])
{
flag = true; //一旦找到合适的,立即退出循环
break;
}
}