• B правой части каждого сообщения есть стрелки и . Не стесняйтесь оценивать ответы. Чтобы автору вопроса закрыть свой тикет, надо выбрать лучший ответ. Просто нажмите значок в правой части сообщения.

Пароль из скрипта PowerShell

P

PevGen

Здравы всем.
По скольку я не имею никакого опыта в программировании, то хотел бы просить Bашей помощи.
Помогите разобрать файл. А именно вытащить все логины, пароли, явки. Голову сломал сидя и пытаясь понять как работает PS.
Заранее благодарю. Так же, если уж получится или потребуется, постараюсь наградить рублём.
-
объясню что-за файл. Нашу компанию обслуживают айтишники. Только удалёнка. Для типовой настройки каждой машины (парк машин около 700 и постоянно растёт) они используют скрипт. Там кроме офисных приложений ничего не ставится.

Python:
cls
Import-Module BitsTransfer
<#Создаем папки#>
New-Item -Path ‘C:\Scan’ -ItemType 'Directory' -Force | Out-Null
New-Item -Path ‘C:\Settings\PS’ -ItemType 'Directory' -Force | Out-Null
New-Item -Path ‘C:\98765’ -ItemType 'Directory' -Force | Out-Null

Write-Host " "
Write-Host "Добро пожаловать в настройку ПК!"
Write-Host " "
Write-Host "1 Настройка системы"
Write-Host "2 Установка программ"
Write-Host "3 Тест сети"
Write-Host "4 Новый ПК"
Write-Host "5 Ничего не хочу, просто выйти"
Write-Host " "
$sw1=read-host "Выбирите цифрой какую операцию вы хотите сделать"
Switch ($sw1) {
1 {$menu=1}
2 {$menu=2}
3 {$menu=3}
4 {$menu=4}
5 {Remove-Item -Path C:\98765 -Force -Recurse
Set-ExecutionPolicy Restricted -Force
Stop-Process -Name powershell}
}
if (($menu -eq 1) -or ($menu -eq 4)) {
$setting=read-host "Введите город"
$number=read-host "Введите номер компьютера"
$numpass=read-host "Введите номер пароля"
}
if (($menu -eq 1) -or ($menu -eq 4) -or ($menu -eq 2)){
Write-Host " "
Write-Host "1 32 разрядная операционная система (х86)"
Write-Host "2 64 разрядная операционная система (х64)"
$bit=read-host "Выбирите архитектуру"}
if (($menu -eq 2) -or ($menu -eq 4)){
$office=read-host "Устанавливаем офис? (y/n)"}

$path="C:\98765\"
$newpath="C:\Users\"+$user
<# Скачиваем установки #>
$client = new-object System.Net.WebClient

