[Hello-CTF]RCE-Labs超详细WP-Level10(无字母命令执行_二进制整数替换)
2025/3/16 19:20:23
来源:https://blog.csdn.net/qq_39673370/article/details/146203127
浏览:
次
关键词:[Hello-CTF]RCE-Labs超详细WP-Level10(无字母命令执行_二进制整数替换)
温馨提示
- 这关涉及的知识点较多, 写的很长, 中间留了很多错误引导(本人在实验时遇到的问题, 或许你们也会遇到), 在后文才逐步解释
源码分析
- 跟前几关一样, 更改了 WAF 的过滤字段
- 这个关卡, 只有
0
, 1
, '
(单引号), $
, <
, \
, (
, )
可以用
解题分析(实验这些命令, 可以先在自己本地的Bash
试试)
- 上一关使用 八进制, 而这一关只有
0
和 1
, 难道使用二进制? - 在
bash
终端中, 支持使用 $((2#binary))
来通过二进制表示十进制数 - 虽说知道了
$((2#binary))
可以把二进制转为十进制, 但是还是把它拆分开来分析一下 - 熟知
$((2#binary))
的原理, 是否会发现, 这里不是有个 2
吗, 怎么绕过 WAF 呢 - 其实只要在嵌套一层
$((...))
就可以 - 可以只使用
1
和 <
通过左移运算得到 2
- 所以
$((2#binary))
可以写为 $(($((1<<1))#binaryStr))
- 然后把
$(($((1<<1))#binaryStr))
套入到八进制转义中, 这里拿 ls
举例 - 但是使用
$'\$(($((1<<1))#10011010))\$(($((1<<1))#10100