进来的页面什么也没有,信息搜集一波
发现git文件泄露
访问/.git/index,得到一个文件
直接打开文件是一堆乱码
使用工具GitHack:https://www.jianshu.com/p/b49131a3d384
工具下载:GitHub - lijiejie/GitHack: A `.git` folder disclosure exploit
用法
python GitHack.py http://8e7e2ab2-b6d3-4e4b-a111-224d78c3bf11.node4.buuoj.cn:81/.git/
在工具同目录的文件夹中生成
得到
<?php
include "flag.php";
echo "flag在哪里呢?<br>";
if(isset($_GET['exp'])){
if (!preg_match('/data:\/\/|filter:\/\/|php:\/\/|phar:\/\//i', $_GET['exp'])) {
if(';' === preg_replace('/[a-z,_]+\((?R)?\)/', NULL, $_GET['exp'])) {
if (!preg_match('/et|na|info|dec|bin|hex|oct|pi|log/i', $_GET['exp'])) {
// echo $_GET['exp'];
@eval($_GET['exp']);
}
else{
die("还差一点哦!");
}
}
else{
die("再好好想想!");
}
}
else{
die("还想读flag,臭弟弟!");
}
}
// highlight_file(__FILE__);
?>
第一个和第三个if就是正则,对于一些关键词的过滤
第二个if
(?R)是引用当前表达式,(?R)? 这里多一个?表示可以有引用,也可以没有。,引用一次正则则变成了[a-z,_]+[a−z,]+\((?R)?\),可以迭代下去,那么它所匹配的就是print(echo(1))、a(b(c()));类似这种可以括号和字符组成的,这其实是无参数RCE比较典型的例子
无参RCE能百度到很多,这里只写利用session的payload