SSRF 与 XXE 攻击原理及利用

SSRF 与 XXE

*SSRF详解

1.思维导图:

在这里插入图片描述

2.基本原理

1. 什么是SSRF?

SSRF:服务器请求伪造,是一种由攻击者构造,通过服务端发起请求的安全漏洞。

2. SSRF的成因:

大都是由于服务端提供了从其他服务器应用获取数据的功能,且没有对目标地址做过滤与限制。比如从指定URL地址获取网页文本内容,加载指定地址的图片,文档,等等。
在这里插入图片描述

比如说:
我们要访问www.a.com网站,那么输入URL后,向A服务器发送请求,服务器处理后返回用户响应。
如果我们此时在URL输入www.a.com/xxx.php?image=www.b.com/1.jpg
那么a网站就会向b网站所属的服务器获取1.jpg。
如果我们将www.b.com换为与A服务器相连的内网服务器地址,如果存在该内网地址,那么服务器就会返回1xx,2xx类的状态码,不存在则可能返回404。
所以,SSRF漏洞就是通过篡改获取资源的请求发送给服务器,因为服务器并没有检验这个请求是否合法,于是攻击者就可以使用服务器A的身份来访问其它(内网)服务器的资源了。

3. SSRF的作用:

1、使服务端访问相应的网址
2、使服务端去访问自己所处内网的一些指纹文件来判断是否存在相应的cms
3、可以使用file、dict、gopher[11]、ftp协议进行请求访问相应的文件
4、攻击内网web应用(可以向内部任意主机的任意端口发送精心构造的数据包{payload})
5、攻击内网应用程序(利用跨协议通信技术)
6、判断内网主机是否存活:方法是访问看是否有端口开放
7、DOS攻击(请求大文件,始终保持连接keep-alive always)

4. 漏洞常见形式:

由原理可以推出,一切从外部调用资源的参数都可能存在SSRF漏洞。
• 通过URL地址分享、分享网页或图片内容,即网站要通过远程访问到图片/网页地址。(本地上传是没有ssrf的)
• 通过URL地址加载或下载图片
• 转码:通过URL地址把原地址的网页内容调整为适应手机大小
• 在线翻译:通过URL地址翻译对应文本内容。比如某度。
• 未公开的api实现:通过api(应用程序接口)获取远程地址xml文件来加载内容。

5.验证方法:

1)因为SSRF漏洞是让服务器发送请求的安全漏洞,所以我们就可以通过抓包分析发送的请求是否是由服务器的发送的,从而来判断是否存在SSRF漏洞。
2)在页面源码中查找访问的资源地址 ,如果该资源地址类型为
ww w.xxx.com/xxx.php?image=(地址)的就可能存在SSRF漏洞。

3.漏洞攻击

  1. 对外网,服务器所在内网、本地进行端口扫描(可以使用爆破的方法进行)
  2. 对内网web进行指纹识别:链接: link.
  3. 漏洞利用(探测到框架等,利用漏洞进行相应攻击)
  4. 内网探针:
    各个协议调用探针:http(可以用来查看端口等),file(本地文件读取协议),dict(探测内网系统端口是否开放),ftp(可以直接显示对方ftp中的数据),gopher
    比如在可以上传网络图片的网站搜索:hppt://127.0.0.1 可能出现一定的内网域名
    在这里插入图片描述

另附脚本于各个协议的支持关系:
在这里插入图片描述

4. SSRF过滤绕过方法

  1. 一些程序员会通过URL参数形行正则匹配的方式过滤掉内网ip
    此时可以使用改编IP写法的方式绕过:
    例如192.168.0.1:
    8进制格式:0300.0250.0.1
    16进制格式:0xC0.0xA8.0.1
    10进制整数格式:3232235521
    16进制整数格式:0xC0A80001

  2. 利用解析URL出现的问题
    当后端程序对URL进行解析,对解析出的host地址进行过滤。可能会出现对URL参数解析不当,导致绕过过滤,就如思维导图中:http://A.com@x.x.x.x
    原理:当后端程序通过不正确的正则表达式(比如将http之后到com为止的字符内容,也就是A.COM,认为是访问请求的host地址时)对上述URL的内容进行解析的时候,很有可能会认为访问URL的host为A.COM,而实际上这个URL所请求的内容都是x.x.x.x上的内容。

