Skip to main content

重要文件

在成功的利用之后,我们已经拿到了服务器本地的访问了,根据服务器配置的不同,此时我们可能已经是最高权限了,也可能是低权限用户。无论如何,我们需要珍惜现有的访问,对本地信息进行详尽的侦查,包括但不局限于网络配置、本地文件、用户和群组、分配的权限、系统版本、存储的凭证等。

这一节,我们来讲述需要关注的一些敏感文件。如果我们还不是最高权限,可能无法访问到所有的敏感文件,那么提权势必会有所帮助。主机上的敏感文件除了操作系统自带的 (例如 shadow,SAM数据库等),还有第三方应用的,例如Web应用,VncViewer, Putty,KeePass等。对于第三方应用,我们不做过多延伸,因为这类的应用是无穷无尽的,我们着重关注于系统自带的重要文件。


Windows

用户目录

Windows 用户目录下有这些目录:桌面、文档、下载、收藏等。尤其是对于有用户登录的个人主机,用户目录往往包含个人文件、办公文件,我们能从中收获丰富的信息。此外,我们甚至可能在用户目录中找到 SSH 密钥对。

image.png

Web应用

可以从配置文件中提取到其他组件的凭证,访问应用源代码找到可能硬编码的凭证。例如,我们在 Web02 主机上找到了 .Net 应用连接到 MSSQL 数据库的帐号密码。

image.png

PowerShell 历史

我们可以在 C:\Users\用户\AppData\Roaming\Microsoft\Windows\PowerShell\PSReadLine 中找到该用户的 PowerShell 历史。

image.png

SAM 数据库

C:\Windows\System32\config 目录下,有着 SAM 数据库文件。至于 SAM 数据库为何物,以及如何利用,我们在后面章节介绍。简单地说,SAM数据库保存着本地用户的密码哈希值。

image.png

Linux

/etc 目录

/etc/passwd

查看所有用户,有的时候 passwd 会存放用户的密码哈希

image.png

/etc/shadow

默认需要提升特权查看。如果可读,可以尝试破解帐号密码的哈希值

image.png

/etc/crontab

如果我们对计划任务中的条目具有控制权,或者对计划任务文件本身具有控制权,可以协助我们提权。我们也可以通过非默认的计划任务文件观察到自定义的文件或者脚本

image.png

/etc/krb5.keytab

加入域的Linux主机的主机账号的keytab文件。默认需要提升特权,如果可读,可以得到主机账号的NTLM或者密钥值,从而枚举域内信息。文件本身难以阅读,但我们可以通过工具 https://github.com/sosdave/KeyTabExtract/blob/master/keytabextract.py 来解析:

image.png

root@web01:/home/john@prod.raven-med.local# python3 ext.py  /etc/krb5.keytab 
[*] RC4-HMAC Encryption detected. Will attempt to extract NTLM hash.
[*] AES256-CTS-HMAC-SHA1 key found. Will attempt hash extraction.
[*] AES128-CTS-HMAC-SHA1 hash discovered. Will attempt hash extraction.
[+] Keytab File successfully imported.
	REALM : PROD.RAVEN-MED.LOCAL
	SERVICE PRINCIPAL : WEB01$/
	NTLM HASH : 32c6125ea4dd7bad17678b3fcf11c6f8
	AES-256 HASH : 6688494b7f01d8e290115890934e8cf7183caa0750669c32c7a943ed9f391fc3
	AES-128 HASH : 7371d20faf69e07a6000a401be641ea1

image.png

keytab 文件

这里指域用户的keytab文件,类似于krb5.keytab,域用户的keytab文件包含了用户的NTLM哈希,我们可以用来枚举域内信息或者用于哈希传递。

root@web01:/home/john@prod.raven-med.local# python3 ext.py  john.keytab 
[*] RC4-HMAC Encryption detected. Will attempt to extract NTLM hash.
[!] Unable to identify any AES256-CTS-HMAC-SHA1 hashes.
[!] Unable to identify any AES128-CTS-HMAC-SHA1 hashes.
[+] Keytab File successfully imported.
	REALM : prod.raven-med.local
	SERVICE PRINCIPAL : john/
	NTLM HASH : f442e0cc228d1a0cb4621ebce433bcdc

image.png

ccache 文件

默认存在于 /tmp 目录下,ccache 文件保存了 Linux 域主机的 Kerberos 凭证。如果有任何在线的域用户会话,我们可以在 /tmp 中看到 ccache 文件。默认情况下,只有用户自身以及 root 用户才能读取,因此当我们提升至 root 权限后,可以对 ccache 文件进行窃取。

image.png

image.png


home 目录

Bash 历史

有可能会包含明文凭证,例如该用户运行过 psql,mysql 等可以在命令行中提供明文密码的程序。默认情况下只有用户自己以及 root 用户能查看。并且可以将 bash 历史重定向到 /dev/null 来实现隐藏 bash 历史。

image.png

SSH 文件夹

SSH 私钥默认只有用户自身或者 root 用户可以访问。在提权之后,或者权限配置不当的情况下,我们可以窃取用户的 ssh 私钥。

image.png

Web 应用根目录

可以从配置文件中提取到其他组件的凭证、访问应用源代码找到可能硬编码的凭证。由于 Web01 的 PHP 应用并没有用数据库,因此没有数据库的凭证。

image.png

而 NodeJS 应用的后端数据库是 MongoDB,但 Web01 的 MongoDB 没有设置认证。

image.png

对于 Wordpress 等常见的 web 应用,特定的文件中会包含数据库的连接凭证。

ubuntu@blog:/var/www/html/wordpress$ cat wp-config.php  | grep -v '*'
<?php

define( 'DB_NAME', 'wordpress' );

define( 'DB_USER', 'wordpress' );

define( 'DB_PASSWORD', 'Passw0rdw0rdpr3ss' );

define( 'DB_HOST', 'localhost' );

define( 'DB_CHARSET', 'utf8' );

define( 'DB_COLLATE', '' );

define( 'AUTH_KEY',         'put your unique phrase here' );
define( 'SECURE_AUTH_KEY',  'put your unique phrase here' );
define( 'LOGGED_IN_KEY',    'put your unique phrase here' );
define( 'NONCE_KEY',        'put your unique phrase here' );
define( 'AUTH_SALT',        'put your unique phrase here' );
define( 'SECURE_AUTH_SALT', 'put your unique phrase here' );
define( 'LOGGED_IN_SALT',   'put your unique phrase here' );
define( 'NONCE_SALT',       'put your unique phrase here' );

$table_prefix = 'wp_';

define( 'WP_DEBUG', false );





if ( ! defined( 'ABSPATH' ) ) {
        define( 'ABSPATH', __DIR__ . '/' );
}

require_once ABSPATH . 'wp-settings.php';

其他

非上述目录下的 sh、txt、xml、yml 等类型的文本文件可能会包含凭证或者其他重要信息

image.png

image.png