位置:
/home/kita/code/blog/source/_drafts/HackThisSite/
当前文件状态(以工作树为准,2026-09-13 核对):
_drafts/HackThisSite/:67 个_posts/wp/HackThisSite/:32 个说明:当前仓库有其他未提交的移动和文章修改(Realistic
12–16、Application 01–05 已从 _drafts/ 移到
_posts/)。Blog 仓库的 commit/push
由用户处理,本文只记录挑战与 writeup 状态。
| 类别 | 已解决 | 未解决 | 备注 |
|---|---|---|---|
| Basic | 1–11 | 无 | 11 篇 writeup 已发布 |
| Realistic | 1–16 | 无 | R12–R16 已补完并 live 验证 |
| Extended Basic | 1–14 | 无 | 全部 live 通关(须带 Referer) |
| Forensic | 1–2 | 3 | 3 卡在 header 加密的 RAR |
| Application | 1–17 | 18 | 18 站点端校验损坏 |
| Javascript | 1–7 | 无 | 全部 live(客户端 JS 校验) |
| Steganography | 1–10,12–14 | 11,15,16,17 | 10=Bacon;16/17 加密 RAR;11/15 待查 |
| Programming | 1–3,5–7,9–12 | 4,8 | 4 字形切分中;8 站方 bot 阻塞 |
hackthissite-forensic-03.md、-steg-10.md、-steg-16.md、-steg-17.md。| 类别 | 文件范围 | 数量 | 当前状态 |
|---|---|---|---|
| Basic | hackthissite-basic-01~11.md |
11 | 已发布,均有 flag |
| Realistic | hackthissite-realistic-01~16.md |
16 | 已发布 |
| Javascript | hackthissite-javascript-01~07.md |
7 | 已 live,QA 通过 |
| Extended Basic | hackthissite-extbasic-01~14.md |
14 | 已 live;01/02 待重写 |
| Forensic | hackthissite-forensic-01~03.md |
3 | 1–2 有 flag;3 未通关 |
| Steganography | hackthissite-steg-01~17.md、overview |
17 | 1–10、12–14 有 flag |
| Application | hackthissite-app-01~18.md |
18 | 01–05 已发布;06–18 草稿 |
| Programming | hackthissite-prog-01~12.md |
12 | 已 live 10 关;4/8 未通 |
| 关卡 | 挑战 | 当前解法 | 状态 |
|---|---|---|---|
| 2 | Chicago American Nazi Party | 隐藏 update.php + SQLi bypass |
已解决 |
| 3 | FBI Interrogation | 路径遍历覆盖 index.html |
已解决 |
| 4 | Fischer's Animal Products | UNION SQLi 取 9 邮箱 → SaveTheWhales |
已解决 |
| 5 | Damn Telemarketers | robots.txt 备份 hash → MD4 437a1 |
已解决 |
| 6 | ToxiCo Industrial Chemicals | XECryption 频率分析 → key 762 |
已解决 |
| 7 | Guru | LFI 读 .htpasswd → shadow → admin |
已解决 |
| 8 | United Banks Of America | SQLi 找 Gary → 改 cookie 转账 → 清日志 | 已解决 |
| 9 | CrappySoft Software | simulated XSS 改 cookie → 付薪 → 清日志 | 已解决 |
| 10 | smiller | smiller:smiller + UA holy_teacher +
admin=1 |
已解决 |
| 11 | BudgetServ Web Hosting | |ls| 注入 → id=0 改密 →
src.tar.gz |
已解决 |
| 12 | Heartland School District | file:///C:/ 列目录 + 读源码 →
clearlist() |
已解决 |
| 13 | Elbonian Republican Party | 报错泄露路径 → passwords.fip →
login2.php |
已解决 |
| 14 | Yuppers Internet Solutions | moderator.cgi 免密 → account=* 取明文 |
已解决 |
| 15 | seculas Ltd. | backup.zip bkcrack → shell.php → 溢出 |
已解决 |
| 16 | Simple Mail | .. 注册 → 改写 config.txt →
admin.php 读邮件 |
已解决 |
/missions/realistic/12/ →
meta refresh → cgi-bin/internet.pl;page.pl
是服务端 LWP 代理(file:// 可列目录),黑名单只挡
page.pl,直连 HTTP 与 guest.pl?action=read
均绕过。完成页
mission-accomplished.php。旧「页面为空、无法复现」判断作废。7e40c181…
= md5('Speeches') 是受保护目录名,7bc35830… =
md5('moni1') 是 passwords.fip
里的用户名哈希(该 URL 404),21232f29… =
md5('admin') 是真实登录目录(200,login2.php
字段 user/pass)。旧稿把这些混为一谈。news.cgi?story=moderator.cgi%00
的 null-byte 截断在当前节点已失效(服务端把 NUL 原样拼进文件名,回显
moderator.cgi^@.news);但 moderator id
isadmin
是硬编码常量,链路照常走通。administrator.cgi
未授权时返回伪 404,是旧稿误判「组件失效」的根因。f23a33d0 106331c0 6fd03c13;校验器源码
admin_area/test/chkuserpass.c.zip 可直接下载;shell
是被裁剪过的 ls-only
MyShell(cat/more/pwd
全被拒),最终溢出从 shell 内改成直接
POST viewpatents2.php(username=228×Y)。check_email.php 的
Unauthorized Entry 是顺序问题:必须先把
config.txt 覆盖成
auth_page=config.txt&authed=true& 让服务端 auth 与
Flash 参数一致,之后端点直接放行;完成页
Mission 16 Accomplished!。18 关全部按「下载官方附件 → 本地取证」重写
writeup。答案与证据等级如下(动态 =
程序自身或真实二进制接受;静态 = GUI
无显示环境下的反汇编/字节级重建):
| 关卡 | 答案 / 形态 | 证据等级 | 关键机制 |
|---|---|---|---|
| 1 | smashthestate |
静态 | REALbasic 逐字符拼串 |
| 2 | liberation |
静态 | 同上;校验走 socket keys 文件 |
| 3 | fireyourboss |
静态 | 同上(服务端校验已坏) |
| 4 | daytona |
静态 | VB6 Click handler 的 push imm8 |
| 5 | powertripping |
动态 | app5unix:4 dword 常量倒序比较 |
| 6 | magical |
动态 | MSVC 自解密壳(XOR 0xbeefcabe) |
| 7 | caged |
动态 | app7unix:和=753 → checksum 0xdca |
| 8 | 925248 → 2644-164-73427 |
动态 | VB6 Mid$+rtcStrReverse;wine 跑通 |
| 9 | SoundKing |
静态 | 阈值矛盾需 patch;索引链拼密码 |
| 10 | HiddenSecrets |
动态 | 未触发 event 0x3B;取正文冒号后 |
| 11 | Search&Destroy |
静态 | 密码印在内嵌 JPEG 像素上 |
| 12 | Creeper |
静态 | 目标串 "Cr p r";28 串取英文词 |
| 13 | 537-314-137-616 |
静态 | 脱壳后 CRC checkpoint 链 + 侧信道 |
| 14 | ihatethereg |
动态 | wine-mono 反射调 ParseandDecrypt |
| 15 | platform93/4 |
静态 | DBPro 逐像素画字;331 点逐字形读 |
| 16 | freedom |
动态 | QBFC 释放 .bat 后明文比较 |
| 17 | keygen HTS-142A-2129-251E-2A1F-2629 |
动态 | app17unix pty 驱动 → ACCEPTED |
| 18 | license 生成器(LIC/1.8/…,448B) |
动态 | 本地生成器正确;站点端校验损坏 |
applevelup.php,Application 1–17
全部通过(服务端回
Congratulations, you have successfully completed application N!),profile
的 Application 列表已出现 17 个,积分 3386 → 4496 →
4651。Sorry, your license file is not valid.;nullsecurity
逆向笔记在 app18 章节末尾明确写了 "there are reports that the validation
on the website doesn't work
well",与实测一致。结论:这关在站点端修好之前无法通过。~/ctf/workspace/challenges/hts-app/qa_writeups.py(H1/H2、表格、spoiler
位置、... 截断、fence、泄露 cookie/账号名、python
块编译)。index.php(字段 solution,第 9 关是
password)。成功响应含
Good Job, ***, You have successfully completed this mission
/ CORRECT!,失败是
Sorry: Your answer is wrong。~/ctf/workspace/challenges/hts-prog/<N>/,公共库
common.py)。wrong
而非“实例失效”);同一关卡必须串行。prog/1/wordlist.zip、prog/2/PNG、prog/4/XML、prog/5/corrupted.png.bz2、prog/7/BMP、prog/3/serials_example.txt)不需要登录态,可匿名下载;prog/6/image、prog/10/image.php?…
与实例本身绑定。| # | 关卡 | 结果 / 机制 | 状态 |
|---|---|---|---|
| 1 | Unscramble the words | 词表按字符排序串建索引查表 | ✅ live |
| 2 | Analyze the picture (Morse) | chr(pos - prev_white) → Morse |
✅ live |
| 3 | Reverse Encryption | 逆向 PHP encryptString(md5 枚举) |
✅ live |
| 4 | Parse an XML file | 去旋转已通;阻塞=字形切分(见下) | 🚧 未通 |
| 5 | Fix a corrupted file | ftp ASCII CRLF 修复 → 读图密码 | ✅ live |
| 6 | Bypass the image captcha | JS drawData → 螺旋序 → Chamfer 匹配 |
✅ live |
| 7 | Unscramble the image lines | 行置乱;按行 B 通道中值排序还原 | ✅ live |
| 8 | Code an IRC bot | 站方 bot moo 不在线 |
bot fail skip |
| 9 | One-Time-Pad Encryption | 数独 → SHA1 → Blowfish CBC 解密 | ✅ live |
| 10 | Automated Steganography | x 坐标即字节 → base64 → SHA-256 爆破 | ✅ live |
| 11 | Reverse Ascii Shift | % 分隔码逐位减 shift(限 3s) |
✅ live |
| 12 | String manipulation | 质/合数求和相乘 + ASCII+1 前缀 | ✅ live |
kitabot8|网络:irc.hackthissite.org:6697(SSL;明文
6667 亦可)NickServ REGISTER → 邮箱确认 →
SET AUTOOP ON → 对服务端 sendpass 机器人发
!link <本账号用户名>(!link 是 L8
要求的握手步骤)moo(站方
bot)!link 到本账号后才能 !perm8;实测
moo 已不在网络(WHOIS moo →
401 No such nick/channel,ISON moo 空,官方
Link Page 无此账号)/msg NickServ DROP kitabot8~/ctf/workspace/challenges/hts-prog/8/{register_nick.py,link_nick.py,ircbot.py}(纯
socket/TLS;bot 会对 VERSION 回非 mIRC 串,避免触发风控)window.location += "?lvl_password=<pw>"
回跳给服务端。必须带
Referer: https://www.hackthissite.org/missions/javascript/<N>/。实测同一
URL 不带 Referer 时服务端不计完成(profile 不变),带上后立即翻牌。Click here to win. 链接
/missions/javascript/2/index.php?challengePass=<串>;该串每次加载页面都重新生成,必须“抓页面
→ 立刻用同一串提交”。| # | 名称 | 答案 | 依据 |
|---|---|---|---|
| 1 | Idiot Test | cookies |
check(x) 明文比较 |
| 2 | Disable Javascript | per-load 串(形如 EK@1%I) |
win 链接在同一页,每次重载 |
| 3 | Math time! | 任意 14 字符 | 校验 x.length == moo(=14) |
| 4 | Tricky | moo |
RawrRawr="moo";拼接行是干扰 |
| 5 | Escape | ilovemoo |
unescape('%69%6C%6F%76%65…') |
| 6 | External script | moo pwns |
checkpass.js:rawr+" "+moo |
| 7 | Obfuscation | j00w1n |
十六进制混淆生成按钮后比较 |
https://www.hackthissite.org/missions/playit/<cat>/<N>/,表单
POST /missions/{extbasic,stego}/template.php,字段
formkey(每次加载都变)、lvl、pass;必须带
Referer: <该关卡页>,否则服务端回
Invalid Referer
且不计分。答案大小写敏感。You have already done this mission.(注意:extbasic
类不会出现
You have already completed this level!)+ profile
对应类别出现 (N)。~/ctf/workspace/challenges/hts-playit/playit_submit.py(--dry
打印题面/formkey,--submit "<答案>" [--also-profile])。forensic2),POST 到关卡页自身。CREATE/DESTROY/TO
都是标识符 → 输出 2)、4
✅(name type as in 语法 →
67)、5 ✅(sed 少全局标志
g)、10 ✅(batch
认证绕过:%INPUT% 无转义拼进 IF "%INPUT%"==""
→ 输入
"=="" set passwordvalue=1065435274 && goto :end abc
闭合引号、填入目标哈希并跳过乘质数循环;wine 本地复现 + live
提交,writeup status: verified)、11
✅(乘法哈希绕不过 → 32 位 SET /A
回绕:求多重素数乘积 ≡ 1065435274 (mod 2**32),最短解
aghilmort;wine 本地复现 + live 提交,writeup
status: verified);fls/icat 从镜像还原被删的
logins.txt,口令
qPYgbs0w5&?i{8a)、2 ✅(ELA
检出拼接痕迹;完成回执
Congratulations! You've successfully completed Forensic 2!);$$
利用;13:vrfy.php 注入构造;14:Java 并发修正,细节见各自
writeup);0x3B,其后 64
字节是 ASCII '0'/'1',每 8 位还原成
p68cq1hb;提交后 profile Stego: (4),关卡页回
You have already done this mission.;solver
challenges/hts-stego/4/extract_bits.py);https://www.hackthissite.org/missions/stego/lvl/<文件>(页面上的
<img>/<embed>/<a>
里),带 cookie 直接下:
1.bmp(“2 null bytes”)|2 2.wav(“did I
hear that correctly?”)|3 3.bmp(“obvious, just not at
first sight”)|4 stego4.gif(“I am being hexed!”)|5
stego5.bmp|6 stego6.png|7
stego7.zip(“Download the image Here”)|8
stego8.bmp|9 Stego9.zip(“Download the song
Here”/“kiss me alone”)|10 Stego10.jpg|11
11.png|12 12.bmp|13 13.bmp|14
stego14.tar.gz(仅 228 人做过,偏难)|15
Stego15.png|16 Stego16.png|17
stego17.jpgread4.py,字形清晰)、去旋转后用
ocr4.py(tesseract
--psm 10)基本读对。唯一剩下的阻塞是字形切分:glyphs_of()
在部分颜色上把相邻字符并成一个字形(yellow 只切出 4 个,答案有 10
个),修好切分(按笔画间距/投影分段)后即可自动化并 live 提交;限时 120
秒,需单进程。challenges/hts-prog/7/solve_live.py,答案与证据见
writeup)。moo
仍不在线(WHOIS moo →
401 No such nick/channel,全网 31 用户/3
服务器);账号信息与脚本见上。_posts/(用户处理)。先检查真实文件状态:
git status --short
先阅读对应 writeup,再开始 challenge 操作。
已解决只表示当前 challenge 会话得到成功响应;仅有理论解、静态分析或旧流程不算已解决。
新 flag、成功响应和关键解法应先写入对应 writeup,再同步本文件。
不提交 Cookie、API key、HTTP Basic 密码或浏览器导出的认证数据。