跨站脚本攻击(XSS)

xss原理


什么是xss?

个人理解:xss全称跨站脚本攻击,也是一种注入,可以叫HTML注入,而注入的本质是什么,就是用户输入的数据可以被当作代码来执行。

与SQL注入一样,xss的条件也是两个:

第一,参数可控

第二,输入的参数可以被拼接到源代码中执行

那么,xss需要我偶们拼接什么呢?

SQL注入拼接的是操作数据库的SQL语句。XSS拼接的是网页的HTML代码,一般而言我们是可以拼接出合适的HTML代码去执行恶意的JS语句(总结:xss就是拼接恶意的HTML代码)

xss作用

xss能做什么?

第一,可以盗取Cookie(用的最频繁的)

第二,可以获取内网ip

第三,可以获取浏览器保存的明文密码

第四,截取网页屏幕

第五,网页上的键盘记录

xss平台

因为达到各种各样的效果需要比较复杂的代码,所以XSS平台应运而生:

  xsspt.com(开放注册)

  xss9.com(需要邀请码)

(XSS平台大大方便了XSS攻击,只需要引入一个平台外部链接就可以了实现功能了)

此处引入概念--->短链接

xss分类

个人理解,原则上xss应该之分为两大类

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

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

还有一种类别交dom型xss,这种xss基于dom树实现,有反射型的,有存储型的,怎么理解看个人

怎么检测是否存在XSS?

一般是想办法让浏览器弹窗(alert) 最经典的弹窗语句:<script>alert(1)</script> 

其他弹窗方式:

javascript:alert(1) (经典代码<a href=javascript:alert(1)>test</a>)  Javascript实际上是一个伪协议

  伪协议不同于因特网上所真实存在的协议,如http://,https://,ftp://,

  伪协议只有关联应用能够用,比如 php://   tencent://(关联QQ)

  javascript:伪协议实际上声明了URL的主体是任意的javascript代码

事件也是可以执行JS的:

  例如:  οnerrοr=alert(1)   在加载文档或图像时发生错误。

  该句的意思就是在加载文档或图像时发生错误然后会执行alert(1)

  类似的事件有很多

  常用的有 onerror、onload(成功加载执行)oninput (有输入框,输入的时候触发)

存储型XSS


概念

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

xss实现

此靶场使用掌控安全学院公开课靶场,需要的可以去腾讯课堂搜索掌控安全,报名课程

测试浏览器建议不要使用谷歌,此处我用的是火狐。打开漏洞所在url,进行测试,发现页面是一个留言板,如下图

由于不确定什么位置存在xss,我们可以再所有框框里面全部插叙相关语句,payload:<script>alert('test')</script>,成功弹窗,如下图

打开xss平台:https://xss9.com

创建新项目,项目名称为test,选择默认模块设置如下

点击生成,上面的部分数据js代码,链接和payload在下方

使用payload进行留言,如下图

过一段时间,去xss平台查看项目,看看是否打到管理员cookie,如下图

尝试通过cookie进入后台,打开后台页面,如下

F12修改cookie值,成功登录

反射型XSS


概念

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

xss实现

反射型xss就很多了,随便从网上找一个即可,在这里选择了一个事件型作为演示,如下图

看到注入框,尝试搜索111",观察页面变化,发现双引号消失,打开源码,发现双引号被代入源码执行,如下

直接尝试,onclick事件型弹窗,111"οnclick=alert(1)///,成功执行如下图

关于反射型,XSS反射型攻击,恶意代码并没有保存在目标网站,通过引诱用户点击一个链接到目标网站的恶意链接来实施攻击的。

一般需要与其他漏洞组合才能形成危害

DOM型XSS


什么是DOM型xss?

DOM—based XSS漏洞是基于文档对象模型Document Object Model,DOM)的一种漏洞。DOM是一个与平台、编程语言无关的接口,它允许程序或脚本动态地访问和更新文档内容、结构和样式,处理后的结果能够成为显示页面的一部分。DOM中有很多对象,其中一些是用户可以操纵的,如uRI ,location,refelTer等。客户端的脚本程序可以通过DOM动态地检查和修改页面内容,它不依赖于提交数据到服务器端,而从客户端获得DOM中的数据在本地执行,如果DOM中的数据没有经过严格确认,就会产生DOM—based XSS漏洞。

什么是DOM?

dom就是一个树状的模型,你可以编写Javascript代码根据dom一层一层的节点,去遍历/获取/修改对应的节点,对象值。

每个载入浏览器的 HTML 文档都会成为 Document 对象

Document 对象使我们可以从脚本中对 HTML 页面中的所有元素进行访问

document.write()            他可以接受native编码值

转码地址:http://tool.chinaz.com/tools/native_ascii.aspx

xss实现

在存在dom型xss的位置我们可以使用native编码来绕过waf防护,打开靶场

经过测试发现,这个站还接受get传参,如下图

尝试xss,发现被狗拦截,如下

于是乎,打开源码,看看接受传参方式,发现了document.write() 函数

打开站长工具对xss代码进行编码,

成功弹窗,如下图

扩展


绕过简单的xss防护

针对事件型漏洞,一般网站可能会对双引号进行实体化编码,这个时候如果没有dom型,或者单引号不能使用的情况下,还是真的不好绕过

针对于黑名单过滤,总是过滤不全的,比如过滤了img,还有input,还有div等等

过滤了onclik、onmouseover,可以尝试比较冷梦的事件触发onmouseenter

过滤了小括号,可以尝试单引号,过滤了单引号可以尝试反引号

过滤了alert,可以尝试confirm和prompt

有过一次测试,网站在输入的双引号前面加了反斜杠,但并没有被转义的情况

还有就是大小写、双写绕过之类的

引入知识

如果网站设置了浏览器禁止获取cookie怎么办?

针对通过xss大cookie的情况,越来越多的网站开启了防护

了解httponly属性

Cookie都是通过document对象获取的,我们如果能让cookie在浏览器中不可见就可以了,那HttpOnly就是在设置cookie时接受这样一个参数,一旦被设置,在浏览器的document对象中就看不到cookie了。而浏览器在浏览网页的时候不受任何影响,因为Cookie会被放在浏览器头中发送出去(包括Ajax的时候),应用程序也一般不会在JS里操作这些敏感Cookie的,对于一些敏感的Cookie我们采用HttpOnly,对于一些需要在应用程序中用JS操作的cookie我们就不予设置,这样就保障了Cookie信息的安全也保证了应用。

如何绕过?

利用html5的CORS特性绕过httponly限制,但是能不能打到cookie,好像是不能,只能实现会话劫持

参考文章:http://www.th7.cn/web/html-css/201703/219374.shtml

参考文章:https://www.oschina.net/translate/xss-gaining-access-to-httponly-cookie

参考文章:https://www.freebuf.com/articles/web/129384.html

  • 2
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值