【湃哒星说安全】攻防演练中数据库信息收集方法记录

0x00 背景

在攻防演练或红队评估项目中,项目成果往往依赖红队队员综合渗透技能和优良的自动化工具。信息收集贯穿整个项目生命周期,如果攻方通过获取互联网侧应用服务器权限,并以此为跳板突破目标单位互联网侧防线,进而对应用服务器数据库进行信息收集的意义非常重大。攻方可从数据库管理程序中获取数据库系统访问IP地址、用户名、口令等敏感信息,对以上信息进行分析,可大大提高渗透效率。

0x01 Navicat 数据库凭据获取

Navicat是一套快速、可靠并价格相当便宜的数据库管理工具,可以管理到MySQL、Oracle、PostgreSQL、SQLite 及 SQL Server等数据库,专为简化数据库的管理及降低系统管理成本而设。它的设计符合数据库管理员、开发人员及中小企业的需要。Navicat 是以直觉化的图形用户界面而建的,让你可以以安全并且简单的方式创建、组织、访问并共用信息。

Navicat 凭据存储位置

安装Navicat Premium(版本 11.2.7),创建一个MySQL数据库连接,用户名:root 口令:admin123!@#。同时利用RegFromApp监控navicat.exe进程对注册表的更改,结果如下图所示:

通过对RegFromApp监控结果进行分析可以观察数据库IP地址、端口、数据库用户名和数据库口令等存储信息。Navicat MySQL数据库连接凭据存储位置如下:

# 计算机\HKEY_CURRENT_USER\Software\PremiumSoft\Navicat\Servers\Info-01

进而通过Navicat 程序创建不同数据库连接,同时观察注册表变化可得出不同数据库连接用户名口令在注册表中的存储位置,如下表所示:

数据库类型

注册表中存储位置

MySQL

[HKEY_CURRENT_USER\Software\PremiumSoft\Navicat\Servers\`连接名`]

PostgreSQL

[HKEY_CURRENT_USER\Software\PremiumSoft\NavicatPG\Servers\`连接名`]

Oracle

[HKEY_CURRENT_USER\Software\PremiumSoft\NavicatOra\Servers\`连接名`]

SQLite

[HKEY_CURRENT_USER\Software\PremiumSoft\NavicatSQLite\Servers\`连接名`]

SQL Server

[HKEY_CURRENT_USER\Software\PremiumSoft\NavicatMSSQL\Servers\`连接名`]

MariaDB

[HKEY_CURRENT_USER\Software\PremiumSoft\NavicatMARIADB\Servers\`连接名`]

Navicat 口令加密原理

Navicat 对明文密码进行加密运算时需用到固定加密秘钥(3DC5CA39),假设明文口令是"admin123!@#",首先程序会使用SHA-1散列算法将固定加密秘密进行处理得到:

# 3DC5CA39 -> SHA-1 = 42CEB271A5E458B74AEA93947922354391873340

将其存入数组中,如下所示:

unsigned char Key[20] = { 0x42, 0xCE, 0xB2, 0x71, 0xA5, 0xE4, 0x58, 0xB7,0x4A, 0xEA, 0x93, 0x94, 0x79, 0x22, 0x35, 0x43, 0x91, 0x87, 0x33, 0x40 };

使用0xFF填充一个8字节长的数据块,然后使用Blowfish算法加密以上数据块,得到结果如下:

# 42CEB271A5E458B74AEA93947922354391873340 ->Blowfish = D9C7C3C8870D64BD

unsigned char IV[8] = { 0xD9, 0xC7, 0xC3, 0xC8, 0x87, 0x0D, 0x64, 0xBD };

随后Navicat 程序将输入的明文密码前八位取出,进行如下运算:

#  "admin123!@#" -> 取出前八位 = "admin123"

#  "admin123" XOR "D9C7C3C8870D64BD" -> "B8A3AEA1E93C568E"

#  "B8A3AEA1E93C568E" -> Blowfish  encrypt_block = "7EAA549760822DA9"

然后对剩下字符进行重复运算,过程如下:

#  "D9C7C3C8870D64BD" XOR "7EAA549760822DA9" -> "A76D975FE78F4914"

#  "A76D975FE78F4914" -> Blowfish  encrypt_block = "9CA9FBA9AF4C12E3"