总之,就是利用服务器对资源发送请求时对url的验证纰漏实现服务器的绕过

5. 防御方法

• 过滤返回信息,验证远程服务器对请求的相应,如果 Web 应用获取某种已知类型的文件,那么可以在把返回结果展示给用户之前先验证返回信息是否符合标准
• 统一错误信息,避免用户根据错误信息来判断远程服务器端口状态
• 限制请求的端口为 HTTP 常用端口,比如 80、443、8080、8090
• 黑名单内网 IP,避免应用被用来获取内网数据,攻击内网
• 禁用不需要的协议。仅仅允许 HTTP 和 HTTPS 请求。可以防止类似于file://、gopher://和ftp://等引起的问题(防止利用非http协议)
• 禁止302跳转。(这个是防止利用302跳转)

*XXE详解

1.概念

  1. XXE:xml的漏洞注入全称(XML External Entity injection)
    XXE漏洞发生在应用程序解析XML输入时没有禁止外部实体加载,导致可加载恶意外部文件,造成文件读取,命令执行、内网端口扫描、攻击内网网站等危害。
    由于是xml的注入漏洞那么要想知道知道证明利用xxe就要了解xml

  2. XML:传输和存储数据格式类型
    XML被设计为传输和存储数据,XML文档结构包括XML声明、DTD文档类型定义、文档元素、其焦点是数据的内容,其把数据从HTML分离,是独立与软件和硬件的信息传输工具。
    简单来说XML就是用来储存从HTML分离出来的数据的一种格式类型。

所以说,XXE攻击就是在XML文档结构中写入恶意代码,利用应用程序解析XML实现特定目的。

2.危害

  1. 消息/资产收集
  2. 文件读取
  3. RCE执行
  4. 内网攻击
  5. DOS攻击

3.检测

检测原理:
只要网站存在以xml格式传输数据就可以尝试利用
比如可以通过抓包查看数据传输形式是不是xml(通过包格式或者content-type判断)如果时xml就可以使用xxe对网站进行消息收集或其它攻击。XXE的检测分两种情况,已知原码时的白盒,未知原码的黑河。

• 白盒
  1. 利用函数及可控变量查找
  2. 传输和存储数据格式类型
• 黑盒

1.人工:

A. 数据格式类型判断:< user>test< /user>
< pass>Mikasa< /pass>
比如:
在这里插入图片描述

B. Content-type值判断:(证明数据包在传输时使用的是xml格式,符合xxe漏洞的纯在条件)
*test/xml
*application/xml
C. 更改Content-type值看返回(通过更改数据包实现xxe漏洞的盲猜)

2.全自动工具
xxeinjector

4.利用

利用:数据包爬行目录时,发现数据包有符合xml数据传输的地方,在传输数据的地方填上payload就可以利用了。简单来说就是理解并修改payload,把payload写进数据包里再发送。

• 输出形式

  1. 有回显:
    利用协议:
    Http,File,各脚本支持协议
  2. 无回显:外部引用-反向链接配合

• 过滤绕过

  1. 协议玩法
  2. 外部引用
  3. 编码UTF-16BE

自动化XXE注入脚本工具:XXEinjector
XXEinjector: 下载.

5.一些payload

最常用的读文件:

//读取d盘中的test.txt文件
<?xml version = "1.0"?>
<!DOCTYPE ANY [
<!ENTITY xxe SYSTEM "file:///d://test.txt"> 
]>
<x>&xxe;</x>

内网探针,端口扫描(判断内网是否开放,端口是否存在)
在这里插入图片描述引入外部实体dtd(类似远程文件包含)
在这里插入图片描述
其它payload: link.

6.防御与修复

  1. 禁用外部实体引用
  2. 过滤关键字
  3. WAF产品
  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值