前端绕过:
前端有很多种方法绕过,比如抓包重放或者修改前端代码。
大小写绕过:
一般后台对输入进行过滤有两种方法:
1,使用正则匹配,一旦匹配成功就会被删除掉。2,用查找的函数查找。被函数查找到的内容也会被删除。
这两种方法可以用大小写混合的方式进行绕过,而后端是不管大小写的,可以正常执行我们的语句。
正则表达式:
重要性:在新技术层出不穷的今天,让人难以遗忘的,能称得上是伟大的东西寥寥无几,但是这个正则表达式算一个!但是,最让人容易忽略和忘记的也是正则表达式!(一定要学!!!)
正则表达式是一种描述字符串结构的语法规则,是一种规定好了的字符串格式,作用是可以匹配,替换,截取匹配的字符串。
拼凑绕过:
后端会对我们输入的标签进行替换,但只替换一次,所以可以这样:
<scri<script>pt>alert("hello world!")</scri</script>pt>
这样经过后端的替换之后就会变成:
<script>alert("hello world!")</script>
使用注释进行干扰:
例如:
<scri<!--test-->pt>alert("hello world!")</scri<!--test-->pt>
后端不认识:
<scri<!--test-->pt>
所以不会去处理这个,然后执行的时候会变成这样:
<script>
如图:
<scri
pt>
看到了没<! --test–>不会出来,被注释掉了。(这里的叹号后面是没有空格的,因为不加空格,,它会被注释掉,你们会看不到,建议手动试试,,,,,,)但是可以避开检查!
编码绕过:
<script>
这种标签是可以编码的,编码之后,后台也会不认识它,然后达到绕过的效果,但是!不是可以任意编码的!他有一个重要的条件:一定要确保在输出点的时候可以正常被识别,翻译,执行!
案例演示:
大小写绕过:
<Script>5555555
拼凑绕过:
<sc<script>ript>4444444
注释绕过
<sc<!--test-->ript>666666
提交后查看页面源码:
大小写绕过:
结果:标签还在!成功绕过!
拼凑绕过:
标签被“干掉”,绕过失败!
注释绕过:
标签被“干掉”,绕过失败!
通过上面三种可以看出大小写绕过方案可行!
payload:
<Script>alert("hello !")</Script>
效果:
关于htmlspecialchars()函数的绕过:
这个函数的防御不全面,也就是说,如果后端只用该函数对输入进行处理,而没有其他处理的话,这样的输入口还是会产生漏洞的。比如:
$message=htmlspecialchars($_GET['message']);
上述图片就是只用htmlspecialchars()函数对输入做处理,而没用其他的,我们来试试如何绕过把!
输入:
提交后查看后端代码:
可以看到,2333和单引号和斜杠没有被处理,所以我们可以结合后端返回回来的代码试着做闭合处理:
payload:
' onclick='alert("hello!!!")'