-1

这是我为练习 LFI 而提出的要求。

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

这是我得到的错误:

bash:意外标记'('附近的语法错误

当前使用 UBUNTU 18.04。

4

1 回答 1

2

我可以发现许多问题。

  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"])); ?>
    

    或从命令行:

    php -r 'file_get_contents(\'http://192.168.190.138/system($_GET["cmd"])\');'
    

    ...而不是调用 netcat?


总的来说,我担心这感觉就像有人试图将他们在互联网上找到的两三件东西混在一起,却不了解其中任何一件是如何工作的。

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

目前,你所拥有的是完全错误的。错误的层太多,无法深入修复它,我只触及了其中的一些。老实说,我什至无法弄清楚你想要做什么

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

于 2018-12-10T19:26:20.477 回答