XSS、CSRF、SSRF的概念,防御和实验

XSS、CSRF、SSRF的概念,防御和实验

一.概念
相同点:
XSS,CSRF,SSRF三种常见的Web服务端漏洞均是由于,服务器端对用户提供的可控数据过于信任或者过滤不严导致的。
不同点:
XSS是服务器对用户输入的数据没有进行足够的过滤,导致客户端浏览器在渲染服务器返回的html页面时,出现了预期值之外的脚本语句被执行。
CSRF(跨站请求伪造)是服务器端没有对用户提交的数据进行随机值校验,且对http请求包内的refer字段校验不严,导致攻击者可以利用用户的Cookie信息伪造用户请求发送至服务器。
SSRF(服务端请求伪造)是服务器对用户提供的可控URL过于信任,没有对攻击者提供的RUL进行地址限制和足够的检测,导致攻击者可以以此为跳板攻击内网或其他服务器。

二.防御
(一)xss
对字符实体进行转义、使用HTTP Only来禁止JavaScript读取Cookie值、输入时校验、浏览器与Web应用端采用相同的字符编码
1.HttpOnly属性
为Cookie中的关键值设置httponly属性,大部分XSS(跨站脚本攻击)的目的都是通过浏览器的同源策略,来获取用户Cookie,从而冒充用户登陆系统的。
如果为Cookie中用于用户认证的关键值设置httponly属性,浏览器将会禁止js通过同源策略访问cookie中设有httponly属性的信息,因此以劫持用户认证cookie为目的XSS攻击将会失败。
但很明显,只为cookie中的值设置Httponly是不够的,因为XSS攻击并不是只能获取用户COOKIE,它还可以窃取用户浏览器信息,模拟用户身份执行操作等等
2.对输入和URL参数进行过滤(白名单和黑名单)
3.对输出进行编码
在输出数据之前对潜在的威胁的字符进行编码、转义是防御XSS攻击十分有效的措施。如果使用好的话,理论上是可以防御住所有的XSS攻击的。对所有要动态输出到页面的内容,通通进行相关的编码和转义。当然转义是按照其输出的上下文环境来决定如何转义的。
(1)作为body文本输出,作为html标签的属性输出:
比如: u s e r n a m e < / s p a n > , < p > < c : o u t v a l u e = " {username}</span>, <p><c:out value=" username</span>,<p><c:outvalue="{username}"></c:out>



此时的转义规则如下:
< 转成 &lt;
> 转成 &gt;
& 转成 &amp;
" 转成 &quot;
' 转成 &#39

(2)javascript事件

除了上面的那些转义之外,还要附加上下面的转义:

\ 转成 \\
/ 转成 \/
; 转成 ;(全角;)

(3)URL属性

如果 <script>, <style>, <imt> 等标签的 src 和 href 属性值为动态内容,那么要确保这些url没有执行恶意连接。
确保:href 和 src 的值必须以 http://开头,白名单方式;不能有10进制和16进制编码字符

(二)cfrs
1.Referer标识当前请求的来源页面,浏览器访问时除了自动带上Cookie还会自动带上Referer,所以服务端可以检测Referer头是否本网站页面来决定是否响应请求。
2.token就是服务端返回给客户端类似sessionid那样一长串的类值(长是为了防暴力猜解)。csrf依赖于浏览器该问链接时自动对应网站的cookie带上,token不放cookie(一般form表单加个hidden属性的input标签来存放)csrf就没法获取token,这样我们就可以通过检测发送过来的数据包中是否有正确的token值来决定是否响应请求。
(三)ssrf
1.限制协议为HTTP、HTTPS
2.不用限制302重定向
3.设置URL白名单或者限制内网IP