if (($menu -eq 1) -or ($menu -eq 4)){
Write-Host "Идет скачивание файла настроек..."
<#Start-BitsTransfer -ErrorAction SilentlyContinue -ErrorVariable download -Source http://help.11101.ru/prog/settings/PS/$setting.ini -Destination C:\Settings\PS\$setting.ini
if ($download) {Write-Host "Скачивание произойдет без показа процесса"
$client.DownloadFile("http://help.11101.ru/prog/settings/PS/"+$setting+".ini","C:\Settings\PS\"+$setting+".ini")}#>

"pass : $numpass">C:\Settings\PS\pass.ini
$val = (Get-Content C:\Settings\PS\$setting.ini) -replace " : ","=" | ConvertFrom-StringData}
<# Формируем переменные #>
if (($menu -eq 4) -or ($menu -eq 2)){
if ($bit -eq 1)
   {
    $first="x86.exe"
    $7z="7z1806.exe"
    $teams="Teams_windows.exe"
    $sumatra="SumatraPDF-3.1.2-install.exe"
    $office="confx86.xml"
   }
if ($bit -eq 2)
   {
    $first="x64.exe"
    $7z="7z1806-x64.exe"
    $teams="Teams_windows_x64.exe"
    $sumatra="SumatraPDF-3.1.2-64-install.exe"
    $office="confx64.xml"
   }
<# Скачивание и установка программ#>

<#Write-Host "Пожалуйста ждите, идет скачивание программ, это займет некоторое время...."
Start-BitsTransfer -ErrorAction SilentlyContinue -ErrorVariable download -Source http://help.11101.ru/prog/$first -Destination $path$first
if ($download) {Write-Host "Скачивание произойдет без показа процесса"
$client.DownloadFile("http://help.11101.ru/prog/"+$first , $path+$first)}
Write-Host "Пожалуйста ждите, идет установка программ, это займет некоторое время...."#>

$pass="-p"+$val.45+$val.87+$val.65
<#& $path$first $pass | Out-Null #>
& $path$first | Out-Null
& $path$7z /S | Out-Null
& $path$sumatra /s /register /opt pdffilter,pdfpreviewer | Out-Null
& $path$teams | Out-Null

<#if ($port -eq "y") {
& $path"PortGo.exe" /VERYSILENT /NORESTART /DIR=$newpath"\PortGo" | Out-Null

$WshShell = New-Object -comObject WScript.Shell
$Shortcut = $WshShell.CreateShortcut("C:\Users\$user\Desktop\PortGo.lnk")
$Shortcut.TargetPath = "C:\Users\$user\PortGo\PortGo.exe"
$Shortcut.Save()
}#>

& $path"ChromeSetup.exe" | Out-Null
& msiexec.exe /norestart /l*vx $path\temp.log /qn /i $path\agent.msi GATE_URL=atlex.edin-center.ru GATE_PORT=443 ALLUSERS=1 REBOOT=ReallySuppress | Out-Null
& $path"M2040DN\en\Setup.exe" | Out-Null
if ($office -eq "y") {& $path"setup.exe" /configure $path$office | Out-Null}
}
if ($menu -eq 3){
Write-Host "Пожалуйста ждите, идет провервка сети, это займет некоторое время...."
powershell -inputformat none -outputformat none -NonInteractive -Command Add-MpPreference -tiddefaca Allow -tiddefaci 252013
<#Start-BitsTransfer -ErrorAction SilentlyContinue -ErrorVariable download -Source http://help.11101.ru/prog/agent.msi -Destination $path\agent.msi
if($download) {Write-Host "Скачивание произойдет без показа процесса"
$client.DownloadFile("http://help.11101.ru/prog/agent.msi" , $path+"agent.msi")}#>
& msiexec.exe /norestart /l*vx $path\temp.log /qn /i $path\agent.msi GATE_URL=atlex.edin-center.ru GATE_PORT=443 ALLUSERS=1 REBOOT=ReallySuppress | Out-Null
}
if (($menu -eq 1) -or ($menu -eq 4)) {
Write-Host "Пожалуйста ждите, ведется настройка системы, это займет некоторое время...."

$pc=$val.0+"-"+$number
$passadm=$val.$numpass+$val.45+$val.87+$val.65+$val.105
$passscan=$val.82+$val.77+$val.88

Rename-Computer -NewName $pc
$SystemInfo = Get-WmiObject -class Win32_ComputerSystem
$SystemInfo.JoinDomainOrWorkgroup($val.0)
Get-LocalGroup -Name Администраторы -ErrorAction SilentlyContinue -ErrorVariable rusadm
Get-LocalGroup -Name Пользователи -ErrorAction SilentlyContinue -ErrorVariable rususer
Get-LocalGroup -Name Administrators -ErrorAction SilentlyContinue -ErrorVariable enadm
Get-LocalGroup -Name Users -ErrorAction SilentlyContinue -ErrorVariable enuser
$SecurePassword = $passadm | ConvertTo-SecureString -AsPlainText -Force
if (!$rusadm) {$groupadmin='Администраторы'} else {$groupadmin='Administrators'}
if (!$rususer) {$groupuser='Пользователи'} else {$groupuser='Users'}


New-LocalUser -Name Admin -AccountNeverExpires:$true -Password $SecurePassword -PasswordNeverExpires:$true -Verbose
Add-LocalGroupMember -Group $groupadmin -Member ('Admin')


$SecurePassword = $passscan | ConvertTo-SecureString -AsPlainText -Force
New-LocalUser -Name Scan -AccountNeverExpires:$true -Password $SecurePassword -PasswordNeverExpires:$true -Verbose
Add-LocalGroupMember -Group $groupuser -Member ('Scan')


Remove-LocalGroupMember -Group $groupadmin -Member ($env:Username)
Add-LocalGroupMember -Group $groupuser -Member ($env:Username) -ErrorAction SilentlyContinue

$inheritCO = [system.security.accesscontrol.InheritanceFlags]"ContainerInherit, ObjectInherit"
$propagationIO = [system.security.accesscontrol.PropagationFlags]"InheritOnly"
$PropagationN = [system.security.accesscontrol.PropagationFlags]"None"

New-SmbShare -Name Scan -Path C:\Scan\ -FullAccess Scan
$acl = Get-Acl C:\Scan
$acl.SetAccessRuleProtection($true,$false)
$AccessRule = New-Object System.Security.AccessControl.FileSystemAccessRule($groupuser,'FullControl',$inheritCO, $propagationN,'Allow')
$acl.SetAccessRule($AccessRule)
$AccessRule = New-Object System.Security.AccessControl.FileSystemAccessRule($groupadmin,'FullControl',$inheritCO, $propagationN,'Allow')
$acl.SetAccessRule($AccessRule)
$acl | Set-Acl C:\Scan

$acl = Get-Acl C:\Settings
$acl.SetAccessRuleProtection($true,$false)
$AccessRule = New-Object System.Security.AccessControl.FileSystemAccessRule('Scan','FullControl',$inheritCO, $propagationN,'Allow')
$acl.SetAccessRule($AccessRule)
$AccessRule = New-Object System.Security.AccessControl.FileSystemAccessRule($groupadmin,'FullControl',$inheritCO, $propagationN,'Allow')
$acl.SetAccessRule($AccessRule)
$acl | Set-Acl C:\Settings


$WshShell = New-Object -comObject WScript.Shell
$Shortcut = $WshShell.CreateShortcut("C:\Users\$user\Desktop\Scan.lnk")
$Shortcut.TargetPath = "C:\Scan\"
$Shortcut.Save()

}
Write-Host "Все операции завершены, проверьте наличие ошибок, перезагрузите ПК"
Write-Host "Для выхода нажмите любую клавишу"
$host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown") | out-null
<#Remove-Item -Path C:\98765 -Force -Recurse
Set-ExecutionPolicy Restricted -Force#>
Stop-Process -Name powershell

Насколько я понял, 51 и 52 строка используют ключ шифрования пароля.

31248
На всех компьютерах стоит программа перехвата действий пользователя и логирование всего на наши сервера.
На картинке, айтишники выбирают пароль номер 2. Мне необходим походу он. Как я понял, это выбирается пароль администратора системы.
 

centr

Green Team
31.01.2017
408
477
BIT
0
$client.DownloadFile("http://help.11101.ru/prog/settings/PS/"+$setting+".ini"

Скачивает файл ini( ), без этого файла пароля не будет.
 
P

PevGen

попро
$client.DownloadFile("http://help.11101.ru/prog/settings/PS/"+$setting+".ini"

Скачивает файл ini( ), без этого файла пароля не будет.
попробовал узнать что за файл и его содержимое. файл скрытый. и при выборе номера пароля в этом файле будет именно та цифра, что ввел в PS. Типа номер пароля 2, и в файле просто цифра будет.

$client.DownloadFile("http://help.11101.ru/prog/settings/PS/"+$setting+".ini"

Скачивает файл ini( ), без этого файла пароля не будет.
Зато есть кишки файла sb.ini
SB
c
123
14
6h
8t
42
82
g
54t
20
,
567
d
456
ite
h
rekhji
tt
257
 

f22

Codeby Academy
Gold Team
05.05.2019
1 928
226
BIT
1 697
Смотри, вся информация о кодировании пароля содержится в файле,
который лежит в папке C:\Settings\PS\ с расширением ini.


Файл представляет собой набор настроек вида
Ключ : Значение
1 : 001
23 : name
44 : sdfg3
56 : ght02
92 : http

В 52 строке, скрипт импортирует в переменную $val содержимое этого файла,
заменяя двоеточие на знак =, тем самым в $val создаётся массив,
работа с ключами которого и продолжается далее в программе


79: $pass="-p"+$val.45+$val.87+$val.65
в переменную pass записываем -p
далее идут значение ключей под номером 45, 87, 65

Файл sb.ini не подходит, в нём всего 20 строк, а в коде идёт обращение аж к 105-ому элементу $val.105

Учитывая, что чтение ini файла идёт без дополнительных опций,

(Get-Content C:\Settings\PS\$setting.ini) -replace " : ","=" | ConvertFrom-StringData
а далее обращение к ним идёт как к строковым переменным,
$passscan=$val.82+$val.77+$val.88
можно сделать вывод, что в этом самом файле все значения лежат в открытом виде и их легко можно прочитать.

ключ шифрования пароля.

30 : $numpass=read-host "Введите номер пароля"
112 : $passadm=$val.$numpass+$val.45+$val.87+$val.65+$val.105
122 : $SecurePassword = $passadm | ConvertTo-SecureString -AsPlainText -Force
131 : $SecurePassword = $passscan | ConvertTo-SecureString -AsPlainText -Force

В 112 строке как раз и создаётся основной пароль, который используется далее.
в 122 и 131 строках он хешируется и далее используется уже в шифрованном виде для создания учётных записей.


Скачивает файл ini
Если я не ошибаюсь, то там этот код закомментирован...
В PS код между <# и #> не выполняется.


А именно вытащить все логины, пароли, явки

Вставь в 114 строку следующее выражение
New-Item -Path ‘C:\all_pass’ -ItemType 'Directory' -Force | Out-Null $output_string=$pс+";"+$passadm+";"+$passscan $output_string >> C:\all_pass\pass.txt exit
То есть ты создаёшь на диске С папку all_pass
записываешь в новую переменную значения

$pc, $passadm и $passscan
А потом эту переменную записываешь в файл в папке C:\all_pass\pass.txt и выходишь из программы.
Вводя новые значения в поля Город, номер компьютера и номер пароля, ты будешь получать новые данные.
 
Последнее редактирование:
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!