本文作者:晚風(fēng),根據(jù)其之前的文章數(shù)量獎勵 50 元,以資鼓勵,希望可以繼續(xù)加油,再接再厲。
的最大優(yōu)勢在于以 .NET 框架為基礎(chǔ)。 .NET 框架在腳本領(lǐng)域幾乎是無所不能,這是一個優(yōu)點(diǎn),也有可能成為一個方便黑客攻擊的一個強(qiáng)大的便利。
在滲透測試中,在正常的傳輸通道被禁止時,我們時常會劍走偏鋒,通過一些特殊的方法來進(jìn)行文件的傳輸。這篇文章將會描述使用 下載文件的三種方法,并評估它們的優(yōu)缺點(diǎn)。
關(guān)于其他在 windows 系統(tǒng)下通過命令行上傳文件的姿勢,請查看前文:
測試環(huán)境
本次測試的目的在于展示執(zhí)行時間和性能的區(qū)別。
測試環(huán)境主要是 Windows 10(x64) 的 5 和下載速度約為 3mb/s 的無線網(wǎng)絡(luò)連接。
我將從我自己的服務(wù)器上
下載一個測試文件 .txt ,文件大小為 25.45MB ,服務(wù)器公網(wǎng)帶寬 1Mbps 。我們會測試腳本 10 次并取平均值作為結(jié)果。
讓我們開始吧!
1.Invoke-
說到使用 下載文件,最先想到的就是 Invoke- 命令。可能你有點(diǎn)不熟悉這個名字,它有 3 個別名,分別是 “iwr”、“wget”、“curl”。
平均用時:3分28秒
優(yōu)點(diǎn)
這個方法非常容易上手。如果你知道文件總的大小的話,結(jié)合 Write- 命令你可以很方便得看到腳本的運(yùn)行進(jìn)度。Cookie 也可以通過使用 -Session 和 - 參數(shù)在多個請求之間保留。
缺點(diǎn)
使用這個命令下載文件的速度很慢。我觀察到 HTTP 響應(yīng)流先全部緩存到了內(nèi)存中,一旦文件全部傳輸完畢,文件就會從內(nèi)存中一下子轉(zhuǎn)移到磁盤中。如果你要下載一個大文件,那么這種方式會造成巨大的性能問題和內(nèi)存的損耗。如果有人知道這個命令的具體操作細(xì)節(jié),請告訴我!我們可以一起討論一下。
這種方法的另一個潛在的嚴(yán)重缺點(diǎn)是依賴 。比如,這個命令不能運(yùn)行在 Windows Server core 版本的服務(wù)器上,因為它默認(rèn)不包含 二進(jìn)制文件。在這種情況下,你可以使用 - 參數(shù),但它并不是在所有情況下都起作用。另外我在這里給出兩個讓 Invoke- 提速的方法。
第一,使用 $='' 語句來隱藏滾動條,減小了資源的占用。
第二,就是使用上面提到的 - 參數(shù),這樣在 Invoke- 請求完數(shù)據(jù)后,就不會調(diào)用 IE 去進(jìn)行 DOM 樹結(jié)果的解析,效率會提高不少。
結(jié)論
當(dāng)你需要在多個請求時保留 Cookie(例如下載文件之前的 HTTP 表單驗證),那么這個命令會很有用。
這種方法很適合用來下載小文件,但是如果你對下載速度有要求,那肯定會有更好的選擇。如果這個腳本要運(yùn)行在 Windows Server Core 版本的服務(wù)器上,那這個命令就不適用了。
2.System.Net.
.NET 框架中的 System.Net. 類就是一個用于下載文件的 .NET 類。
平均用時:3分28秒
優(yōu)點(diǎn)
這個方法用起來也很簡單。這種方法的下載速度跟上一種差不多,在整個下載過程中 HTTP 響應(yīng)流被直接緩存到了磁盤中。
你還可以用 System.Net..() 這個函數(shù)。可以很方便地在文件并行下載的同時繼續(xù)運(yùn)行腳本。
缺點(diǎn)
沒有一個下載進(jìn)度條(或者任何能查詢下載進(jìn)度的東西),也就是說你無法知道到底還要多久才能下載完成,也不知道目前到底下載了多少。并且這個命令是單線程的,所以會造成線程阻塞,只能一個下載任務(wù)完成了才能進(jìn)行下一個任務(wù)。
結(jié)論
當(dāng)需要下載文件時,System.Net. 是我的最佳選擇。這個方法也是完全兼容 Windows Server Core 版本的服務(wù)器。
3. Start-
如果你在之前沒聽說過后臺智能傳輸服務(wù)(BITS) 參考文檔:
BITS 主要用于 Windows 系統(tǒng)的升級、自動更新等工作。工作方式為異步下載文件,并且用于同步下載文件時也有十分優(yōu)異的表現(xiàn)。還有一個 工具使用的也是這個后臺智能傳輸服務(wù)。
平均用時:3分33秒
優(yōu)點(diǎn)
集成了進(jìn)度條可以讓我們清楚的了解文件的下載進(jìn)度。- 參數(shù)可用于異步傳輸隊列。異步就意味著無需等待上一個任務(wù)完成即可執(zhí)行下一個任務(wù),多個命令可以并行執(zhí)行。雖然在單任務(wù)狀態(tài)下較慢,但在多任務(wù)的情況下能提高效率。
就個人而言,使用這個方法最大的優(yōu)勢是能夠在失敗的時候進(jìn)行重試操作并限制可用于傳輸?shù)膸捔俊?/p>
缺點(diǎn)
這個方法是我測試到現(xiàn)在最慢的方法!但是和其他兩個方法來比慢的也不太多。另外,雖然 BITS 在許多機(jī)器上默認(rèn)可用,但是你不能保證在所有的機(jī)器上都可以使用 BITS ,除非你在你的機(jī)器上確保已經(jīng)開啟了 BITS 。還有,由于 BITS 主要用于異步傳輸?shù)奶匦裕绻麆e的 BITS 任務(wù)正在后臺運(yùn)行,那么你的任務(wù)就會被加入隊列或者在片刻后再執(zhí)行,這就會阻礙你的腳本的執(zhí)行。
總結(jié)
在你想限制文件下載的帶寬或者不太考慮下載時間的情況下,這種方法是最完美的。得益于這種特性,我設(shè)置了一種夜間全速下載、白天半速下載的策略。并且 BITS 也易于觀察下載的進(jìn)度。
總得來說
我推薦使用 System.Net. 這種方法,因為它比較通用,下載速度也比較快。BITS 是我的第二個選擇因為它的靈活性和易于管理。
在滲透測試中,利用系統(tǒng)自帶的一些工具進(jìn)行攻擊是一種不錯的方法。而 就是一把利器,由于它過于強(qiáng)大,很多系統(tǒng)管理員會直接禁用它,并且在 Windows 系統(tǒng)中,也是默認(rèn)禁止 *.ps1 腳本文件的執(zhí)行的。所以呢我們需要在執(zhí)行 ps 腳本的時候繞過一下這個默認(rèn)的策略。最簡單的方法就是執(zhí)行 .exe 附加需要執(zhí)行的命令,也可以將要執(zhí)行的腳本直接復(fù)制進(jìn) 的窗口。
在執(zhí)行 ps1 腳本文件的時候加上一個 Bypass 參數(shù)就可以很簡單地繞過了。例如:
.exe - Bypass -File .\t1.ps1
如果你知道其他的方法,請告訴我哦。
個人作品展作者簡介
作者目前位于移動支付之城—杭州。就讀于浙江水利水電學(xué)院。之前在學(xué)校的東旭工作室做的是網(wǎng)站的前端(FE),后來從工作室出來,和小伙伴一起創(chuàng)辦了紅楓信安協(xié)會,踏上了信息安全之旅。平時偶爾喜歡玩玩游戲,愛 RNG,愛 UZI。
下面呢和大家分享一下我在信安方面的心路歷程。
首先呢,帶我入門的還是東旭工作室,在工作室里學(xué)到了很多基礎(chǔ)的東西。比如一個網(wǎng)站的建設(shè)過程、整體架構(gòu),然后還有編程能力的提升等等。
但是呢,在學(xué)的過程中發(fā)現(xiàn)了一些安全性的問題。比如在一次工作室的慶祝圣誕活動頁面上,有一個留言板。于是想到那時候剛學(xué)的 js,就寫了一段 js 提交上去,然后所有人的瀏覽器上都彈了窗... 一段時間以后才知道原來這就是 xss …后來從工作室出來,閑了一段時間,聽學(xué)姐推薦說去考一個軟考,以后畢業(yè)找工作多一個證書好找點(diǎn)。然后就去考了中級的信安工程師。
在備考期間發(fā)現(xiàn)信息安全好有趣呀,精巧的密碼學(xué)設(shè)計,刺激的中間人攻擊,復(fù)雜又不失優(yōu)雅的認(rèn)證協(xié)議…… 還有很多很多有趣的技術(shù)。
后來又接觸到了 CTF 比賽,跟紅楓信安的小伙伴一起去玩玩 CTF,很刺激很開心。最后希望能和有相同愛好的各位在信安之路上越走越遠(yuǎn)。想跟作者成為朋友嗎?那就加群吧!
*請認(rèn)真填寫需求信息,我們會在24小時內(nèi)與您取得聯(lián)系。