命令执行web42

又是一个新题型,这个题没有过滤任何字符,但是有system($c." >/dev/null 2>&1");

system();我们知道会返回命令的输出或执行结果。

system($c); $c是一个变量,所以我们只需要在url中给变量c赋值即可。

">/dev/null " 这部分是重定向标准输出的命令。

/dev/null是一个特殊的文件,它会丢弃写入其中的所有数据。这意味着,当命令执行时,它的标准输出(stdout)会被重定向到/dev/null,也就是说,你不会在PHP脚本中看到任何输出。

2>&1 这部分是重定向标准错误的命令。

2代表标准错误(stderr),而&1表示将标准错误重定向到与标准输出相同的位置。由于标准输出已经被重定向到/dev/null,这意味着标准错误也会被重定向到/dev/null

所以system($c." >/dev/null 2>&1");理解一下就是:

在变量c中的命令所产生的输出内容(正确的内容、错误的内容)被送到了/dev/null中,不会有内容出现在屏幕上。

我们通常称" >/dev/null 2>&1"为黑洞。

方法:使用命令分隔,执行多条命令或者把后面输出到黑洞里面的命令给截断。

;  前面和后面命令都要执行,无论前面真假

|  直接执行后面的语句

||  如果前面命令是错的那么就执行后面的语句,否则只执行前面的语句

%26(&)  前面和后面命令都要执行,无论前面真假

%26%26(&&)  如果前面为假,后面的命令也不执行,如果前面为真则执行两条命令

(get传参,使用&&、&需要使用url编码)

%0a      回车符

我们给变量c赋值,按黑洞的特性,应该没有任何回显,但却执行了一个ls命令让我们看到了目录,说明有一个命令产生的回显进入了黑洞,一个命令产生的回显成功显示。

我们把后面一个ls改成tac flag.php,发现回显内容仍是目录,这就说明是前面的命令产生的回显不会进入黑洞,所以我们把两个命令换一个位置。

成功拿到flag

我们试试其他的分隔符

没有回显,因为|  直接执行后面的语句,而后面的语句产生的回显进入了黑洞。

有回显,||  如果前面命令是错的那么就执行后面的语句,否则只执行前面的语句,

tac flag.php语句正确,所以执行tac flag.php,不执行ls。

有回显,%26与;类似,%26(&)  前面和后面命令都要执行,无论前面真假。

有回显,%26%26(&&)  如果前面为假,后面的命令也不执行,如果前面为真则执行两条命令,

tac flag.php命令正确,所以tac flag.php与ls都成功执行,但ls产生的回显进了黑洞不会产生内容,

tac flag.php产生的回显产生的内容显示在屏幕上。

有回显,%0a与;类似

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值