[RoarCTF 2019]Easy Java(help.docx)
题解:
打开得到登陆页面,SQL尝试注入无效,看源码
得到信息:href链接和POST传参方式。
打开链接
网上查找资料看wp发现为这个漏洞
我们依据漏洞进行尝试下载WEB-INF/web.xml
<web-app 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>
<url-pattern>/Login</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>DownloadController</servlet-name>
<servlet-class>com.wm.ctf.DownloadController</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>DownloadController</servlet-name>
<url-pattern>/Download</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>FlagController</servlet-name>
<servlet-class>com.wm.ctf.FlagController</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>FlagController</servlet-name>
<url-pattern>/Flag</url-pattern>
</servlet-mapping>
</web-app>
得到以上代码,从中可以看到com.wm.FlagController,试试能不能下载下来
执行后发现可以得到一个文档用txt打开得到一串显著的base64解码密码
解开后得到flag
要点:
本题主要考察对于java漏洞的熟练情况,这里放个关于web常见漏洞的链接:web常见漏洞
抽老婆
打开后得到这个页面,之后查看源码
得到提示,尝试进行下载
回显如上,再尝试绕过
得到以上页面,没有思路查看wp,发现是 python语言的flask框架中的session伪造
在报错中找到这条语句,并在语句首发现位于app/app.py文件
尝试过滤下载的过滤下载此文件
得到一个python脚本,打开发现了getwifi() 和 getflag()函数。
@app.route('/getwifi', methods=['GET'])
def getwifi():
session['isadmin']=False
wifi=random.choice(os.listdir('static/img'))
session['current_wifi']=wifi
return render_template('getwifi.html',wifi=wifi)
@app.route('/secret_path_U_never_know',methods=['GET'])
def getflag():
if session['isadmin']:
return jsonify({"msg":flag})
else:
return jsonify({"msg":"你怎么知道这个路径的?不过还好我有身份验证"})
这里看见还是有一个加密的session,结合之前的wp知道它为flask中的session
flask中的session伪造
看代码只需要让session中的isadmin为真就可,这个用的应该是JWT方式认证,里面签名要用到SECRET_KEY;于是我们将isadmin的值更改后,使用密钥SECRET_KEY重新加密生成一个session。有一个开源脚本可以帮我们自动生成:github—flask-session-cookie-manager下载链接
下载之后,使用脚本进行重新加密就可以得到新的不加密的session。
之后进行bp抓包以新换旧就成功过滤了。