滲透測試重新打底(1)--論Reconnaissance (偵查)


Posted by kahatrix on 2023-09-22

做Scanning 做Enumeration必須要做得很完整。才能夠知道說這一個系統這一個目標哪裡有漏洞。

Shell可能不是非常的穩定。比如說要是你今天的目標伺服器,他的Service只要重開,你的這個好不容易得到的Shell可能會不見。或者是說,對方目標的電腦重開,或者是你自己的VPN,或是網路一不穩,網路斷了,那你這個好不容易得到的東西會不見。所以他在這個圈圈上面寫的Maintaining Access,通常是指Persistence。比如說可以透過Registry,或者是一些CrownJob的方法,來確保說即便我今天失去了對目標的連線,我還是有方法可以讓他自己乖乖的連回來,但OSCP會比較少去接觸到這部分。

如何分辨Domain Controller:

比如說你今天打進了一台Web Server,然後這一台Web Server他是Domain內的。這個時候當你拿到了權限,你可以用工具像是PowerView或者是BloodHunt這種工具來去跑。那這些工具他能夠幫助你用圖像的方法,來告訴你說哪一台是Domain Controller,以及他有哪些方法可以一步一步的做Lateral Movement(橫向移動)。

PowerSploit/PowerView.ps1 at master · PowerShellMafia/PowerSploit · GitHub

PowerView.ps1有非常多非常多的function,那它寫這些function的目的呢,是為了讓你能夠在一個Windows Active Directory的環境下面去做reconnaissance、去做scanning,或者可以做一些基本的enumeration。那當然它這個有執行條件,你必須要在domain的某台機器上面跑PowerShell,才能夠成功的import(匯入)。匯入後可偵查一下你所在的這個network跟你的這個AD的環境。

bloodhount這個工具有兩個部分,一個就是大家現在看到的這個圖像的介面。它是一個圖形介面,基本上就是會顯示出這一個Network環境內的,我們叫Object。可能使用者是一個Object,然後Group也是一個Object,像右邊這個是Administrator(user),那這邊左邊的這個是Domain Admin Group。Bloodhount它會很清楚的用圖像告訴你說這一個User,屬於這一個Group。

像剛剛提到的PowerView,雖然它能夠在Terminal上面讓你有很多的Function去使用,那比如說你可以去找一些Domain Admin,或者是一些高權限的Group。但是它畢竟是你一個口令它一個動作,在你真正想要了解全部的Network面貌的時候會非常的麻煩。

為什麼? 是因為一個Domain之內它會有非常非常多的Group,有一些Group它可能是其他Group的Subgroup(它可能是它的Member),所以你在做Enumeration的時候會非常的麻煩。那這也是Bloodhound的好處之一。

aaa

可以在這個工具內的Analysis這個Tab之內(如上圖),我直接點一個說我要找到所有的Path,那這個Path呢,我的目的是要到Domain Admin,你在做紅隊演練之中,它是一個價值相當高的一個目標。

Bloodhound這樣的圖像介面之中當你跑了它所搭配的一個PowerShell的一個Script,它會生成一個Zip檔案,那這個Zip檔案也就是要丟到這一個圖像介面的東西,把這個Zip檔案丟進去它會自動幫你解壓縮自動幫你分析,基本上是完成所有的工作。那身為攻擊者你就可以透過直接看這種圖像介面,它會告訴你一個步驟一個步驟,然後你就可以到你的目標了。

你如果今天你拿到了目標的一個反彈的shell,但是在目標內你想要做更多的事情,如果今天你只會用metasploit,又或是如果你今天想要編輯一個檔案一個文字檔案,如果你只會用subline,不會用其他的工具的話那其實你是會綁手綁腳的。所以思路只有一個,但是工具有很多種,所以有時候你不能只會用單一工具。

Netcat是一個在每一個Linux作業系統中你都會擁有的一個小工具,只要跟網路相連的你就可以使用Netcat這個工具。它UDP跟TCP兩個都支援。Netcat非常的方便沒有錯,但是我們真正常用的用法並不是很多,我們大概只會用它來做三件事情,第一是TCP port的測試或者是UTP port的測試(通常是TCP)。因為UDP你如果開啟跟關閉比較不好用這個Netcat來判斷。

先講這個port測試好了。那Netcat的它的binary名稱是nc,那你可以直接用nc -h可以叫出它的help message,那可以看到這邊功能真的非常非常多。那這邊簡單介紹一下第一個TCP port的測試。語法非常簡單,假設今天我們要測試我們自家的port,比如說我們拿8888,那這個port我非常肯定在這台Kali Linux是沒有開的,那當我按下去之後它會告訴你說connection refused

