渗透测试基础 - bypass-绕过阻挡我们的WAF(上)

渗透测试基础 - bypass-绕过阻挡我们的WAF(上)

只为对所学知识做一个简单的梳理,如果有表达存在问题的地方,麻烦帮忙指认出来。我们一起为了遇见更好的自己而努力💪!

请进行合法的渗透测试,有关内容只是用作个人复习。

简介(bypass 与 waf)

在这里插入图片描述
bypass:咱们根据Google翻译的解释来看,是绕过的意思,且绕过是一个动作,那既然是动作,就会根据不同的障碍物的阻拦做出不同的绕过行为,这对应到我们今天的学习中也是如此。

WAF 【Web Application Firewall】web应用程序防火墙:是通过执行一系列针对HTTP/HTTPS安全策略来专门为Web应用提供保护的一款产品。其核心策略,基本都是有正则匹配所实现的。

WAF有着软硬之分:

  1. 软WAF (云WAF) DNS技术 移交域名解析权来防护
    如:云锁,悬镜,护卫神,云盾,玄武盾
  2. 硬WAF 物理设备 价格高昂 大型企业或政府单位配置
    如:天融信,深信服,依循,华为

软WAF当中也包含安装在服务器上的应用程序
如:安全狗,D盾等

既然要学习如何绕过WAF,那干脆就安装一个安全狗到服务器上,进行实际的绕过测试。

网站环境准备

在这里插入图片描述
下载安全狗,放入虚拟机中安装。
在这里插入图片描述
注:在安装的时候,需要将phpstudy的运行模式调节为【系统服务】,不然等下安装好了,安全狗并不会正常工作
在这里插入图片描述
访问本地的网站,测试安全狗有没有正常工作。
在这里插入图片描述
这里测试输入了 and 1=1之后跳出了安全狗的拦截界面,说明功能正常。

接下来开始讲具体的几种绕过方式。

常用绕过方法

因为安全和客户体验都是需要平衡的,特别是对于WAF而言。当这个网站用了WAF之后,因为我的用户名是and,然后我就被拉黑了,随便写一点什么就被拉黑,这样的使用体验是糟糕的,所以WAF一般都是通用的,并不是单独定制的,既然是通用的,那么他在拦截上会比较谨慎,所以WAF的正则一般是搭配式的。

在这里插入图片描述
这里先去掉and 后面的1=1 发现网站恢复正常。
在这里插入图片描述
单独写入1=1也不拦截,网站正常。

如上面那样, and 我不拦你,1=1我不拦你,但是and 1=1,我就判断你在恶意测试了,我就要开始拦截了。

我们这里先介绍第一种绕过方法:【替换
替换 and 或者 1=1
1=1拦截 -1=-1拦不拦截呢 测试一下
在这里插入图片描述
这里能看到 只是对1=1进行了拦截,-1=-1并没有拦截
在这里插入图片描述
测试-1=-2 页面发生了变化,确定当前是存在SQL注入的。

在测试一下and的替换方式,在数据库中and可用&这个符号来代替,这个叫做逻辑运算符。(还有|^等等符号)
在这里插入图片描述
在这里插入图片描述
放入进去测试之后发现,好像&并没有达到我们想要的效果。这里其实是因为,在URL传参中&有着链接的意思,如果这里写入&后台并不会以and的方式去理解,所以我们得将&进行一次URL编码然后测试。
在这里插入图片描述
在这里插入图片描述
这样就正常的执行了条件。那我们继续进行后面的测试语句,这里最多就能证明存在SQL注入,得获得数据才能做实,所以往下进行。

继续测试union select
在这里插入图片描述
输入union select 不出意外的被拦截了,这里还想像前面那样去做替换嘛?这样是行不通的,因为union select并没有什么能被代替的选择。

这里介绍第二种绕过方式:【内联注释

内联注释是MySQL为了保持与其他数据兼容,将MySQL中特有的语句放在/*!..*/中,这些语句在不兼容的数据库中不执行,而在MySQL自身却能识别,执行。
【/*!50001*/表示数据库版本>=5.00.01时中间的语句才能被执行】

