第八周作业 1.XSS盲打 2.XSS绕过 3.XSS绕过之htmlspecialchars()函数 4.XSS防范措施href和js输出

1.XSS盲打

XSS盲打就是攻击者在不知道后台是否存在xss漏洞的情况下,提交恶意JS代码在类似留言板等输入框后,所展现的后台位置的情况下,网站采用了攻击者插入的恶意代码,当后台管理员在操作时就会触发插入的恶意代码,从而达到攻击者的目的。

在pikachu平台进行演示

先在xss盲打栏目下,输入payload,观察到可注入点。
第八周作业 1.XSS盲打 2.XSS绕过 3.XSS绕过之htmlspecialchars()函数 4.XSS防范措施href和js输出_第1张图片
现在以管理员的身份登入后台,就会出现弹窗,这就是一个简单的盲打。通过xss钓鱼的方法就能获取到cookie,就能伪造管理员身份进行登陆了。
第八周作业 1.XSS盲打 2.XSS绕过 3.XSS绕过之htmlspecialchars()函数 4.XSS防范措施href和js输出_第2张图片

2.xss绕过

大多数网站为了避免xss的攻击,对于攻击者的输入都采取了过滤的措施,导致攻击者通常不能正常插入恶意代码来达到攻击目的。但是仍存在一些漏洞可以利用,来绕过过滤措施。

xss绕过的方法有许多,主要取决于攻击者的思路和对前端技术的掌握,以下介绍几个简单的绕过方法。

①转换
1.对前端的限制可以尝试进行抓包重发或者修改前端的HTML。(参考第六周作业更改输入限制的方法)
2.防止后台对输入的内容进行正则匹配来过滤输入,对于这样的过滤可以考虑大小写混合输入的方法。
例:

(正则匹配是一种字符串匹配的模式,可以用来检查一个串是否含有某种子串、将匹配的子串替换或者从某个串中取出符合某个条件的子串等)

3.防止后台对输入的内容进行替换,采用拼拼凑的输入方法。

例:ript>alert('你打篮球像yangshuang')ipt>

4.使用注释来来干扰后台对输入内容的识别。

例:ript>alert('你打篮球像yangshuang')ipt>
②编码
思路:后台有可能会对代码中的关键字进行过滤,但我们可以尝试将关键字进行编码后在插入,浏览器对改编码进行识别时,会翻译成正常的代码。(注意:编码在输出点是否会被正常识别和翻译)
例:使用事件属性onxx():
使用HTML进行编码:

在pikachu平台下xss过滤进行演示

输入paylaod :或者(这是在以至后台只对大小写进行了过滤)都可以达到以下效果

第八周作业 1.XSS盲打 2.XSS绕过 3.XSS绕过之htmlspecialchars()函数 4.XSS防范措施href和js输出_第3张图片
后台对输入进行过滤的代码:
第八周作业 1.XSS盲打 2.XSS绕过 3.XSS绕过之htmlspecialchars()函数 4.XSS防范措施href和js输出_第4张图片

3.XSS绕过之htmlspecialchars()函数

htmlspecialchars()函数把一些预定义的字符转换为 HTML 实体。

预定义的字符是:
& (和号)成为 &
" (双引号)成为 "
’ (单引号)成为'
< (小于)成为 <
>(大于)成为 >

该函数的语法:htmlspecialchars(string,flags,character-set,double_encode)

过滤原理:htmlspecialchars() 函数把预定义的字符转换为 HTML 实体,从而使XSS攻击失效。但是这个函数默认配置不会将单引号和双引号过滤,只有设置了quotestyle规定如何编码单引号和双引号才能会过滤掉单引号

可用的quotestyle类型:
ENT_COMPAT - 默认。仅编码双引号
ENT_QUOTES - 编码双引号和单引号
ENT_NOQUOTES - 不编码任何引号

在pikachu平台下的演示

先输入被预定义的字符,在前端查看代码观察有是否有过滤掉单引号或双引号

第八周作业 1.XSS盲打 2.XSS绕过 3.XSS绕过之htmlspecialchars()函数 4.XSS防范措施href和js输出_第5张图片
后台并设置的htmlspecialchars函数没有对单引号进行处理,故可以设置对应的payload绕过过滤


payload:(任意字符串)'onclick'=alert('你打篮球像yangshuang')'
查看前端代码发现已经攻击成功(浏览器问题不弹窗。。。。)

第八周作业 1.XSS盲打 2.XSS绕过 3.XSS绕过之htmlspecialchars()函数 4.XSS防范措施href和js输出_第6张图片

4.XSS防范措施href和js输出

XSS防御的总体思路是:对输入进行过滤,对输出进行编码

  • 过滤:根据业务需求进行过滤,比如输出点要求输入手机号,则只允许输入手机号格式的数字。
  • 转义:所有输出到前端的数据都根据输出点进行转义,比如输出到html中进行htnl实体转义,输入到JS里面的进行JS转义

在pikachu下的演示

先输入一些字符串,查看前端的源代码,发现输入的字符都被转义了。但< a > 标签的href属性也是可以执行JS表达式的

TIP:HTML< a >标签
< a >标签定义超链接,用于从一张页面链接到另一张页面,而标签中的herf属性是指示链接的目标
在w3school上的详细解释:http://www.w3school.com.cn/tags/att_a_href.asp

第八周作业 1.XSS盲打 2.XSS绕过 3.XSS绕过之htmlspecialchars()函数 4.XSS防范措施href和js输出_第7张图片输入payload:Javascript:alert('你打篮球像yangshuang'),成功。(alert()只是一个警告消息框,alert中的字符串填入提示的内容)
对于这种防范措施,需要在输入的时候只允许输入http或https协议,之后再用htmlspecialchars函数进行转义。

TIP:关于http和https协议的解释:https://www.jianshu.com/p/6db0c6dc97a9

第八周作业 1.XSS盲打 2.XSS绕过 3.XSS绕过之htmlspecialchars()函数 4.XSS防范措施href和js输出_第8张图片
现在js栏目下,随意输入来找到它的输入点(根据前端代码输入tmac,会进入另一个页面而不是显示“无论如何不要放弃心中所爱”),对于JS代码,我们需要构造一个闭合,根据显示的代码构造的payload:x'
第八周作业 1.XSS盲打 2.XSS绕过 3.XSS绕过之htmlspecialchars()函数 4.XSS防范措施href和js输出_第9张图片输入payload后的结果:

第八周作业 1.XSS盲打 2.XSS绕过 3.XSS绕过之htmlspecialchars()函数 4.XSS防范措施href和js输出_第10张图片
前端被插入的代码:
第八周作业 1.XSS盲打 2.XSS绕过 3.XSS绕过之htmlspecialchars()函数 4.XSS防范措施href和js输出_第11张图片
以上对js输出点的演示,但html实体编码可以解决XSS问题但编码后的内容在JS中不会被翻译,最好是使用\对特殊字符进行转义。

你可能感兴趣的:(第八周作业 1.XSS盲打 2.XSS绕过 3.XSS绕过之htmlspecialchars()函数 4.XSS防范措施href和js输出)