XSS攻防与绕过

XSS攻防与绕过

一、XSS利用方式

  • 获取用户cookie,实现越权,如果是获取网站管理员的Cookie,叫做提权。应该尽快注销账号,让Session失效
  • 钓鱼网站,模拟真实的网站的登录页面,获取用户信息(用户名密码等),再跳转到真实网站
  • 执行JS代码,用于DDOS攻击别的目标站点,在A站植入XSS代码,向B站发送请求,当用户量大的时候,实现了DDOS攻击
  • 恶意链接让用户点击,或者直接将网页植入到站点<\iframe>标签中
  • 当用户点击访问到恶意站点,在恶意网页中,可以执行JS代码,一方面提供正常网站功能,两亿访民啊隐藏者DOS或挖矿代码让用户浏览器执行

二、测试方法

  • 反射型:可以使用扫描器,或者burp进行fuzz
  • 存储型:可以直接用字典中的payload一个个试,根据弹窗的编号,就知道是哪个。但是容易被发现,所以可以先试探以下特殊符号是否被过滤
  • DOM型:主要以阅读JS代码为主,在页面找到输入点的线管DOM节点,在开发者选项中搜索以下,根据搜索结果去看看是否被相关的JS操作,如果有JS的操作,就去看我们的输入操作后输出在那个地方,就按照常规的XSS思路进行构建。

扫描器,要么直接对一个URL地址进行XSS的payload攻击,确认该URL地址在哪些payload上存在XSS,另外一个思路是对整个网站使用爬虫手段先爬取URL地址,然后再批量扫描

三、防御手段

  • 做实体字符编码,htmlspecialchars函数可以对< > "等符号转换成实体编码,最后显示出来还是原来的样子,这样基本上就没有XSS攻击的可能了
  • 正则表达式或字符串判断:可以判断是否包含script等关键字进行过滤

四、绕过方法

  • 绕过过滤

    • 前端限制:直接使用卡法这选项修改JS,或者使用burpsuite绕过

    • 字符过滤;双写、大小写绕过、注释符绕过、换行符绕过

  • 绕过编码

    • 明确浏览器解析的机制,选择对应的编码

五、其他技巧

  • 输出在标签之间的情况:测试<>是否被过滤或者转义,如果没有可以直接<\img src=1 onerror=alert(1)>

  • 输出在script内:需要在保证内部JS语法正确前提下,去插入payload。如果输出在字符串内部,测试字符串内否被闭合。

  • 如果输出在HTML属性中:首先查看属性是否有双引号包裹,没有则直接添加新的事件属性;又引号就测试能不能闭合

  • 输出在JS中,空格被过滤:使用/**/代替空格,或者在XSS代码后对其他代码进行注释

  • 输出在JS注释中:设法插入%0A,%0D等,让payload逃逸出来

  • 输出在JS字符串中:可以利用JS的十六进制、八进制、unicode编码

  • 当payload在以下这些标签中时,并不会解析,除非把他们闭合掉

    <textarta></textarea>
    <title></title>
    <iframe></iframe>
    <noscript></noscript>
    <noframes></noframes>
    <xmp></xmp>
    <plaintext></plaintext>

六、使用工具

1.BlueLotus

2.BurpSuite

3.KALI-BeefXSS

上一篇
下一篇