/**/ 注释 (不被执行,只做显示)
/*!*/ 内联注释 (可被执行)
在这里插入图片描述
第一条是注释,对于后面的语句数据库根本就不看,所以没有用;但是第二条mysql是看了的,因为条件为False,所以没有数据返回;第三条,条件为True,返回了查询到的数据。
在这里插入图片描述
发现这样写还是被拦截了,那既然50001版本会拦截,其他版本会拦截嘛?我们用burp进行一下跑包测试,看看有没有漏网之鱼。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
这里能看到2679的数据包大小,是被拦截的回显,看看其他数据大小的内容是啥
在这里插入图片描述
在这里插入图片描述
这里能看到10044这个版本是没有问题的,拿去试试
在这里插入图片描述
10044的版本号确实有用,接着往下进行
在这里插入图片描述
这里能看到显错点是2。
在这里插入图片描述
发现输入完之后,又被拦截了,在和刚刚一样,还是和刚刚一样,测试一下他是拦截的什么数据

在这里插入图片描述
这里能看到 到from是没有被拦截的。
在这里插入图片描述
这里用刚刚的内联注释还是被拦截了,那我们这里就得在用其他方法了
第三种绕过方式:【特殊字符
这里在引入一个老知识,%0a,是换行的意思
我们如果做这样一个搭配会达到什么效果
– qwe/*%0a

– qwe为注释的意思也就是我在后面写什么也不会被执行
在这里插入图片描述
写在注释里面的内容也不会被拦截,那-- qwe/*%0a,的意思是-- qwe注释掉后面的语句,但是在看到%0a时,语句换到了新的一行,不在刚刚那执行了,属于新的语句。
在这里插入图片描述
在这里插入图片描述
这样就绕过了对from的拦截
在这里插入图片描述
在显错点输入password,就可能看到显示的数据。
在这里插入图片描述
【不用-- qwe也可以用#号来代替】

第四种方式:【中间件特性
select == s%e%l%e%c%t
这俩在iis中是等价的,但是对于正则来说就当然不不一样了。

在比如apache的一种特性,会引发参数污染的漏洞,叫hpp
在这里插入图片描述

当传入两个相同的参数时,默认只看第二个,看上面这个截图,/*&id=2#*/因为在注释里面所以waf他不管,但是apache却是会解析第二个参数。(记得将#号替换为%23)

在这里插入图片描述
在这里插入图片描述
这样也成功的绕过了。

第五种方式:【白名单
还有就是对身份白名单的校验,比如发现你的ip为127.0.0.1时不拦截,这个的设置方式,可采用head注入所使用的方法,添加X_FORWARDED_FOR字段,来改变自己本身的IP值。【渗透测试基础-HEAD注入

本次介绍的最后一个方式:【缓冲区绕过
还是那个核心,安全和良好的体验是对立面。当waf接收到一个非常大的数据包时,他虽然不确定这个数据包就完完全全的安全,但是它也不敢贸贸然的将这个数据包丢弃,因为他在前部分的数据里面并没有检测到危险,所以它还是会放过去。

这里的操作也很简单,还是以本地做测试,数据包中放入大量的无用数据,在最后放入我们的SQL语句即可
在这里插入图片描述
这里能看到当前是正常页面
在这里插入图片描述
传入测试语句之后被拦截,接下来我们插入大量的无用数据
在这里插入图片描述
这里就直接输出了数据。

漏洞总结

本次的几种绕过方式

  1. 文字替换(and = & = %26)
  2. 内联注释 (/*!..*/)
  3. 特殊字符 (换行符 %0a)
  4. 中间件特性(iis select = s%e%l%e%c%t ;apache hpp参数污染)
  5. 缓冲区超出 (大量无用数据超出有效检查字符数量)

bypass下将讲解有关一句话木马上传之后,如何才能绕过安全产品的检测,而不被删除的小技巧。

《最好的防御,是明白其怎么实施的攻击》

  • 2
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
### 回答1: 这句话的意思是:husky > pre-commit hook 失败了(添加 --no-verify 来绕过)。 其中,husky 是一个 Git 钩子管理工具,pre-commit hook 是其中的一个钩子,用于在提交代码前执行一些操作,比如代码格式化、代码检查等。如果 pre-commit hook 失败了,就会出现这个提示。 提示中提到了一个 --no-verify 参数,可以用来绕过 pre-commit hook 的检查。但是,这并不是一个好的做法,因为 pre-commit hook 的目的就是为了保证代码的质量和规范性,绕过它可能会导致代码质量下降。所以,我们应该尽量避免使用 --no-verify 参数,而是要修复 pre-commit hook 的问题。 ### 回答2: 此问题涉及到git中的pre-commit钩子(hook),可以通过加入--no-verify命令来绕过验证。 在git中,pre-commit钩子是用于在代码提交前运行脚本的钩子。它用于在代码提交之前进行某些操作,如代码规范检查、语法检查和单元测试。如果pre-commit钩子在运行期间发现问题,则会防止代码提交。 然而,在某些情况下,因为某些原因,pre-commit钩子可能会失败。当您尝试提交代码时,您可能会看到如下错误消息:“husky > pre-commit hook failed (add --no-verify to bypass)”。 在这种情况下,可以使用--no-verify命令来绕过这个问题,如下所示: ``` git commit --no-verify -m "commit message" ``` 这将绕过pre-commit钩子并执行提交。但是请注意,这只会在特殊情况下使用,如果pre-commit钩子出现问题,最好不要轻易绕过它,而是需检查并解决问题。 解决pre-commit hook失败通常需要检查pre-commit脚本中的代码以确定具体错误,例如检查代码中的错误、语法错误等等。通过解决这些问题,可以解决pre-commit hook失败的问题。 总之,当您在git中遇到husky > pre-commit hook failed (add --no-verify to bypass)问题时,您可以使用--no-verify命令来绕过它,但是最好的解决方法是检查并解决pre-commit脚本中的问题。 ### 回答3: 这个问题通常发生在使用git管理代码时出现的错误,可能有几种情况导致这个错误的出现。首先,Husky是一个流行的Git Hook库,它能够在Git操作的不同阶段自动运行脚本。这个错误通常涉及到Husky的“pre-commit hook”,也就是在提交代码前验证代码质量的钩子。 什么是Git钩子? Git钩子是一些自动运行的脚本,它们被设置在特定的Git事件上,例如提交代码、合并代码等。Git钩子路径存放在.git/hooks目录下,你可以在这个目录下查看和编辑所有可用的Git钩子。 原因一:Husky pre-commit hook 校验失败 当你将代码提交到Git仓库的时候,Husky pre-commit hook 会自动运行验证脚本来保证代码的质量。如果这些验证脚本出现了问题,Husky会报错并禁止提交代码,出现“husky > pre-commit hook failed”这个错误。这时需要检查校验代码的脚本是否有问题,例如是否有语法错误或者程序错误等。 原因二:Git 钩子脚本出现错误 除了Husky pre-commit hook校验失败之外,还有可能是Git钩子脚本出现了错误。例如,某些开发者可能会自己编写Git钩子脚本,如果这个脚本出现了问题,就会导致上述错误的出现。这时,需要检查Git钩子脚本的路径是否正确、脚本是否有语法错误或程序错误等。 如何解决 为了解决这个错误,你可以使用”–no-verify”参数来绕过Git钩子的校验。但这并不是一个好的解决方案,因为这意味着你无法保证你提交的代码符合你自己或你团队的代码质量标准。正确的解决方案是修复你的Husky pre-commit hook验证脚本或者Git钩子脚本错误,并再次尝试提交提交你的代码。如果你不确定如何修复这些错误,可以向你的团队或社区寻求帮助。如果你遇到了严重的错误,你可能需要卸载和重新安装Husky。 总之,当你遇到“husky > pre-commit hook failed”这个错误时,你应该在修复验证脚本或Git钩子脚本之后再次尝试提交你的代码,而不是仅仅“绕过”钩子的校验。这将帮助你加强你的代码质量和保持团队的开发标准。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

jinxya

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值