你是否测评时常被运维给忽悠?是否觉得以下的对话耳熟?
你:您好,请问你们的主机资产有哪些,包括服务器、数据库、中间件、应用系统等。
甲:我们资产就这两台服务器,数据库什么的都这上面,我也不懂具体怎么用的,帐号密码给你自己看。
然后就看到他打开了一个excel文档,将两个服务器IP+帐号密码复制了给你,此时你明白了,这一切还得靠自己啊。
你通过了他给的信息远程登录了目标服务器,那么一起来看看具体怎么操作吧。
应用服务器
当我们远程到服务器上时候,第一步可以去查看一下有哪些端口
cmd命令行打开:netstat -ano
查看当前处于监听状态的端口有哪些,常见80、443、8080、8000、8888、8443等端口,如果看到这些端口,建议本地直接去访问一下。打开浏览器,输入 localhost:端口号
例如上述存在80、81端口
此时我们就可以对照我们等保测评系统的名称,并询问管理人员(应用是啥这个大多还是清楚的)确认是否是这个系统。那么通过这样的方式,应用服务器就可以确认是哪一台了。
同理,Linux操作系统使用 netstat -tlnp 查看
像我这里未搭建真实站点,所以访问的是一个测试页面
中间件
确认好应用服务器后,我们就可以去寻找这台服务器用的是什么中间件了。常见的中间件有IIS、Apache、Nginx、Tomcat等。
这里教个野路子方法,就是去查找 access.log 文件
一般我们使用 access 关键字去查看
这里要注意的问题是在同一台服务器上可能会存在很多的access文件的中间件,有些运维人员习惯不好,比如需要更新tomcat 的系统版本,他会下载一个新的版本,但是老版本他也不会删除,这就是为什么有时候我们去查看的时候会发现操作系统上存在多个中间件。
最简单的方式就去找最新的那个access文件,因为我们进行了站点访问,那么肯定会有日志留下。
我们右键打开文件位置即可
这里要注意,存在多个access文件的时候我们要看最新的那个,这里我们就找到了该系统使用的中间件为 Apache 2.4.39
但是Windows特有的中间件IIS是没有access这个日志文件的,如果你使用access查看没有结果,那么可以去查看 Internet 信息服务(IIS)管理器。 浏览查看后发现与目标系统一致即可确定使用IIS中间件。
同理,Linux操作系统则使用 find / -name "*access*" 命令去查找
同理进入最新的access日志目录
然后 pwd 打印当前目录,这个目录下的就是我们系统当前用的中间件,这样就肯定错不了。像这里就是使用了 tomcat 8.5.56
数据库
应用服务器找完了,接下来我们来找一找对应的数据库。既然要找数据库,那么我们就需要知道一些常见数据库的端口号是什么。
3306:MySQL数据库的默认端口。
5432:PostgreSQL数据库的默认端口。
1521:Oracle数据库的默认监听端口。
1433:Microsoft SQL Server数据库的默认监听端口。
27017:MongoDB数据库的默认监听端口。
6379:Redis数据库的默认监听端口。
5433:H2数据库的默认监听端口。
50000:IBM DB2数据库的默认监听端口。
由于应用服务器和数据库服务器肯定是存在交互的,那么他必定会有对应的端口处于连接转台,所以在Windows中,我们可以打开cmd命令行,使用 netstat -ano|findstr 端口 命令去查找
如果命令输入后无回显,则表示没有这个相关连接,有回显后查看对应的状态,如果存在 ESTABLISHED 这个状态的,那么八九不离十对应连接的IP就是数据库服务器,例如上图数据库服务器为172.17.200.13。
然后我们可以尝试连接这台数据库。
登录后发现,我并不知道这台数据库的密码怎么办呢,这里简单再教一个野路子。如果你对代码比较了解,例如PHP常见的数据库连接配置文件可能为 config.php 或 database.php
我们发现了password,然后可以尝试连接
连接成功!
另外在java中通常将数据库连接配置信息存放在 application.properties 或 application.yml 文件中,或者在服务器上的环境变量中进行配置。
在Python中,常见的数据库连接配置文件可使用类似于 config.ini 或 config.py 的文件来存放配置信息。
当然上述方法不一定实用,很多情况下配置文件里面的用户是低权限用户,并不是root权限账户,所以建议还是询问相关运维人员。另外如果运维人员习惯不好,还可能在history命令中能发现相应密码。