0x01 题目介绍
(JWT)昨天,单位流量系统捕获了黑客攻击流量,请您分析流量后进行回答:
附件:jwt.zip
- 该网站使用了JWT认证方式。(如有字母请全部使用小写)
2. 黑客绕过验证使用的jwt中,id和username是10087#admin。(中间使用#号隔开,例如1#admin)
3. 黑客获取webshell之后,权限是root__?
4. 黑客上传的恶意文件文件名是1.c。(请提交带有文件后缀的文件名,例如x.txt)
5. 黑客在服务器上编译的恶意so文件,文件名是looter.so。(请提交带有文件后缀的文件名,例如x.so)
6. 黑客在服务器上修改了一个配置文件,文件的绝对路径为/etc/pam.d/common-auth__。(请确认绝对路径后再提交)
0x02 解题思路
打开对应的数据包goroot.pcap,数据包也不多,我们把整个包都读一遍,先追踪TCP流看下,选下面的箭头看看其他的流,这里发现一个token。
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MTAwODYsIk1hcENsYWltcyI6eyJhdWQiOiJhZG1pbiIsInVzZXJuYW1lIjoiYWRtaW4ifX0.dJArtwXjas3_Cg9a3tr8COXF7DRsuX8UjmbC1nKf8fc
这种格式是JWT认证的方式,JWT是由三段信息构成的,将这三段信息文本用.
链接一起就构成了Jwt字符串。(这个知识点之前不清楚,百度了解了一下什么是JWT)
经过了解,第一题的答案就出来了,是JWT的认证方式
使用https://jwt.io/#encoded-jwt打开,进行.分隔的每部分用base64解码,所以中间部分解码出来了。
{
"id": 10086,
"MapClaims": {
"aud": "admin",
"username": "admin"
}
}
继续回来追踪流,我们继续往下看,看到第三个流,有个whoami的命令,返回没有权限。
看到第10个流,发现返回了个root,说明命令执行成功了,第三题webshell权限为root
这里我们再看下这个执行成功命令的token和之前的有没有区别,这里发现id是10087,所以第二题的答案就出来了,**10087#admin**
接着继续往后看第12个tcp流,发现输出这些内容,用base64解码,也就是下面的这些代码
接着看第13个流,可以看到吧这段内容输出到/tmp/1.c文件中,linux下.c文件一般接下来需要编译,第四题答案就是1.c
接着,看第14、15个tcp流,ls命令,查看当前目录文件,返回了1.c,接着cat 1.c,验证上一步是成功的。
接着一段内容传入/tmp/Makefile,解码看下,gcc编译,我们看到looter.so,可以猜测后面可能会把1.c改成这个名字
继续看第19和20tcp流,mv /tmp/1.c /tmp/looter.c
,将1.c改成了looter.c,后进行make编译
看到22,ls,返回Makefile\nlooter.c\nlooter.so,把这个文件复制到/lib/x86_64-linux-gnu/security/下,第五题答案就是looter.so
继续看到26,发现echo "auth optional looter.so">>/etc/pam.d/common-auth
攻击者把这串字符添加到这个文件末尾,经过在网上查询发现这个攻击方法的github-add PAM劫持SSH密码,最终配置完成后可以劫持用户ssh密码,最后一道题的答案就是**/etc/pam.d/common-auth**
根据此前看到的1.c的文件内容,可以得知最后的密码会被存到/tmp/.looter
看到最后,第31个tcp流,可以看到读取到了用户名与密码
0x03 总结收获
1.本来不了解JWT这种认证方式,做了这道题了解到了。
2.了解到攻击者获取账号密码使用的手法add PAM劫持SSH密码。
3.熟悉了攻击流量的分析。
0x04 参考
解题思路视频:https://www.bilibili.com/video/BV1T44y1t7pe?from=search&seid=9901301347512682571&spm_id_from=333.337.0.0
https://www.yuque.com/poetdp/ctf/yx9wrm
jwt解码
攻击手法:add PAM劫持SSH密码
什么是JWT