#  "admin123!@#" -> 取出后三位 = "!@#"

#  "!@#" XOR "9CA9FBA9AF4C12E3" -> "BDE9D8"

将得出的密文进行拼接,结果如下:

#  "admin123" -> "7EAA549760822DA9"

#  "!@#" -> "BDE9D8"

#  "admin123!@#" -> "7EAA549760822DA9BDE9D8"

Navicat 密文解密原理

假设密文口令是"7EAA549760822DA9BDE9D8",固定密钥为3DC5CA39,首先程序会使用SHA-1散列算法将固定加密秘密进行处理得到:

# 3DC5CA39 -> SHA-1 = 42CEB271A5E458B74AEA93947922354391873340

将其存入数组中,如下所示:

unsigned char Key[20] = { 0x42, 0xCE, 0xB2, 0x71, 0xA5, 0xE4, 0x58, 0xB7,0x4A, 0xEA, 0x93, 0x94, 0x79, 0x22, 0x35, 0x43, 0x91, 0x87, 0x33, 0x40 };

使用0xFF填充一个8字节长的数据块,然后使用Blowfish算法加密以上数据块,得到结果如下:

# 42CEB271A5E458B74AEA93947922354391873340 ->Blowfish = D9C7C3C8870D64BD

unsigned char IV[8] = { 0xD9, 0xC7, 0xC3, 0xC8, 0x87, 0x0D, 0x64, 0xBD };

随后Navicat 程序将输入的密文密码前十六个字符,进行如下运算:

#  "7EAA549760822DA9BDE9D8" -> 取出前十六个字符 = "7EAA549760822DA9"

#  "7EAA549760822DA9" -> Blowfish  decrypt_block = "B8A3AEA1E93C568E"

#  "B8A3AEA1E93C568E" XOR  "D9C7C3C8870D64BD" -> = "61646D696E313233"

#  "7EAA549760822DA9" -> "admin123"

最后将剩余的六个字符进行运算,过程如下:

#  "D9C7C3C8870D64BD" XOR  "7EAA549760822DA9" -> = "A76D975FE78F4914"

#  "A76D975FE78F4914" -> Blowfish encrypt_block = "9CA9FBA9AF4C12E3"

#  "BDE9D8" XOR  "9CA9FBA9AF4C12E3" -> =  "!@#"

最终解密结果如下:

#  "7EAA549760822DA9" -> "admin123"

#  "BDE9D8"  ->  "!@#"

#  "7EAA549760822DA9BDE9D8" - > "admin123!@#"

测试环境演示

渗透测试过程中在内网中获取服务器权限后会对该服务器进行信息收集,如果该服务器安装Navicat程序可利用以上方法获取注册表中保存的数据库连接信息,渗透测试工程师获取该连接信息后可对数据库进行敏感信息收集进而推进测试进度。

测试环境

服务器:Linux 、Windows Server

数据库:MySQL、Microsoft SQL Server、Oracle

测试工具:DatabaseShow.exe

# DatabaseShow在已公开的工具基础上添加测试连接可用性功能,获取到数据库连接信息后对判断其是否可用并返回相应数据库版本权限等信息。如果可用返回的Status字段包含数据库版本信息,如果不可用返回Status为False。

0x02 常见JAVA框架数据库用户名口令获取

Tomcat

Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器。一般数据库配置信息位于main/webapp/META-INF/context.xml文件中,不推荐在server.xml中进行配置,而是在context.xml中进行独立的配置。因为 server.xml 是不可动态重加载的资源,服务器一旦启动了以后,要修改这个文件,就得重启服务器才能重新加载。而 context.xml 文件则不然, tomcat 服务器会定时去扫描这个文件。一旦发现文件被修改(时间戳改变了),就会自动重新加载这个文件,而不需要重启服务器 。

# MySQL

username="root"

password="password"

driverClassName="com.mysql.jdbc.Driver"

url="jdbc:mysql://192.168.3.133:3306/preg-1.5.4?autoReconnect=true"

# SQL Server

username="sa"

password="password"

driverClassName="com.microsoft.sqlserver.jdbc.SQLServerDriver"

url="jdbc:sqlserver://192.168.3.133:1433;DatabaseName=APP"