三.实验
(一)Xss
1.DVWA
一.Xss介绍
(一)xss形成原因
由于web应用程序对用户的输入过滤不严,通过html注入篡改网页,插入恶意脚本,从而在用户浏览网页时,控制用户浏览器的一种攻击。
(二)Xss攻击
通常指黑客通过 HTML 注入 篡改网页,插入恶意脚本,从而在用户浏览网页时,控制用户浏览器的一种攻击行为。
(三)Xss类型
1.反射型(非持久型)
只是简单地把用户输入的数据反射给浏览器,简单来说,黑客往往需要去诱使用户点击一个恶意链接,才能攻击成功。
2.存储型
将用户输入的数据存储在服务器端,每次用户访问都会被执行js脚本。
3.DOM型
基于文档对象模型Document Objeet Model,DOM)的一种漏洞。DOM是一个与平台、编程语言无关的接口,它允许程序或脚本动态地访问和更新文档内容、结构和样式,处理后的结果能够成为显示页面的一部分。DOM中有很多对象,其中一些是用户可以操纵的,如uRI,location,refelTer等。客户端的脚本程序可以通过DOM动态地检查和修改页面内容,它不依赖于提交数据到服务器端,而从客户端获得DOM中的数据在本地执行,如果DOM中的数据没有经过严格确认,就会产生DOM—based XSS漏洞。
(四)应用场景
1.利用xss获得cookie1
2.重定向
3.钓鱼网站
4.DDOS
二.反射型xss
(一)Low
1.
页面显示
在这里插入图片描述

源码显示
在这里插入图片描述

代码成功插入网页源代码
1.2<body οnlοad=alert(‘xss2’)>
弹窗提示
在这里插入图片描述

1.3<a href=’’ οnclick=alert(‘xss3’)>click1
页面显示
在这里插入图片描述

点击click1 弹窗提示
在这里插入图片描述

1.4<img src=http://192.168.10.128/a.jpg οnerrοr=alert(‘xss4’)>
Img 语段执行错误 执行oneeror 弹窗提示xss4
在这里插入图片描述

1.5kali的地址为192.1618.106.129,那么靶机上插入的hook js脚本为:

在这里插入图片描述

1.6自动化测试工具
1.开启phantomjs xss.js
必须在xss.js文件所在路径下打开cmd
Python-phantomjs-bin-xss
在这里插入图片描述

2.开启拦截并打开火狐代理
3.DVWA提交信息
在这里插入图片描述
4.burp siute拦截成功
在这里插入图片描述
在这里插入图片描述

5.调整配置Payloads
Payloads Type选择Extenstion-generted
然后,如下图所示,选择xss Validator
在这里插入图片描述

6.配置option
在这里插入图片描述

7.添加的数据位于xss validator
8.开启攻击 start attack
在这里插入图片描述

(二)Medium
通过查看view source
在这里插入图片描述

可以看到使用str_replace函数只对参数进行了简单的替换,过滤

原理:浏览器不区分大小写
在这里插入图片描述

2.2组合过滤条件
<scr
弹窗提示
在这里插入图片描述

源码:
在这里插入图片描述

2.3使用别的便签

