定义:
SSRF是服务端请求伪造,指攻击者向服务端发送包含恶意链接的请求,借由服务端访问url,以获取受保护的资源
字面意思理解就是伪造服务端请求发起攻击,借由服务器为跳板攻击目标系统,一般攻击的目标都是内网
成因:
服务端提供了从其他服务器获取数据的功能且未对地址和协议等做过滤和限制
危害:
- 扫描内网开放端口
- 读取主机文件
- 攻击内网应用
SSRF常用协议;
- HTTP(S):探测内网主机是否存活,探测端口和服务
- file:在有回显的情况下,利用file协议读取任意文件的内容
- dict:dict是基于查询相应的 TCP 协议,服务端监听端口2628。用于探测端口,攻击内网应用
- gopher:gopher是互联网上使用分布型的文件搜集获取网络协议,是ssrf利用中最强大的一个协议,俗称万能协议。可用 于反弹shell。gopher支持GET、POST请求,可先截取请求包,构造符合 gopher协议的请求
可能出现的地方:
1.社交分享功能:获取超链接的标题等内容进行显示
2.转码服务:通过URL地址把原地址的网页内容调优使其适合手机屏幕浏览
3.在线翻译:给网址翻译对应网页的内容
4.图片加载/下载:例如富文本编辑器中的点击下载图片到本地;通过URL地址加载或下载图片
5.图片/文章收藏功能:主要其会取URL地址中title以及文本的内容作为显示以求一个好的用具体验
6.未公开的api实现以及其他扩展调用URL的功能
7.可以利用google 语法加上这些关键字去寻找SSRF漏洞
一些的url中的关键字:
share、
wap、
url、
link、
src、
source、
target、
u、
3g、
display、
sourceURl、
imageURL、domain……
漏洞验证
1.排除法:浏览器查看源代码是否在本地进行请求
比如资源地址类型为:http://www.xxx.com/a.php?image=(地址)可能存在ssrf漏洞
2.抓包分析发送的请求是不是服务器发送的,若不是客户端请求则可能是ssrf,接着寻找http服务的内网地址
--从漏洞平台的历史漏洞中寻找存在web应用的内网地址
--通过二级域名暴力猜解工具模糊猜测内网地址
3.dnslog等工具进行测试,看是否被访问
--可在盲打后台用例中将当前准备请求的url和参数编码成base64,这样盲打后台解码后就知道是哪台机器哪个cgi触发的请求
4.直接返回的Banner、title、content等信息
5.留意bool型SSRF
利用方式:
1.让服务端去访问相应的网址
2.让服务端去访问自己所处内网的一些指纹文件来判断是否存在相应的cms
3.可以使用file、dict、gopher、ftp协议进行请求访问相应的文件
4.攻击内网web应用(可以向内部任意主机的任意端口发送精心构造的数据包{payload})
5.攻击内网应用程序(利用跨协议通信技术)
6.判断内网主机是否存活:方法是访问看是否有端口开放
7.DoS攻击(请求大文件,始终保持连接keep-alive always)
绕过技巧
1.http://[email protected]/与
http://www.baidu.com/请求时是相同的
2.各种IP地址的进制转换
点分十进制IP地址:http://216.58.199.78
八进制IP地址:http://0330.0072.0307.0116(将每个十进制数字转换为八进制)
十六进制IP地址:http://0xD83AC74E或者http://0xD8.0x3A.0xC7.0x4E(将每个十进制数字转换为十六进制)
整数或DWORD IP地址:http://3627730766(将十六进制IP转换为整数
3.URL跳转绕过:http://www.hackersb.cn/redirect.php?url=http://192.168.0.1/
4.短网址绕过 http://t.cn/RwbLKDx(网上有很多短网址工具站)
5.xip.io来绕过:http://xxx.192.168.0.1.xip.io/ == 192.168.0.1 (xxx 任意)
指向任意ip的域名:xip.io(37signals开发实现的定制DNS服务)
6.限制了子网段,可以加:80端口绕过。http://tieba.baidu.com/f/commit/share/openShareApi?url=http://10.42.7.78:80
7.探测内网域名,或者将自己的域名解析到内网ip
8.例如 http://10.153.138.81/ts.php , 修复时容易出现的获取host时以/分割来确定host,
但这样可以用 http://[email protected]/ 绕过
9.点分割符号替换
在浏览器中可以使用不同的分割符号来代替域名中的.分割,可以使用。、。、.来代替:
10.本地回环的其他表现形式
127.0.0.1,通常被称为本地回环地址(Loopback Address),指本机的虚拟接口,一些表示方法如下(ipv6的地址使用http访问需要加[]):
http://127.0.0.1
http://localhost
http://127.255.255.254 //127网段是保留地址,127开头的是用于本地环回测试的地址
127.0.0.1 - 127.255.255.254
http://[::1]
http://[::ffff:7f00:1]
http://[::ffff:127.0.0.1] //IPv4-mapped
IPv6地址格式是::FFFF:IPv4-address,例如::FFFF:192.168.1.1,运行 在双协议栈设备上的IPv6应用利用IPv4-mapped IPv6地址可以和基于IPv4的应用互 通。
http://127.1
http://127.0.1
http://0:80
//0.0.0.0代表本网络
漏洞修复
1.禁止302跳转
2.过滤返回信息,验证远程服务器对请求的响应是比较容易的方法。如果web应用是去获取某一种类型的文件。那么在把返回结果展示给用户之前先验证返回的信息是否符合标准。
3.禁用不需要的协议,仅仅允许http和https请求。可以防止类似于file://, gopher://, ftp:// 等引起的问题
4.设置URL白名单或者限制内网IP(使用gethostbyname()判断是否为内网IP)
5.限制请求的端口为http常用的端口,比如 80、443、8080、8090
6.统一错误信息,避免用户可以根据错误信息来判断远端服务器的端口状态
漏洞利用小技巧
crontab -l 显示当前计划任务
crontab -r 清除当前计划任务
端口转发工具 socat
在Apache配置文件中写入下面的内容,就可以将jpg文件当做PHP文件来执行
AddType application/x-httpd-php .jpg
相关函数
parse_url:解析url,返回其组成部分
标签:http,请求,SSRF,url,端口,地址,内网 From: https://www.cnblogs.com/ykxykx/p/16654911.html