【问题标题】:How to fix shell injection exploits in PHP?如何修复 PHP 中的 shell 注入漏洞?
【发布时间】:2014-12-19 21:37:03
【问题描述】:

我们有人利用我们的网站并给自己资金进行购买,而实际上却没有存入任何资金。在运行 Vega 扫描程序来查找漏洞时,我们的几乎所有页面似乎都打开了 shell 注入漏洞。

程序说以下 2 个请求(基本上在任何页面上,因为这个 PHP 代码在 header.php 中)使我们容易受到攻击。

GET /web-hosting.php?cid=1`true`
GET /web-hosting.php?cid=1"`true`"
GET /style.css?1=null`true`
GET /style.css?1=null"`true`"

查看 header.php 代码时,我注意到链接的 CSS 文件后面有“?1”。我没有对这个站点进行编码,所以我不确定它们是否一直存在,但是没有充分的理由将这个参数放在那里吗?似乎它只是为我们打开了漏洞利用的大门。

<link rel="stylesheet" type="text/css" href="reset.css?1" />
<link rel="stylesheet" type="text/css" href="style.css?1" />
<link rel="stylesheet" type="text/css" href="style-custom.css?1" />

编辑

这是在以 cid.php 作为参数的标头中使用的代码。

<?php
// Enter WHMCS Folder location  eg "whmcs"
$location = "customers";


require("".$location."/dbconnect.php");
if (isset($_REQUEST['cid'])) $_SESSION['currency'] = $_REQUEST['cid'];

?>

我对 shell 注入并不太熟悉,但是我真的不明白这有什么意义。我尝试在浏览器中输入 URL,但它只是加载了页面。这些实际上有什么作用?如何解决?

【问题讨论】:

  • 您应该立即聘请专业人士。
  • 漏洞利用似乎仅限于某个包含的脚本,该脚本将 cid 作为参数,因此我可以通过将其更改为使用 mysqli 我相信自己来修复它。我只是对 ?1 更好奇,我认为可以通过从实际链接行中删除它来修复它,但不确定。
  • shell 注入不是 sql 注入。就目前而言,我们无法在不阅读代码的情况下提供任何类型的诊断。
  • 我不确定要提供什么代码,我已经编辑了原始帖子,以在带有 CID 参数的标题中显示 PHP 代码。

标签: php shell code-injection exploit


【解决方案1】:

您可以尝试过滤输入(无论如何您都应该这样做)。下面的 MySQL Real Escape String 很快就会被弃用,但现在可能可以工作。 http://php.net/manual/en/function.mysql-real-escape-string.php

<?php
//...
if (isset($_REQUEST['cid']))
  $_SESSION['currency'] = mysql_real_escape_string($_REQUEST['cid']);

?>

您可能希望进一步过滤 cid 变量,确保它不太长、没有特殊字符、匹配模式等。

【讨论】:

    猜你喜欢
    • 2019-05-09
    • 1970-01-01
    • 2011-06-10
    • 1970-01-01
    • 1970-01-01
    • 2021-08-14
    • 1970-01-01
    • 1970-01-01
    • 2014-10-13
    相关资源
    最近更新 更多