常见漏洞之xss

提前学习

  • 后端代码 => 服务器所承担
    前端代码 => 客户端承担(浏览器)

  • ajax:Web数据交互方式,异步js和xml,使用Ajax技术网页应用能够快速地将增量更新呈现在用户界面上,而不需要重载(刷新)整个页面,这使得程序能够更快地回应用户的操作。一句话概括就是不更新整个页面的前提下维护数据。比如搜索框的自动匹配

    学习链接:https://www.w3school.com.cn/js/js_ajax_intro.asp

  • 常用的事件:

    onXXXX=XXXXX(满足XXX,触发XXX)

    onerror(加载错误时触发)

    onload(加载成功时触发)

    oninput(输入框输入时触发)

    HTML事件参考手册:https://www.w3school.com.cn/tags/html_ref_eventattributes.asp

  • 同源策略:浏览器的同源策略,限制了不同源的Js,对当前页面的资源和属性的权限。同源策略保护了a.com域名下的资源不被来自其他网页的脚本读取或篡改

    同源:同域名|ip、同端口、同协议

  • Cookie:用户的权限和身份。xss读取cookie方法:<script>alert(document.cookie)</script>

    Cookie注入和Cookie不是同一个东西;Cookie注入,只是因为目标站点滥用REQUEST接受传参

    Cookie: 随机字符串 (多串);时效性:一次会话 或者 开发设定;浏览器不关闭,一次会话都存在(浏览器被关闭)

    原则上而言Cookie需要完整的,但是实际上而言,Cookie不一定每一条都代表权限。

一、简介

  • XSS:跨站脚本攻击,是一种前端注入。

    官方语言:XSS攻击通常指的是通过利用网页开发时留下的漏洞,通过巧妙的方法注入恶意指令代码到网页,使用户加载并执行攻击者恶意制造的网页程序。这些恶意网页程序通常是JavaScript,但实际上也可以包括Java、 VBScript、ActiveX、 Flash 或者甚至是普通的HTML。攻击成功后,攻击者可能得到包括但不限于更高的权限(如执行一些操作)、私密网页内容、会话和cookie等各种内容。

  • 危害:盗取Cookie(用的最频繁的)、获取内网ip(攻击内网)、获取浏览器保存的明文密码、截取网页屏幕、网页上的键盘记录

  • 成功执行的条件

    用户可以控制输入,执行代码拼接用户输入数据

  • 三种触发xss的JS

    • 标签风格:<script>alert(1)</script>
    • 伪协议:<a href=Javascript:alert(1)>123</a>
    • 事件:<img src=# onxxx=alert(1) />

二、原理

  • 官方语言解释:当动态页面中插入的内容含有这些特殊字符(如<)时,用户浏览器会将其误认为是插入了HTML标签,当这些HTML标签引入了一段JavaScript脚本时,这些脚本程序就将会在用户浏览器中执行。所以,当这些特殊字符不能被动态页面检查或检查出现失误时,就将会产生XSS漏洞。
  • 口头语言解释:通过拼接恶意的html代码,js语句来执行攻击,实际上为html代码注入。

三、本质

  • 本质:我们的传参被拼接进HTML页面,并且被执行
  • 与SQL注入区别:SQL注入拼接的是操作数据库的SQL语句。XSS拼接的是网页的HTML代码,一般而言我们是可以拼接出合适的HTML代码去执行恶意的JS语句(总结:xss就是拼接恶意的HTML)
  • xss是对输出过滤,不是输入

四、分类

  • 检测是否存在XSS:在正常页面传参然后构建参数让他弹窗;经典的弹窗语句:<script>alert(1)</script>

  • **测试网站是否存在XSS关键在于:**善于看网站源码,通过网站源码给你的信息来进行测试,并且要善于找输出点,这些地方都是需要重点排查的

  • xss平台:hk.sd

    keepsession (保持会话) Cookie会过期(发包)

    • xss的过滤方法

      进行转义实体编码输出,加标签,正则匹配替换

  • XSS一般在什么业务场景容易遇见?

    重灾区:评论区、留言区、个人信息、订单信息等

    针对型:站内信、网页即时通讯、私信、意见反馈
    存在风险:搜索框、当前目录、图片属性等
    功能:留言板、冲值渠道(冲X钱、冲X卡)、付款备注、发货备注(错误日志、登录日志、文章(不要审核的文章))

4.1 存储型:持久型xss,存入数据库,访问时触发

  • 简介:你提交的数据成功的实现了XSS,存入了数据库,别人访问这个页面的时候就会自动触发

  • 辨别方法:没有传递恶意参数的时候,如果能触发XSS就是存储型

  • 易出现的地方:用户注册,上传文件的文件名处,管理员可见的报错信息,留言板等一些会存到数据库里的地方

  • 在哪儿执行:服务器

  • 存储型xss危害

    用于盗取cookie,得到内网ip…和其他xss作用相同,只是触发和执行的方法原理不同

