XSS漏洞
XSS漏洞
xxshh分类及原理
跨站脚本攻击XSS(最全最细致的靶场实战)_xss靶场-CSDN博客
它允许恶意用户将代码注入网页,其他用户在浏览网页时会受到影响,恶意用户利用XSS代码攻击成功后,可能得到很高的权限、私密网页内容、会话和cookie等各种内容。
黑盒XSS手工分析:
- 页面中显示的数据找可控的(有些是隐藏的)。
- 利用可控的地方发送JS代码看执行情况。
- 成功执行即XSS,不成功则分析显示的输出。
- 分析为什么不能执行(实体化、关键字被删除等)。
反射型XSS
攻击者构造一个恶意链接,诱导用户传播和打开 。发出请求时,XSS代码出现在URL中,作为输入提交到服务器端,服务器端解析后响应,XSS代码随响应内容一起传回给浏览器,最后浏览器解析执行XSS代码。这个过程像一次反射,所以称反射型XSS。
劫持流量实现恶意跳转:
|
那么所访问的网站就会被跳转到百度的首页。早在2011年新浪就曾爆出过严重的xss漏洞,导致大量用户自动关注某个微博号并自动转发某条微博。
真实的XSS攻击语句,需要考虑输入和输出的格式。
输入可能会有过滤,输出可能会有其他符号的拼接造成攻击语句执行失败。如下图:
注意标签闭合,可以参考这篇文章:https://www.freebuf.com/articles/web/340080.html
存储型XSS
存储型XSS和反射型XSS的差别仅在于,提交的代码会存储在服务器端(数据库、内存、文件系统等),下次请求目标页面时不用再提交XSS代码。最典型的例子就是留言板XSS,用户提交一条包含XSS代码的留言存储到数据库,目标用户查看留言板时,那些留言就会从数据库中加载出来并显示,于是触发了XSS攻击。
DOM型XSS
DOM型XSS - FreeBuf网络安全行业门户
不与后台服务器产生数据交互,是一种通过DOM操作前端代码输出的时候产生的问题,大部分属于反射型。
DOM就是一个树状的模型,你可以编写Javascript代码根据DOM一层一层的节点,去遍历/获取/修改对应的节点,对象,值。
[!NOTE]
可能触发DOM型XSS的属性:
document.referer属性
window.name属性
location属性
innerHTML属性
document.write属性
XSS-Lab(安全防御-XSSFilter)
如何绕过过滤触发JS代码?
无过滤
标签闭合
查看源码,发现<
和>
被HTML字符实体化。
输入的payload被赋值给value且未被实体化,可以考虑闭合value的参数值,和sql注入原理相同。
|
- 单引号闭合并添加事件
发现value也被实体化。
利用onfocus事件绕过:
|
然后再点击输入框触发onfocus事件即可。
- 双引号闭合并添加事件
发现依旧实体化,且value删除了<
和>
。
同样添加onfocus事件可以绕过,注意闭合方式是双引号。
|
- 事件关键字过滤,利用其他标签调用,双引号闭合
实体化,script被添加下划线,onfocus同样也被添加下划线。
因此我们可以换一个标签来执行js代码:
href属性的意思是 当标签a被点击的时候,就会触发执行转跳,上面是转跳到一个网站,我们还可以触发执行一段js代码:
|
之后点击xss,触发a标签href属性即可。
6. 大小写绕过
发现href也被添加下划线:
查看服务器端源码:
str_replace不区分大小写,所以可以利用大小写绕过:
|
- 双写绕过
发现关键字被删除:
利用双写绕过:
|
- unicode编码绕过
输入的值被插入到<a>
标签的href
属性值中:
href属性自动解析Unicode编码:
- 内容检测
发现不合法,猜测这里可能对url地址做了匹配。只有包含正常的url地址才能添加到href属性值。
查看源码:
因此要向传入的值里面添加http://并用注释符注释掉否则会执行不了无法弹窗:
|
此外还存在其他过滤,要将javascript:alert()
进行unicode编码。
- 输入数据被隐藏
查看源码,发现还有其他传参方法,且过滤了<
和>
:
因为这里输入框被隐藏了,需要添加type=”text”,构造payload:
|
成功执行XSS:
- http头传值
猜测第四个名为t_ref的input标签是http头referer的参数。
BurpSuite抓包,添加Referer头,payload为:
|