У нас есть кто-то, кто использует наш веб-сайт и предоставляет средства для совершения покупок, фактически не внося деньги. При запуске сканера Vega для поиска уязвимостей кажется, что почти на всех наших страницах открыты эксплойты для внедрения в оболочку.
Программа говорит, что следующие 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'];
?>
Я не слишком знаком с инъекциями оболочки, однако я не совсем понимаю, как это имеет смысл. Я попытался ввести URL в браузере, но он только что загрузил страницу. Что они на самом деле делают и как их можно исправить?
Вы можете попробовать отфильтровать входные данные (что вы всегда должны делать в любом случае). 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, убедившись, что она не слишком длинная, не содержит специальных символов, соответствует шаблону и т. Д.
Других решений пока нет …