# Oracle

username="username"

password="password"

driverClassName="oracle.jdbc.driver.OracleDriver"

url="jdbc:oracle:thin:@192.168.3.133:1521:APP"

# PostgreSQL

username="username"

password="password"

driverClassName="org.postgresql.Driver"

url="jdbc:postgresql://192.138.3.133:5432/mydb"

0x03 常见PHP框架数据库用户名口令获取

ThinkPHP

ThinkPHP是开源,免费,快捷简单的面向对象轻量级的开发PHP框架,ThinkPHP 3.2 框架中数据库配置文件位于Application/Home/Conf/config.php,如下所示:

# 数据库配置

'DB_TYPE'   => 'mysql', // 数据库类型 目前的数据库包括Mysql、SqlServer、PgSQL、Sqlite、Oracle、Ibase、Mongo,PDO

'DB_HOST'   => '192.168.3.133', // 服务器地址

'DB_NAME'   => 'thinkphp', // 数据库名

'DB_USER'   => 'root', // 用户名

'DB_PWD'    => 'password', // 密码

'DB_PORT'   => 3306, // 端口

'DB_PREFIX' => 'think_', // 数据库表前缀

'DB_CHARSET'=> 'utf8', // 字符集

'DB_DEBUG'  =>  TRUE, // 数据库调试模式 开启后可以记录SQL日志 3.2.3新增

Codeigniter

CodeIgniter有一个配置文件用来保存数据库配置(用户名、密码、数据库名等),这个配置文件位于 application/config/database.php。配置存放在一个多维数组里,原型如下:

# MySQL

$db['db']['hostname'] = '192.168.3.133';

$db['db']['port'] = '3306';

$db['db']['username'] = 'username';

$db['db']['password'] = 'password';

$db['db']['database'] = 'app';

$db['db']['dbdriver'] = 'mysqli';

# SQLite

$db['db']['hostname'] = '192.168.3.133';

$db['db']['username'] = 'username';

$db['db']['password'] = 'password';

$db['db']['database'] = './application/database/geonamesSQLite.db';

$db['db']['dbdriver'] = 'SQLite3';

# PostgreSQL

$db['postgre']['hostname'] = '192.168.3.133';

$db['postgre']['port']     = '5432';

$db['postgre']['username'] = 'postgres';

$db['postgre']['password'] = 'password!';

$db['postgre']['database'] = 'app';

$db['postgre']['dbdriver'] = 'postgre';

# Oracle

$tnsname = '(DESCRIPTION =(ADDRESS_LIST =(ADDRESS = (PROTOCOL = TCP)(HOST = ORAAS005)(PORT = 1521))(ADDRESS = (PROTOCOL = TCP)(HOST = ORAAS024)(PORT = 1521))(LOAD_BALANCE= yes ))(CONNECT_DATA =(SERVICE_NAME = davoprd)(SERVER = DEDICATED)(FAILOVER_MODE =  (TYPE = SELECT) (METHOD = BASIC) (RETRIES = 180) (DELAY = 5))))';

$db['oracle']['hostname'] = $tnsname;

$db['oracle']['username'] = 'username';

$db['oracle']['password'] = 'PassWord!';

$db['oracle']['database'] = '';

$db['oracle']['dbdriver'] = 'oci8';

Laravel 

Laravel 能使用原生 SQL、流畅的查询构造器和Eloquent ORM在各种数据库后台与数据库进行非常简单的交互。当前 Laravel 支持四种数库:MySQL、PostgreSQL、SQLite、SQL Server。数据库的配置文件放置在config/database.php 文件中。

# SQLite 'sqlite' => [ 'driver' => 'sqlite', 'database' => env('DB_DATABASE', database_path('database.sqlite')), 'prefix' => '', ]

# MySQL

'mysql' => [

'driver' => 'mysql',

'host' => env('DB_HOST', '192.168.3.133'),

'port' => env('DB_PORT', '3306'),

'database' => env('DB_DATABASE', 'root'),

'username' => env('DB_USERNAME', 'password'),

'password' => env('DB_PASSWORD', ''),

'unix_socket' => env('DB_SOCKET', ''),

'charset' => 'utf8mb4',

'collation' => 'utf8mb4_unicode_ci',

'prefix' => '',

'strict' => true,

'engine' => null,

]

