@1kbfree
2019-07-22T21:09:36.000000Z
字数 1600
阅读 1313
基础
<?php
//判断字符串包含函数
function checkstr($str,$find){
$needle = $find;
$tmparray = explode($needle,$str);
if(count($tmparray)>1){
return true;
} else{
return false;
}
}
if(isset($_REQUEST['submit']) && $_REQUEST['ip']===''){
echo '<pre>请输入IP或者域名</pre>';
}else{
$target=filter_var($_REQUEST['ip'],FILTER_SANITIZE_SPECIAL_CHARS);//用filter进行编码
if(checkstr($target,".") && !checkstr($target,"|") && !checkstr($target,"&") && !checkstr($target," ")){
if(stristr(php_uname('s'),'Windows NT')){
$cmd=shell_exec('ping '.$target);
echo '<pre>'.$cmd.'</pre>';
}else{
$cmd=shell_exec('ping -c 3'.$target);
echo '<pre>'.$cmd.'</pre>';
}
}else{
echo '<pre>请勿提交非法字符</pre>';
}
}
?>
什么是命令执行漏洞
代码调用系统命令的时候,过滤没做好,从而导致攻击者可以使用命令来干一些xxxx的事情。
那DVWA来演示一下
这是DVWA演练平台的在线地址:http://43.247.91.228:81
我们可以看到,在这里';'的用法就是先执行他前面的命令,直到前面命令执行完(无论对与错)就立即执行后面的命令
我们输入错误看看:
上一条命令的输出,作为下一条命令参数
我们可以看到这里就是说只有前面的命令成功执行,才能执行后面的命令。
开始命令执行漏洞演示:
首先我们把等级设置为LOW,来看看:
这里呢就是输入IP,会把PING出来的内容打印出来
我们打开DVWA自带的源代码查看:
首先我们来看看在WINDOW操作系统下执行ping命令会有啥结果:
(可以看到这里只ping了4次)
我们再来看看LINUX里的ping命令有啥结果:
(可以看到,他会无限的PING下去)
而判断操作系统就是为了,如果是linux环境的话就会执行ping -c 4 www.baidu.com
,这样就会像WINDOW一样,只执行4次:
我们现在DVWA的命令执行漏洞处输入一下www.baidu.com:
那么我们是否可以试一下,上面所讲的特殊字符功能,我们来试一下,我输入了www.baidu.com;ls:
(那么可以看见,这里是存在命令执行漏洞的,很多人就会问了,这个漏洞有啥用,其实呢,当你有修改文件的权限,并且知道网站首页的路径,你就可以更改首页内容。)
我来演示一下(只是本地演示):
我们将等级改为中:
我们输入一下www.baidu.com;ls:
(啥都没返回)
我们来看看源代码:
(如果还不明白啥是转换成空,我来举个例子,看下图)
我输入了www.&&baidu.com:
(这里因为将&&转换成空,所以www.&&baidu.com等于是www.baidu.com)
但是,这没有过滤'|',我们还是可以输入www.baidu.com|ls:
(成功执行~~)
我们将等级这是为HIGH:
这里的DVWA只有三个等级,所以高等级也就相当于不可能完成等级
我们来照常看看源代码:
(看不懂,但是我知道这里只能输入数字,并且是1.1.1.1的格式)
就连输入www.baidu.com都不可以了:
(这防御措施做得,有点...内个了~)