这题相较于55过滤了更多的东西,但是flag在36.php中,并且不需要php,所以我们需要在绕过过滤的同时,构造一个36,这里就要知道linux下的运算 $(())
是 算术扩展 , 允许你对数值进行加法、减法、乘法、除法等算术运算,并输出结果。
$((~$((“”))))
表达式解析:
$((~$((""))))
可以分为几个部分:
-
$(())
:这是 算术扩展(Arithmetic Expansion)。它允许你在其中执行整数计算并返回结果。 -
~
:这是按位取反(bitwise NOT)操作符。它对数字的每一位进行反转:0变1,1变0。 -
外层
$(())
:这用于执行整个表达式的算术运算。
具体解释:
-
$((""))
:-
$((""))
是算术扩展,但其中没有具体的数值,因此它会返回一个结果0
。
示例:
bash复制代码$(( )) # 如果没有给定数字,它会默认返回 0
-
-
~$((""))
:-
由于
$((""))
结果是0
,对0
进行按位取反操作。 -
0
的二进制表示是00000000
(假设是 8 位)。按位取反之后,变成11111111
,即-1
(因为在二进制中,按位取反会产生负数)。
-
-
外层的
$((~$((""))))
:-
最终,整个表达式变成了
-1
,即:
bash复制代码$(( -1 )) # 结果就是 -1
-
$(($((~$(())))$((~$(())))))
1. 最内层的 $(() )
:
-
$(())
是 算术扩展,它用来执行数字计算。没有给出具体的计算式时,$(() )
会返回0
。 -
因此,
$(() )
的结果是0
。
2. ~$(() )
:
-
~
是 按位取反 操作符。它作用于数字时会将数字的每一位反转。对于数字0
,按位取反后的结果是-1
。 -
所以,
~$(() )
实际上是~0
,结果为-1
。
3. 第二层嵌套的 $((~$(())))
:
-
这也是对
0
进行取反,得到-1
,所以结果是-1
。
4. 外层的 $(())
:
-
$(($((~$(())))$((~$(())))))
中的$(())
内部包含了两个按位取反的操作结果。因为每个$(())
表达式中都是-1
,所以最终的计算会是-1
和-1
进行运算。
5. 两个 -1
相加:
-
$(($((~$(())))$((~$(())))))
可以简化为$( (-1 - 1) )
,即对-1
和-1
进行相加。 -
结果是
-2
。
总结:
整个表达式 $(($((~$(())))$((~$(())))))
最终的结果是 -2
,因为内部的每个嵌套都经过按位取反,最终导致运算结果为 -2
。
举个例子:
如果我们简化这个表达式为:
bash复制代码$(($((~$(())))$((~$(()))))) # 相当于 $( (-1 - 1) )
那么:
-
内部每一层的
~$(() )
都得到-1
,最终运算为-1 - 1
,结果为-2
。
自动相加
如果没有显式的运算符(如 +
, -
, *
, /
等),Bash 会默认将两个数字连接在一起,并进行加法操作。
因此,$((~$(())))$((~$(())))
就相当于把 -1
和 -1
连接起来,并进行加法运算。更准确地说,Bash 会自动执行:
$(( -1 + -1 )) # 自动相加
看完上面的,说明我们需要构造一个数字取反的到36,-37取反可以得到36,所以我们需要37个这样的式子拼接最后取反得到36
$((~$(($((~$((${}))))$((~$((${}))))$((~$((${}))))$((~$((${}))))$((~$((${}))))$((~$((${}))))$((~$((${}))))$((~$((${}))))$((~$((${}))))$((~$((${}))))$((~$((${}))))$((~$((${}))))$((~$((${}))))$((~$((${}))))$((~$((${}))))$((~$((${}))))$((~$((${}))))$((~$((${}))))$((~$((${}))))$((~$((${}))))$((~$((${}))))$((~$((${}))))$((~$((${}))))$((~$((${}))))$((~$((${}))))$((~$((${}))))$((~$((${}))))$((~$((${}))))$((~$((${}))))$((~$((${}))))$((~$((${}))))$((~$((${}))))$((~$((${}))))$((~$((${}))))$((~$((${}))))$((~$((${}))))$((~$((${_}))))))))
标签:运算,结果,web57,取反,36,ctf,按位,show,表达式 From: https://blog.csdn.net/2401_84499636/article/details/143882078