# SQL Server

'sqlsrv' => [

'driver' => 'sqlsrv',

'host' => env('DB_HOST', '192.168.3.133'),

'port' => env('DB_PORT', '1433'),

'database' => env('DB_DATABASE', 'sa'),

'username' => env('DB_USERNAME', 'password'),

'password' => env('DB_PASSWORD', ''),

'charset' => 'utf8',

'prefix' => '',

]

# PostgreSQL

'pgsql' => [

'driver' => 'pgsql',

'host' => env('DB_HOST', '192.168.3.133'),

'port' => env('DB_PORT', '5432'),

'database' => env('DB_DATABASE', 'admin'),

'username' => env('DB_USERNAME', 'password'),

'password' => env('DB_PASSWORD', ''),

'charset' => 'utf8',

'prefix' => '',

'schema' => 'public',

'sslmode' => 'prefer',

]

参考文章

https://github.com/DoubleLabyrinth/how-does-navicat-encrypt-password

https://www.anquanke.com/post/id/193511

http://codeigniter.org.cn/user_guide/database/configuration.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/64214.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

日常安全运营工作的一些思考

0x0 安全运营的背景 安全运营是以企业安全能力成熟度为基础,运用适当的安全技术和管理手段整合人、技术、流程,持续降低企业安全风险的综合能力。在最近几年安全运营这个岗位出现之前,大部分的企事业单位都是由IT运维部门的少数几个工程师承担…

账号安全总结-业务安全测试实操(27)

电子邮件账号泄露事件 电子邮箱业务基于计算机和通信网的信息传递业务,利用电信号传递和存储信息,为用户传送电子信函、文件数字传真、图像和数字化语音等各类型的信息。电子邮件最大的特点是,人们可以在任何地方、任何时间收、发信件,解决了时空的限制,大大提高了工作效…

安全回顾总结

目录 一、xss反射型漏洞复现二、dns过程解析过程dns查找方法域名解析记录 三、状态码四、https五、扩展1、弹窗函数2、iframe3、from表单 一、xss反射型漏洞复现 观察源码,可以看出源码中通过get传参到变量xss,并将一些特殊符号过滤了,则后续…

使用OBS-Studio软件推流直播教程,支持RTMP及RTSP两种协议

文章目录 一、基于RTMP协议的推流直播二、基于RTSP协议的推流直播 一、基于RTMP协议的推流直播 首先需要手动搭建RTMP流服务器,搭建过程可以借鉴我的另外一篇文章 传送门 的第六章节。 打开OBS软件,新建 场景->新建 来源。 在控件位置有个设置&…

直播虚拟背景怎么弄?这几种虚拟直播工具很好用

在直播时使用虚拟直播背景可以为直播带来多种有益效果。首先,它可以帮助主播提高职业形象,使其更专业、更吸引人。其次,虚拟直播背景可以提高直播节目的观感和沉浸感,使观众更容易集中注意力。此外,它也可以为直播增添…

AI元宇宙虚拟无人直播系统 不出镜不露脸的直播方式如何实现 含操作教程分享

随着互联网的不断发展,直播行业也逐渐成为了一种全新的社交形式和文化现象。直播节目的种类繁多,包括音乐、舞蹈、游戏、绘画、教育等各个方面。除了正常的直播外,一些特别的直播形式也在不断出现,比如“不出镜不露脸”的虚拟直播…

虚拟主播合成视频使用教程

至从老罗转直播带货后,整个直播行业都掀起波涛汹涌。在去年2年是直播和自媒体视频的元年,很多人赚的盆满钵满。今天小猿从技术角度带大家用虚拟主播科技力量成就你的自媒体视频。在过去一段时间,自媒体视频人做得好的都是有特色存在&#xff…

虚拟主播软件有哪些?哪家的虚拟软件比较好用?

随着技术的不断发展,你们有没有发现最近开始有很多个虚拟主播开始在各个平台上直播了?这些主播从哪里来呢?我抱着好奇心研究了一段时间,结果发现大部分虚拟主播其实是借用了一些虚拟软件来把自己虚拟化,这样即使不用自…

