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},

username</span>,<p><c:outvalue="{username}">



此时的转义规则如下:
< 转成 <
> 转成 >
& 转成 &
" 转成 "
' 转成 '

(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.
页面显示
XSS、CSRF、SSRF的概念,防御和实验_第1张图片

源码显示
XSS、CSRF、SSRF的概念,防御和实验_第2张图片

代码成功插入网页源代码
1.2
弹窗提示
XSS、CSRF、SSRF的概念,防御和实验_第3张图片

1.3click1
页面显示
XSS、CSRF、SSRF的概念,防御和实验_第4张图片

点击click1 弹窗提示
XSS、CSRF、SSRF的概念,防御和实验_第5张图片

1.4
Img 语段执行错误 执行oneeror 弹窗提示xss4
XSS、CSRF、SSRF的概念,防御和实验_第6张图片

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

XSS、CSRF、SSRF的概念,防御和实验_第7张图片

1.6自动化测试工具
1.开启phantomjs xss.js
必须在xss.js文件所在路径下打开cmd
Python-phantomjs-bin-xss
XSS、CSRF、SSRF的概念,防御和实验_第8张图片

2.开启拦截并打开火狐代理
3.DVWA提交信息
XSS、CSRF、SSRF的概念,防御和实验_第9张图片
4.burp siute拦截成功
XSS、CSRF、SSRF的概念,防御和实验_第10张图片
XSS、CSRF、SSRF的概念,防御和实验_第11张图片

5.调整配置Payloads
Payloads Type选择Extenstion-generted
然后,如下图所示,选择xss Validator
XSS、CSRF、SSRF的概念,防御和实验_第12张图片

6.配置option
XSS、CSRF、SSRF的概念,防御和实验_第13张图片

7.添加的数据位于xss validator
8.开启攻击 start attack
XSS、CSRF、SSRF的概念,防御和实验_第14张图片

(二)Medium
通过查看view source
XSS、CSRF、SSRF的概念,防御和实验_第15张图片

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

原理:浏览器不区分大小写
XSS、CSRF、SSRF的概念,防御和实验_第16张图片

2.2组合过滤条件
弹窗提示
XSS、CSRF、SSRF的概念,防御和实验_第17张图片

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

2.3使用别的便签

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

click

XSS、CSRF、SSRF的概念,防御和实验_第18张图片
XSS、CSRF、SSRF的概念,防御和实验_第19张图片

(三)High

XSS、CSRF、SSRF的概念,防御和实验_第20张图片

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

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

(四)Impossible
无法利用xss
PHP htmlspecialchars() 函数
把预定义的字符 “<” (小于)和 “>” (大于)转换为 HTML 实体:
XSS、CSRF、SSRF的概念,防御和实验_第21张图片

三.存储型xss
(一)Low
分析源代码
XSS、CSRF、SSRF的概念,防御和实验_第22张图片

Trim函数:移除字符串两侧的空白字符或其他预定义字符。(\x00,\n,\r,\,’,",\x1a)
扩展:ltrim() - 移除字符串左侧的空白字符或其他预定义字符
rtrim() - 移除字符串右侧的空白字符或其他预定义字符
XSS、CSRF、SSRF的概念,防御和实验_第23张图片

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

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

stripslashes函数过滤掉”\”

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

clock click

注:name 一栏有字符长度限制,进行抓包后修改
开启拦截后 提交数据
XSS、CSRF、SSRF的概念,防御和实验_第24张图片

观察burpsiuite
XSS、CSRF、SSRF的概念,防御和实验_第25张图片

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

点击转发
收到弹窗提示
XSS、CSRF、SSRF的概念,防御和实验_第26张图片

(二)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参数做的过滤不严格,只是替换

你可能感兴趣的:(靶场实验,安全,web)