这是我为练习LFI而生成的请求。
nc -vvv 192.168.190.130 80 GET /<?php system($_GET['cmd']);?>
这是我得到的错误:
bash:意外令牌'('
附近的语法错误
当前使用的是UBUNTU 18.04。
答案 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