![在这里插入图片描述](https://img-blog.csdnimg.cn/20200922145419657.png#pic_center)

<a href=’’ οnclick=alert(‘xss’)>click

在这里插入图片描述
在这里插入图片描述

(三)High

在这里插入图片描述

使用了preg_replace正则表达式函数,对参数进行过滤
查看源码可以看到对

click click ![在这里插入图片描述](https://img-blog.csdnimg.cn/20200922145436470.png#pic_center)

(四)Impossible
无法利用xss
PHP htmlspecialchars() 函数
把预定义的字符 “<” (小于)和 “>” (大于)转换为 HTML 实体:
在这里插入图片描述

三.存储型xss
(一)Low
分析源代码
在这里插入图片描述

Trim函数:移除字符串两侧的空白字符或其他预定义字符。(\x00,\n,\r,\,’,",\x1a)
扩展:ltrim() - 移除字符串左侧的空白字符或其他预定义字符
rtrim() - 移除字符串右侧的空白字符或其他预定义字符
在这里插入图片描述

mysql_real_escape_string函数:转义SQL语句中的特殊字符 不转译%和_
函数移除字符串两侧的空白字符或其他预定义字符,预定义字符包括\0、\t、\n、\x0B、\r以及空格
例子:
mysql_real_escape_string()

<?Php $item = "Zak's and Derick's Laptop" ; $escaped_item = mysql_real_escape_string ( $item ); printf ( "Escaped string: %s\n" , $escaped_item ); ?>

以上例子将产生如下输出:
Escaped string: Zak’s and Derick’s Laptop
在这里插入图片描述

stripslashes函数过滤掉”\”

测试:(大体和反射型相同)
在message栏中测试:

clock click

注:name 一栏有字符长度限制,进行抓包后修改
开启拦截后 提交数据
在这里插入图片描述

观察burpsiuite
在这里插入图片描述

更改NAME字段
在这里插入图片描述

点击转发
收到弹窗提示
在这里插入图片描述

(二)Medium
在这里插入图片描述

分析源代码,我们可以看到对 m e s s a g e 参 数 m e d i u m 级 比 l o w 级 多 了 2 个 函 数 , 做 了 很 严 格 的 过 滤 ( 进 行 h t m l 实 体 转 义 以 及 转 义 S Q L 语 句 中 使 用 的 特 殊 字 符 , 杜 绝 了 对 message参数medium级比low级多了2个函数,做了很严格的过滤(进行html实体转义以及转义SQL语句中使用的特殊字符,杜绝了对 messagemediumlow2(htmlSQL使message关于xss的利用),但对 n a m e 参 数 做 的 过 滤 不 严 格 , 只 是 替 换 < s c r i p t > 以 及 转 义 S Q L 语 句 中 使 用 的 特 殊 字 符 , 可 以 使 用 别 的 h t m l 标 签 对 name参数做的过滤不严格,只是替换<script>以及转义SQL语句中使用的特殊字符,可以使用别的html标签对 name,<script>SQL使,使htmlname参数的防护进行绕过。
strip_tags()函数剥去字符串中的HTML、XML以及PHP的标签,但允许使用标签。
addslashes()函数返回在预定义字符(单引号、双引号、反斜杠、NULL)之前添加反斜杠的字符串。
方式大体相同,分为以下几种
2.1.双写绕过
Burpsuite抓包改name参数为:
<sc

2.2.大小写混淆绕过
Burpsuite抓包改name参数为:

:

2.3.使用非 script 标签的 xss payload:
例如:img标签:
Burpsuite抓包改name参数为:

以上抓包修改数据Forward后,均成功弹窗:
(三)High
在这里插入图片描述

分析源代码
可以看到相比较中级而言,高级使用正则表达式对$nam参数多了对

3.2 Burpsuite抓包改name参数为: click 3.3 Burpsuite抓包改name参数为: (四)Impossible 4.impossible 无法利用xss,对message和name参数都进行了实体转义 四.DOM型xss (一)Low 分析代码 后端代码 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20200922145558937.png#pic_center)

页面源代码
在这里插入图片描述

分析发现选择下拉列表内容,其值会赋给default再添加到url的末尾,再将其传给option标签的value结点,由于没有任何过滤,我们输入xss语句即可触发
测试语句
在页面顶端输入url:

即可观察到弹窗
在这里插入图片描述

(二)Medium
分析代码
在这里插入图片描述

array_key_exists() 函数检查某个数组中是否存在指定的键名,如果键名存在则返回 true,如果键名不存在则返回 false。
stripos() 函数查找字符串在另一字符串中第一次出现的位置(不区分大小写)
header() 函数向客户端发送原始的 HTTP 报头
页面源代码没变化
综上可以发现该级别过滤了 script ,但是没有过滤其他危险字段,可以使用img的onerror绕过该防护
测试语句

注: 不明确 ,有可能是替换原来的script?

(三)High
分析代码
页面源代码依旧没有区别,增加后端代码
在这里插入图片描述

High级别发现使用白名单,只允许 传的 default值 为 French English German Spanish 其中一个,可以通过在名单中的一项添加注释
注:由于 form表单提交的数据 想经过JS 过滤 所以注释部分的javascript 代码 不会被传到服务器端(也就符合了白名单的要求)
测试语句
default=English#

(四)Ipossible
无解

2.Pikachu
一.反射型xss(get)
二.反射型xss(post)
三.存储型xss
四.DOM型xss
五.DOM型xss-x
六.xss之盲打
七.Xss之过滤
八.Xss之htmlspecialchars
九.Xss之href输出
十.Xss之Js输出

3.XSS漏洞类型区分
反射型:
特征:输入框内输入什么就导出什么
预防措施:使用htmlentities()函数-实体转义
注:弹窗并没有什么实际的意义,但通过它我们知道输入javascript代码是可以被执行的,当我们输入一些其他函数,比如document.cookie就可以成功盗取用户的cookie信息,或者读取用户浏览器信息等,为我们进一步深入攻击做铺垫。

(二)Csrf
1.Csrf(get)
(1)开启拦截 修改并提交信息

(2)拦截到get数据包

(3)修改数据 重新发送

2.Csrf(post)
和get型差不多制作一个表单
通过 csrf Poc修改

实验部分后续补充
网络信息安全—ploto

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值