4.2 反射型:非持久型xss,只对本次访问有影响

  • 简介:你提交的数据成功的实现了XSS,但是仅仅是对你这次访问产生了影响,是非持久型攻击

  • 辨别方法:传参里面有恶意语句,如果能触发XSS就是反射型

  • 易出现的地方:搜索框,页面跳转这些地方

  • 在哪儿执行:浏览器

  • 反射型XSS具体使用方法:欺骗用户去点击构造的链接

    比如百度存在反射型XSS,然后你构建可以窃取Cookie的JS语句,然后传参点在URL那里,然后我们通过短链接将他变为短链接,然后发给想要获取别人信息的人。然后人家如果登陆状态访问了就会触发XSS

4.3 DOM型:不与后台服务器产生数据交互,通过DOM操作前端代码输出的时候产生的问题

  • DOM简介:DOM(文档对象模型)是一个与平台、编程语言无关的接口,它允许程序或脚本动态地访问和更新文档内容、结构和样式,处理后的结果能够成为显示页面的一部分。

    img

  • DOM型XSS:通过DOM可以让脚本动态的访问、控制网页

  • 常用document对象属性

    document.domain (域名)

    document.title

    document.url

    document.cookie 读取当前网页的Cookie [xss必备]

    document.lastModified 获得当前页面的最后修改时间[识别伪静态必备]

    document.write 向文档中写文HTML或者JS代码[Dom xss常见的存在方式]
    在这里插入图片描述

    补充:

    • 静态网页 (纯前端代码HTML)不会随着访问改变最后一次修改的时间

      动态页面加载静态页面,会造成伪静态的假象

    • 动态网页 (有后端代码所参与的网页就是动态网页)

    • 伪静态网页 动态网页假装成 静态页面(SQL注入)会随着访问改变最后一次修改的时间

      eg: http://lri45456.ia.aqlab.cn/news/detail/7.html相当于http://lri45456.ia.aqlab.cn/news/?detail=7

      一个伪静态的SQL注入 https://lri45456.ia.aqlab.cn/news/detail/8’ and 1=1 – qwe.html

  • Dom型XSS常见三种状态

    • document.write

      可以接受一个独特的编码Native

      eg:

      <meta charset='utf-8'>
      <script>
      var pos=document.URL.indexOf("name=")+5;  //取name=后面的值
      var username = unescape(document.URL.substring(pos,document.URL.length)); //取name=后面的值
      var r='<b>'+username+'</b>'
      document.write(r)
      </script>
      
    • ②innerHTML:修改内容

      eg:

      <div id='zkaq'>NF</div>
      <input type="button" onclick=fun() value="点击有惊喜">
      <script>
      	function fun(){
      	var url=unescape(document.URL);
      	var pos=url.indexOf("name=")+5;
      	document.getElementById("zkaq").innerHTML="Hi, <b>"+url.substring(pos,url.length)+'</b>';}
      	</script>
      
    • eval

      eg:

      </h1>Hello World</h1>
      <script>
      	var a =location.hash.substr(1);
      	eval(a);   // eval是高危函数。 把字符串当做代码进行执行
      	</script>
      
  • 易出现的地方:在DOM位置上,不取决于输入环境上

  • Dom型XSS的优点避开waf

    因为有些情况Dom Xss的Payload,可以通过location.hash,即设置为锚部分从#之后的部分,既能让JS读取到该参数,又不让该参数传入到服务器,从而避免waf检测。location.search也类似,它可以把部分参数放在?之后的部分。

五、xss检测

5.1 手工检测XSS

(考虑哪里有输入,输入的地方在哪里输出)

  • 可得得知输出位置

    输入敏感字符<、>、"、'、(),在提交请求后查看HTML源代码,看这些输入的字符是否被转义

    可输入一些便于查找的字符,如AAAAA<>,在ctrl+F时便于查找

  • 无法得知输出位置

    在 web应用程序源代码不对外公开的情况下,在测试XSS是无法得知输入位置在何处显示

    eg:一个留言板,

    在div标签中:<div>XSS TEST</div>

    在input标签中:<input type="text" name="content" value="XSS Test"/>

    对于这种情况,通常会采用输入“/>XSS Test”来测试,本质:闭合

5.2 全自动检测XSS

XSSER、XSSF······

六、利用

6.1 XSS会话劫持

  • JS操作cookie

    :不使用用户的账号密码就可登陆;

    • 盗取用户的cookie,document.cookie;利用burpsuite替换cookie,或者利用浏览器自带的控制台(console)替换
  • SWSSION会话

    :维持会话状态的另一种形式,可能会存储在cookie中;

    • cookie,session区别:cookie是将数据存储在客户端,而session则是保存在服务器端,仅仅是在客户端存储一个ID;session必cookie要安全

6.2 XSS Framework框架

6.3 XSS GetShell

6.4 XSS蠕虫

七、fineCMS v5.3.0

当你访问一个不存在的页面的时候 -> 记录你所访问的地址(错误日志)

https://blog.csdn.net/Fly_hps/article/details/84380485

八、防御

  • 过滤(危险传参)

  • HTML实体化(HTML代码给编码,只有文本意义)

  • httponly (禁止JS代码获取Cookie)
    ①:ie浏览器不支持
    ②:让页面输出Cookie (探针文件:phpinfo());一键化搭建的网站容易有探针

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

吃_早餐

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

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

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

打赏作者

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

抵扣说明:

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

余额充值