那這就是代表說這個port它並沒有打開,所以你不管用什麼工具去去想要做scan基本上是一樣的。那所以這也是你在做reconnaissance的步驟之一,也就是我們會需要知道說它的port有沒有打開,只是我們通常不會用這個Netcat從port 1到65535這樣一個一個port慢慢試。但是如果你今天要針對其中一個port你想要多去了解,你想要確認它有沒有開,那Netcat算是非常好的一個非常好的小工具。

如果今天port有開的狀況下,比如說這邊先開一個python的web server,就假定它是我們的目標。我們想知道8080是什麼東西或者是它有沒有開。

我們的攻擊的kali machine也是一樣,nc 127.0.0.1,然後搭配port number 8080,可以看到我按了enter之後,它並沒有任何的反應它只是好像在那等,因為我們已經知道了它是web server,所以我們就可以隨便的給它一個message:

輸入之後首先我們可以看到error code 400,就是什麼都沒有:

那在我們這個http server的部分,可以看到說這邊有127.0.0.1,然後有這樣的一個request,但是它是一個bad request:

講這麼多目的就是要說Netcat可以測試單一的port有沒有開,以及你可以嘗試打一些其他的message,就不一定是要像這個example之中這個get message。

比如說這是我的目標,可以用Netcat然後搭配像是nlvp打開這個port number,這樣的話它就是告訴主機說,我今天要開這個port 4444,然後放任何人都可以連進來。

那這個時候我們就可以用Kali machine嘗試著去連上來,那語法也是一樣:

那這樣子就可以在victim看到說,這兩個已經就這樣很順利的連起來了。

在攻擊機打ABCD:

在victim也會出現:

既然Netcat可以這樣子讓兩個端點之間做連結,那Netcat也同時支援檔案的傳送,比如說我在victim可以看到我透過ls-la目前是沒有任何的檔案。

那如果今天我想要把一個檔案從Kali傳到這個Victim,那我們是可以透過Netcat做檔案的傳送。那它的語法到前面基本上都一樣,但是到後面,我們會接一個大於的符號,告訴我們的terminal說等一下,有人連上來的話把他的資訊寫入。

比如說我這邊隨便叫一個shell.php檔案,那這邊要注意這邊是大於,然後再接一個檔案的名稱:

Enter之後可以看到它又開始了listening mode:

那這個時候,我們可以回到攻擊機,現在這邊有許多的檔案,假設我們想要把這一個shell.php寫入到我們的目標端的話,那我們的commend其實也是很簡單。

前面這邊都一樣,接著你的目標的主機的IP以及目標的Port Number,那這邊要有一個小於的符號,那緊接著是你檔案的名稱:

那在輸入的同時可以看到說這邊有一個connect過來了:

輸入完之後你可以在攻擊機或victim端按ctrl+c,之後回到victim端來看一下,可以看到這邊已經就有一個34 byte的shell.php被寫入到victim端。

接下來要講一下這個功能,也就是執行shell的功能。這個功能非常的重要,因為會在各位未來的lab上面應該都會非常常遇到。

那我們今天想要告訴連上來的人說,連上來之後你可以在我這個地方執行任何你想要執行的檔案,或者是程式,那這個要怎麼做?

前面基本上都一樣,也是nc -lvp,搭配一個port number,但是之後你要接一個-e,然後以及你想要執行的檔案名稱。那在這個地方,我希望有人可以執行這個binbash(/bin/sh)。

在攻擊端其實也是一樣,我們只要做一個都是一樣的這個command,nc 127.0.0.1然後4444,輸入之後,我們可以在攻擊端可以下command,比如說像是ID:

同理我們可以反過來做。比如說如果我們想要讓victim自己連回來,那應該怎麼做?

那其實也是一樣。我們的攻擊端可以直接下一個nc -nlvp 4444,我們等待著victim端的reverse shell連回來。

那我們在右邊的victim端,我們已知他可能有某些漏洞。那我們要用比如說像Netcat這樣的工具連回來給我們一個reverse shell。

輸入之後,可以看到這邊有connect:

我們一樣可以用ID或是whoami:

下一個工具是tcpdump。tcpdump其實跟WireShark很像,他是一個算是網路封包的一個工具。假設你有了remote code execution,你可以在你的目標執行任何的comment、做任何的事情,你也可以有Netcat,你也可以執行它,但是當你發現你的reverse shell回不來的時候,可以使用tcpdump,來確認你的payload是否執行成功,可以當作是一個debug的目的。