【敲级实用】:某小伙写了一个的办公脚本后~变精神了~

文章目录 📯小哔哔✏️注册有道智云✏️咋滴调用?✏️使用前的小操作✏️源代码 专栏Python零基础入门篇🔥Python网络蜘蛛🔥Python数据分析Django基础入门宝典🔥小玩意儿🔥Web前端学习tkinter学习笔记Excel…

技术揭秘 | 阿里云EMR StarRocks 线上发布会预约开启

简介:2022年5月11日14:00,阿里云EMR StarRocks 产品线上发布会重磅开启,精彩不容错过! 阿里云EMR-StarRocks 是 StarRocks 授权阿里云的一款新一代开源OLAP产品,致力于构建极速统一分析体验,满足…

老码农眼中的大模型(LLM)

即便全力奔跑,也不一定能跟上时代的步伐。但如果失去了学习的动力,很可能会被时代淘汰。而且,当时代淘汰我们的时候,往往不会有任何预警。基于大模型的 ChatGPT 给我们带来了极大的震撼,那么什么是大模型呢&#xff1f…

YOLO-YOLOV5训练自己模型过程记录

目录 注意:本文为记录,非教程一、配置yaml文件:1、创建了gesture_image.yaml文件:2、添加配置需要参量: 二、修改train.py接收参数函数parse_opt()的默认值三、训练:四、数据增强:1、格式转换&a…

在互联网,摸爬滚打了几年,我悟了。面对如今经济形势,普通打工人如何应对?

我是HullQin,公众号线下聚会游戏的作者(欢迎关注公众号,发送加微信,交个朋友),转发本文前需获得作者HullQin授权。我独立开发了《联机桌游合集》,是个网页,可以很方便的跟朋友联机玩…

感受湖人的光辉岁月

湖人总冠军已经不是一个口号,Go, Lakerrrrrs!!! 老詹带队,4年之内必拿总冠军!!这个腾讯做的视频做的很好,水平很高。 视频地址:http://gatesma.cn/myfile/laker.mp4

湖人难得的一场胜利

今天出差在路上点开第一节,发现湖人大比分落后于公牛队,我以为这场比赛湖人又要送温暖了,要交代了。 image 没曾想湖人最后拿下了比赛!但相信很多湖蜜或者詹姆斯球迷,不仅想看到湖人赢球,更想看到詹姆斯开怀…

湖人不敌灰熊,已经被两连败!

北京时间2月26日消息,湖人客场105-110不敌灰熊,湖人遭遇2连败,而灰熊4连败就此被终结。 湖人上一场败给了鹈鹕,湖人上一场防守非常不到位经常出现漏防的出现。被鹈鹕穿空子上篮拿分,而且每次进攻非常有效果&#xff0c…

湖人总冠军,快来抢注NBA球队球星的.fans域名

要说今日话题之最 非“湖人总冠军”莫属 卷席微博、朋友圈各大社交平台 许久未有的NBA热血激情又回来了! 北京时间10月12日上午, 詹姆斯带领洛杉矶湖人队 以106:93击败迈阿密热火队 时隔十年再得NBA总冠军! 本场比赛中 詹姆斯更是拿下…

马里夫计算机安全,突发!湖人引援成功!考辛斯生涯凉凉?

原标题:突发!湖人引援成功!考辛斯生涯凉凉? 交易截止日至今 是人是鬼都在秀 只有湖人在挨揍 佩林卡生涯至今 第一次遭遇灾荒 导致湖人颗粒无收 再不拿出点干货 阿姨的AJ就要停供了 不好意思 是这样的 事情突发 进展神速 活塞宣布和…

机器学习预测nba_通过机器学习预测2020年NBA季后赛支架

机器学习预测nba Paul the Octopus was a short-lived (26 January 2008–26 October 2010) cephalopod kept at the Sea Life Centre in Oberhausen, Germany, who became instantly famous because of his alleged ability to predict the results of FIFA World Cup footbal…

(十七)Mybatis自关联查询一对多查询

注:代码已托管在GitHub上,地址是:https://github.com/Damaer/Mybatis-Learning ,项目是mybatis-13-oneself-one2many,需要自取,需要配置maven环境以及mysql环境(sql语句在resource下的test.sql中)&#xff…