一、XSS漏洞原理
XSS属于客户端攻击,受害者最终是用户,但特别要注意的是网站管理人员也属于用户之一。这就意味着XSS可以进行“服务端”攻击,因为管理员要比普通用户的权限大得多,一般管理员都可以对网站进行文件管理,数据管理等操作,而攻击者一般也是靠管理员身份作为“跳板”进行实施攻击。
XSS的重点不在于跨站点,而在于脚本的执行。那么XSS的原理是:
恶意攻击者在web页面中会插入一些恶意的script代码。当用户浏览该页面的时候,那么嵌入到web页面中script代码会执行,因此会达到恶意攻击用户的目的。那么XSS攻击最主要有如下分类:反射型、存储型、及 DOM-based型。 反射性和DOM-baseed型可以归类为非持久性XSS攻击。存储型可以归类为持久性XSS攻击。
1.XSS漏洞出现的原因
程序对输入和输出的控制不够严格,导致"精心构造“的脚本输入后,在输到前端时被浏览器当作有效代码解析执行从而产生危害。
2.XSS的分类
1、反射型XSS或不持久型XSS(中危)
2、储存型XSS 或持久型 XSS(高危)
3、DOM XSS
3.测试方法
1、工具扫描:APPscan、AWVS
2、手工测试:Burpsuite、firefox(hackbar)、XSSER XSSF
使用手工检测Web应用程序是否存在XSS漏洞时,最重要的是考虑那里有输入,输入的数据在什么地方输出。在进行手工检测XSS时,人毕竟不像软件那样不知疲惫,所以一定要选择有特殊意义的字符,这样可以快速测试是否存在XSS。
(1)在目标站点上找到输入点,比如查询接口,留言板等;
(2)输入一组"特殊字符+唯一识别字符",点击提交后,查看返回的源码,是否有做对应的处理;
(3)通过搜索定位到唯一字符,结合唯一字符前后语法确认是否可以构造执行js的条件(构造闭合);提交构造的脚本代码,看是否可以成功执行,如果成功执行则说明存在XSS漏洞;
二、反射型XSS
反射型xss攻击( Reflected XSS)又称为非持久性跨站点脚本攻击,它是最常见的类型的XSS。漏洞产生的原因是攻击者注入的数据反映在响应中。一个典型的非持久性XSS包含一个带XSS攻击向量的链接( 即每次攻击需要用户的点击)。
JavaScript 是互联网上最流行的脚本语言,这门语言可用于 HTML 和 web,更可广泛用于服务器、PC、笔记本电脑、平板电脑和智能手机等设备。JavaScript 是一种轻量级的编程语言。
JavaScript 是可插入 HTML 页面的编程代码。
JavaScript 插入 HTML 页面后,可由所有的现代浏览器执行。
Javascript语法格式:
<script>
[Javascript代码]
</script>
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title></title> </head> <body> <script type="text/javascript"> alert('第一个javascript程序'); </script> </body> </html>
在XSS中常用的是以下这些标签
alert alert()方法用于显示带有一条指定消息和一个确认按钮的警告框
window.location window.location对象用于获得当前页面的地址(URL) ,并把浏览器重定向 到新的页面
location.href 返回当前显示的文档的完整URL
onload 一张页面或一幅图像完成加载
onerror 在加载文档或图像时发生错误
onchange HTML 元素改变
onclick 用户点击 HTML 元素
onmouseover 鼠标指针移动到指定的元素上时发生
onmouseout 用户从一个 HTML 元素上移开鼠标时发生
onkeydown 用户按下键盘按键
三、DOM型XSS
通过JavaScript,可以重构整个HTML文档,就是说可以添加,移除等等,对页面的某个东西进行操作时,JavaScript就需要获得对HTML文档中所有元素进行访问的入口。这个入口就是DOM,所以在DOM型的xss漏洞利用中,DOM可以看成是一个访问HTML的标准程序接口。
特征:整个过程都是在前端完成的,没有后端的参与(纯前端的操作!)
四、存储型XSS
存储型XSS是指应用程序直接将攻击者提交的恶意代码存储到服务端保存,然后永久显示在其他用户的页面上。
比较常见的就是,黑客写下一篇包含恶意JavaScript代码的博客文章,文章发表后,所有访问该博客的用户,都会在它们的浏览器中执行这段恶意的JavaScript代码.黑客把恶意的脚本保存到服务端,所以这种XSS攻击就叫做"存储型XSS"。
存储型XSS可能出现的位置:
(1)用户注册
(2)留言板
(3)上传文件的文件名处
(4)管理员可见的报错信息
(5)在线聊天框
(6)客服
(7)问题反馈区
(8)邮件信箱
理论上,见框就插。
满足存储型XSS的条件: 能够插入数据,插入的JS代码能够正常执行
存储型XSS的作用:获取Cookie,内网IP等等
JS恶意代码可以获取浏览器的Cookie,访问植入了XSS的网站,如果使用Burp抓包检查,会发现第一次访问正常页面,第二次会GET传参访问XSS平台。如果访问正常页面的时候修改Cookie,XSS是获取不到正确Cookie的。
获取Cookie之后,可以Burp抓包直接修改Cookie,登录他人账户,也可以在浏览器修改,当然,Cookie是有时效性的。
存储型XSS在SRC属于中危漏洞,在项目上属于高危漏洞,杀伤力较大。
三、XSS绕过
1.双引号,单引号
第二关
发现没有
查看源码发现有实体函数
再闭合一下
2.事件
第三关
单引号闭合发现被转义
用onclick
多了个单引号
试试onmouseover
第四关
可以看出过滤了<>
还是用事件" onmouseover="alert(1)
3.JavaScript伪协议
第五关
发现过滤是在script中加“_”,同样的方法用事件试试
发现还是过滤
使用JavaScript伪协议
"><a href=javascript:alert(1)>你好</a>
第六关
同样发现script被过滤,用上一关的方法
发现href也被过滤,这时候优先考虑简单的大小写过滤
"><a Href=javascript:alert(1)>你好</a>
双写
第七关
发现script被删除那么我们用双写
发现已经绕过,那再闭合一下就好了
"><scrscriptipt>alert(1)</scrscriptipt>
16进制实体
第八关
其中有两个注入点
发现script和伪协议都被过滤
用16进制实体将t转为J但要告诉电脑用的是16进制所以将t改为t
输入javascript:alert(1)
换行
第九关
首先发现',"无法发生闭合,说明已经被过滤且第二注入点没有输出位,查看源代码发现第二注入点必须为http://
发现还绕过了javascript那么用16进制实体进行绕过
avascript:%0dhttp://%0dalert(1)
隐藏
第十关
打开网页发现没有注入点,打开源代码发现是keyword和t_sort
在url栏上进行这两个参数的注入
发现只有t_sort有用,经测试16进制失败所以试试实体
发现还是没有弹窗但是注入进去了,是因为type="hidden"给隐藏了
输入type="text"给后面顶掉
第十一关
使用burp将Referer改为同第十关
第十二关
为user-agent头
第十三关
为cookie
操作同十一关
第十五关
本关主要考点是ng-include
注意:1、地址外面得加单引号括起来
2、不执行script里面的代码
2、所以我们可以包含一下第一关的文件
http://127.0.0.1/xss-labs/level15.php?src='https://www.freebuf.com/vuls/level1.php'
3、由于不执行script里面的代码,所以我们可以用其他方法来触发level1.php中的xss漏洞:
http://127.0.0.1/xss-labs/level15.php?src='https://www.freebuf.com/vuls/level1.php?name=<img src="x" οnerrοr=alert(1)>'
第十六关
<script>被过滤,用imag标签
发现又把空格过滤了
用url编码代替一下%0d
十七—二十关已经不支持了
4A评测 - 免责申明
本站提供的一切软件、教程和内容信息仅限用于学习和研究目的。
不得将上述内容用于商业或者非法用途,否则一切后果请用户自负。
本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑或手机中彻底删除上述内容。
如果您喜欢该程序,请支持正版,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。敬请谅解!
程序来源网络,不确保不包含木马病毒等危险内容,请在确保安全的情况下或使用虚拟机使用。
侵权违规投诉邮箱:4ablog168#gmail.com(#换成@)