内网渗透&渗透中的数据库信息收集

admin 2025年3月14日23:04:15评论7 views字数 5428阅读18分5秒阅读模式

数据库信息收集是指需要通过帐号及口令直接访问数据库中的内容,特别是获取数据库中的一些有关配置的表,涉及后台登录的用户名及密码等。

1.1.1数据库客户端表查询

1.图形界面获取

navicate打开MySQL数据库中的某个数据库,然后在对象最左边可以对特定关键字进行查询,包含该关键字的表会自动显示。

内网渗透&渗透中的数据库信息收集2.SQL命令查询

(1)Mysql数据库

SELECT table_name FROM information_schema.tables WHERE table_schema = 'your_database_name' AND table_name LIKE '%sys%';

内网渗透&渗透中的数据库信息收集

(2)PostgreSQL

SELECT table_name FROM information_schema.tables WHERE table_catalog = 'your_database_name' AND table_name LIKE '%sys%';

(3)MSSQL

 SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE = 'BASE TABLE' AND TABLE_CATALOG = 'your_database_name' AND TABLE_NAME LIKE '%sys%'; 

SELECT name FROM sys.tables WHERE name LIKE '%sys%';

(4)Oracle

SELECT table_name FROM user_tables WHERE table_name LIKE '%SYS%';

(5)sqlite

SELECT name FROM sqlite_master WHERE type='table'  AND name LIKE '%sys%';

1.1.2数据库重要表信息收集

1. 获取数据库中各个表的行数

(1)MySQL

SELECT table_name, table_rows FROM information_schema.tables WHERE table_schema = 'your_database_name';

请注意,对于InnoDB表,table_rows可能不是准确的行数,因为它基于统计信息。要获得更准确的结果,可以对每个表执行 COUNT(*) 操作:

SELECT table_name, (SELECT COUNT(*)  FROM table_name) AS row_count FROM information_schema.tables WHERE table_schema = 'your_database_name';

(2)PostgreSQL

SELECT   relname AS "Table", n_live_tup AS "Rows" FROM   pg_stat_user_tables;

(3)SQL Server

SELECT     t.name AS TableName,p.rows AS RowCounts  FROM   sys.tables t

INNER JOIN   sys.partitions p ON t.object_id = p.object_id

WHERE     t.type = 'u' -- Only user tables    AND p.index_id IN (0, 1) -- Heap or clustered index

GROUP BY     t.name, p.rows;

(4)Oracle

SELECT   table_name, num_rows FROM    all_tables WHERE    owner = 'YOUR_SCHEMA_NAME';

2. 获取数据库连接帐号和密码

1 MySQL / MariaDB

用户表 mysql.user,密码字段: passwordauthentication_string (MySQL 5.7+)

查询用户及密码哈希:

SELECT user, host, authentication_string FROM mysql.user;

SELECT user, host, password FROM mysql.user;

2PostgreSQL

用户表:pg_catalog.pg_shadow,密码字段passwd,查询用户及密码哈希(需超级用户权限):

SELECT usename, passwd FROM pg_shadow;

注意默认使用 md5  scram-sha-256 哈希,需离线破解。

3Microsoft SQL Server

视图:sys.sql_logins,密码字段 password_hash,查询登录名及密码哈希:

SELECT name, password_hash FROM sys.sql_logins;

注意使用 SHA-512 加盐哈希,无法直接解密。

4Oracle Database