可以做一個小測試,我們可以ping 127.0.0.1,開始ping之後,那回到victim就可以看到它針對我的localhost的這個interface有去成功。

假設一下今天你的interface是你的TUM 0,可能是連到你的OSCP的box的lab裡面,你可以用這個方法來確認說,應該說搭配你的可能像是remote code execution。先確認說你是不是真的可以ping到我自己的主機。

tcpdump不只那麼簡單,我們也可以拿來針對他去debug不同的,比如說針對某一個port。比如說我今天我的interface,我要我的TUN 1,我想要多看一點資訊,我可以用-VNN,那這些都是使用的方法。那今天要側錄TCP port 22,那這也當然是一個側錄的方法。那port 22是SSH,我們可以透過這個tcpdump,來側錄我們想要監看的port,有時候可以確認說攻擊有沒有成功的送出去。

有些比較新潮的機器沒有裝wget,那這個時候我們還有一個工具可以使用,叫做curl。用法跟wget非常的相像,只是如果你要使用curl去下載一個檔案的話,必須要加參數。

一個例子,當我輸入之後,他這邊只會顯現他的內容,並不會把他存下來:

如果要存下來的話,要配上-o以及你的檔案名稱。比如說我這邊,就把他寫叫shell1.php,再1s -la看一下,檔案就會下來了。

這邊test.txt檔案他有三行。如果今天想要做比如說code review,或者是想要去找一些資料,去找關鍵字的話,可以用grep輸入你要的關鍵字。比如說我要的關鍵字是cat,那他就會只出現含有你關鍵字的那一行資料,並且他會幫你mark起來。

cat test.txt | grep cat

第二個grep的功能他是-r,比如說今天想要找在一個資料夾內,他可能是裝有config或者是一些php code的資料夾的web folder,你想要在裡面尋找是不是有user password、或者是說有沒有像是comment這種比較敏感的字樣,這時候可以用grep-r然後來找你要的字樣。

如果找cmd的話,可以看到我們剛剛所透過file transfer的shell1.php,或者是shell.php這兩個檔案,裡面都有cmd這三個字:

grep這個工具非常的好用,就是在於他可以尋找在資料夾以及子資料夾之內,去尋找你要的關鍵字,他的use case比較像如果你今天拿到一個shell,然後他的這個shell的位置剛好在他web folder裡面,你可以嘗試去找說他有沒有一些default的login,或是default的password,以及他會不會記錄著他用的可能是library啊或者是一些其他更多的資料,那這都是做enumeration非常重要的步驟。

pipe他是一個非常好用,就是他可以讓你銜接不同的指令。比如說我剛剛cat了一個test.txt 的檔案,那我pipe的作用就是把這些output,當作是下一個檔案的input,那我們下一個指令就是grep。就是一個把output給redirect進到下一個command的input。

我們做reconnaissance的時候,是被動式的資料收集,不會跟目標網站有任何的聯繫,而是我們使用已經公開在網路上的資料針對我們的目標去了解一下,比如說像是facebook、instagram、或者是linking。那我們可以看一下說他們有哪些員工在這個公司上班,然後再使用facebook去找一下,來了解我們的目標。

第一個就是google。那google hacking大家可能有聽過,那大家可能會好奇說google hacking不就是google嗎?

google他有很多的filter,看你會不會用。比如說第一個filter叫做AND,顧名思義,我這邊輸入一個比如說台灣AND資安然後ANDptt.cc,這樣子的搜尋方式他的網頁內容一定會出現台灣也會出現資安也會出現ptt.cc。

那當然也可以把這個台灣跟資安變成or的形式,那他就可能只出現資安或者是台灣這兩個可能,可能只有一個也可能都有,那以及一定會出現的ptt.cc。

Harvester也是一個資料收集工具,他可以根據比如說像是google你指定他的搜尋引擎。那來整理一下,你google得到什麼東西呢? 比如說像是email帳號或是公司的domain或者是子domain或者是一些IP address。

掃描部分結果:

那在這個地方可以看到有發現了兩個email,以及可以看到他的url,應該說叫做subdomain,像是有bbs或者是pcman或是term,就是網站版的terminal的ptt。那後面也都會接著他的ip address。










Related Posts

[ 筆記 ] React 01 - Component、JSX 語法、事件機制

[ 筆記 ] React 01 - Component、JSX 語法、事件機制

hit the road (final project) 雜七雜八心得

hit the road (final project) 雜七雜八心得

Git 筆記 - 將該次 commit 變動的檔案打包壓縮

Git 筆記 - 將該次 commit 變動的檔案打包壓縮


Comments