视图DBA_USERS,密码字段: PASSWORD (旧版本 SPARE4 (11g+),查询用户及密码哈希(需DBA权限):

SELECT username, password FROM dba_users; -- 10g及之前

SELECT name, spare4 FROM sys.user$; -- 11g+(密码哈希存储在spare4字段)

注意: 11g+ 使用 SHA-1 或 SHA-512 哈希。

3. 获取包含密码的表信息

查找字段名包含“password”,“pwd”,“pass”等关键字的列。

检查这些列的数据类型,通常是字符型(如VARCHAR)。

(1)MySQL

SELECT    TABLE_NAME,  COLUMN_NAME, DATA_TYPE  FROM   INFORMATION_SCHEMA.COLUMNS 

WHERE     TABLE_SCHEMA = 'your_database_name'     AND COLUMN_NAME LIKE '%pass%'     OR COLUMN_NAME LIKE '%pwd%';

内网渗透&渗透中的数据库信息收集

(2)PostgreSQL

对于PostgreSQL,可以使用类似的查询方法,但需要访问information_schema.columns:

SELECT     table_name, column_name, data_type FROM     information_schema.columns 

WHERE     table_catalog = 'your_database_name'    AND (column_name LIKE '%pass%' 

         OR column_name LIKE '%pwd%'     OR column_name LIKE '%password%');

(3)SQL Server

在SQL Server中,可以通过查询系统视图如sys.columns和sys.tables来获取相关信息:

SELECT     t.name AS TableName, c.name AS ColumnName,ty.name AS DataType

FROM    sys.columns c  JOIN     sys.tables t ON c.object_id = t.object_id

JOIN     sys.types ty ON c.system_type_id = ty.system_type_id

WHERE      (c.name LIKE '%pass%'  OR c.name LIKE '%pwd%'   OR c.name LIKE '%password%')

AND     t.type = 'u'; -- Only user tables

(4)Oracle

在Oracle数据库中,可以查询ALL_TAB_COLUMNS视图来查找相关字段:

SELECT 

    table_name, 

    column_name, 

    data_type 

FROM 

    all_tab_columns 

WHERE 

    owner = 'YOUR_SCHEMA_NAME'

    AND (column_name LIKE '%PASS%' 

         OR column_name LIKE '%PWD%'

         OR column_name LIKE '%PASSWORD%');

(5)SQLite

SQLite没有信息模式视图,但可以查询sqlite_master或使用.schema命令结合文本搜索工具(如grep)来查找:

# 使用命令行工具

echo "SELECT name FROM sqlite_master WHERE type='table';" | sqlite3 your_database.db | xargs -I{} grep -Ei 'pass|pwd|password' <(echo ".schema {}" | sqlite3 your_database.db)

或者直接在SQLite命令行中使用:

-- 首先列出所有表名

SELECT name FROM sqlite_master WHERE type='table';

-- 然后对每个表执行如下查询:

.schema YourTableName | grep -Ei 'pass|pwd|password';

1.1.3数据库密码信息收集

1.php配置文件

文件: config.phpdatabase.phpsettings.php.env

// MySQL 连接配置

$db_host = 'localhost';

$db_user = 'root';

$db_pass = 'Admin@123';

$db_name = 'myapp';

$conn = new mysqli($db_host, $db_user, $db_pass, $db_name);

2.ython (Django/Flask)

文件: .env, settings.py, config.yaml

典型代码 (.env):

# Django 数据库配置

DATABASE_URL=postgres://user:Passw0rd@db-host:5432/mydb

典型代码 (settings.py):

# Django settings.py

DATABASES = {

'default': {

'ENGINE': 'django.db.backends.mysql',

'NAME': 'mydb',

'USER': 'django_user',

'PASSWORD': 'Secur3P@ss!',

'HOST': 'db.internal',

'PORT': '3306',

}

}

3.Java (Spring Boot)

文件: application.properties, application.yml

1application.properties文件

spring.datasource.url=jdbc:mysql://localhost:3306/mydb

spring.datasource.username=admin

spring.datasource.password=P@ssw0rd2023

2application.yml文件

spring:

datasource:

url: jdbc:postgresql://db-prod:5432/appdb

username: appuser

password: "s3cr3t#db"

4. NET (ASP.NET)

文件: Web.config, appsettings.json

Web.config文件:

<configuration>

<connectionStrings>

<add name="MyDb" 

connectionString="Server=sqlserver;Database=ProdDB;User Id=sa;Password=Str0ngP@ss;" 

providerName="System.Data.SqlClient" />

</connectionStrings>

</configuration>

5. Node.js

文件: .env, config.js, knexfile.js

典型代码 (config.js):

module.exports = {

db: {

host: 'redis-12345.internal',

port: 6379,

password: 'redisPass123'

}

};

1.1.4数据库通用配置文件及敏感信息

1. 环境变量文件 (跨语言)

文件: .env, .env.production, .env.local

典型内容:

DB_HOST=mysql-cluster

DB_PORT=3306

DB_USER=app_user

DB_PASSWORD=C0mpl3xP@ss!

2. 容器化配置

1)文件: docker-compose.yml, kubernetes-secret.yaml

典型代码:

# docker-compose.yml(明文密码)

services:

db:

image: mysql:8.0

environment:

MYSQL_ROOT_PASSWORD: root123

2yaml文件

# Kubernetes SecretBase64编码,但易解码)

apiVersion: v1

kind: Secret

data:

db-password: U3VwZXJTZWNyZXQh

3.本地搜索

查找包含 "password" 关键字的文件

find /var/www -type f -exec grep -Hn 'password' {} ;

检查备份文件

find / -name "*.bak" -o -name "*.old" -o -name "*.swp"

原文始发于微信公众号(小兵搞安全):内网渗透&渗透中的数据库信息收集

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2025年3月14日23:04:15
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   内网渗透&渗透中的数据库信息收集https://cn-sec.com/archives/3841064.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息