16 июня 2020 г.

Бесплатные LiveCD с антивирусами

В статье рассказывают про 7 загрузочных дисков с антивирусами

ссылка: https://www.securitylab.ru/analytics/509199.php

25 декабря 2018 г.

Как запустить процесс с правами System

запускаем командную строку с правами администратора:

sc create RunAsSystemSvc binpath= "cmd /K start" type= own type= interact
sc start RunAsSystemSvc


После этого в Windows 7/2008R2 появится сообщение, что имеется сообщение от системного сервиса. Смотрим сообщение и оказываемся в окне с cmd.

После того как сервис стал не нужен:

sc stop RunAsSystemSvc
sc delete RunAsSystemSvc

UPD: для всех версий windows годится

psexec.exe -i -s cmd.exe

28 января 2018 г.

Speedup yaourt in Arch Linux

I greatly increased the speed of yaourt by replacing curl with wget. I have no doubt that curl can accomplish this task no worse than wget, but wget is my favorite tool that I can use efficiently.

In yaourtrc, there is no mention of XferCommand, because yaourt uses makepkg for this. Therefore, make the following changes to the /etc/makepkg.conf configuration:

DLAGENTS = ('ftp :: / usr / bin / wget -c --passive-ftp -t 3 -waitretry = 3 -O% o% u'
          'http: / usr / bin / wget -c -t 3 -waitretry = 3 -O% o% u'
          'https :: / usr / bin / wget -c -t 3 - waitaitry = 3 --no-check-certificate -O% o% u'
          'rsync :: / usr / bin / rsync -z% u% o'
          'scp :: / usr / bin / scp -C% u% o')

## DLAGENTS = ('ftp :: / usr / bin / curl -fC - -ftp-pasv --retry 3 --retry-delay 3 -o% o% u'
## 'http :: / usr / bin / curl -fLC - --retry 3 --retry-delay 3 -o% o% u'
## 'https :: / usr / bin / curl -fLC - --retry 3 --retry-delay 3 -o% o% u'
## 'rsync :: / usr / bin / rsync --no-motd -z% u% o'
## 'scp :: / usr / bin / scp -C% u% o')

21 августа 2017 г.

PowerShell: удалённое выполнение в безопасном режиме

В продолжение предыдущей статьи.

Итак,
 если вы просрали пароль на KES10 и имеете только удалённый доступ к хосту.
 или же, если вам надо запустить какую-то команду в безопасном  режиме

Потребуется некоторая предварительная подготовка

1. Создать на хосте пользователя с правами локального администратора
2. Создать на хосте папку (например, c:\Scripts) и скопировать в неё (только!) необходимые скрипты.

Ваши скрипты безопасного режима должны соответствовать маске SafeMode-*.ps1. Скрипт ищет их в той же папке, где находится сам.

Если же вам надо запустить что-то другое, это что-то другое можно указать в параметре -SafeCommand скрипта. Например, вы можете указать свой CMD файл и вписать в него всё,
что хотели.

Использование

Execute-SafeMode.ps1 -UserName Admin -DomainName MyDomain -Password AdminPassword -RebootImmediately -SafeCommand "cmd.exe /c c:\windows\temp\1.tmp"

Execute-SafeMode.ps1 -UserName Admin -Password AdminPassword

Параметры

  UserName - обязательный, имя пользователя с правами администратора. пользователь должен иметь возможность входа в безопасном режиме, иначе хост так и останется в безопасном режиме.

  DomainName - необязательный. Если не указан, то принимается название хоста.

  Password - обязательный. пароль пользователя с административными правами

  RebootImmediately - необязательный. флажок немедленной перезагрузки. Если указать, скрипт немедленно перезагрузит хост в безопасный режим

  SafeCommand - необязательный. команда для безопасного режима

Порядок работы скрипта

При запуске в нормальном режиме
  •  скрипт устанавливает себя в ключ RunOnce для запуска в безопасном режиме
  • скрипт устанавливает указанные логин и пароль для автоматического входа (AutoAdminLogon)
  • скрипт устанавливает флаг загрузки в безопасном режиме (с помощью bcdedit)
  • скрипт выполняет перезагрузку, если указан флаг немедленного исполнения
При запуске в безопасном режиме
  • происходит автоматический вход в систему под указанной учётной записью
  • происходит автоматический запуск скрипта
  • скрипт выполняет команду, переданную в параметре SafeCommand
  • скрипт ищет рядом с собой файлы по маске SafeBoot-*.ps1 и последовательно выполняет их. Порядок выполнения не определён
  • скрипт удаляет параметры автоматического входа в систему (AutoAdminLogon)
  • скрипт устанавливает флаг загрузки в нормальном режиме
  • скрипт выполняет перезагрузку

# Execute-SafeMode.ps1
# LastUpdate: 21.08.2017 17:30:04
# 
[CmdletBinding()]
Param(
    [string]$UserName          = "",
    [string]$Domain            = "",
    [string]$Password          = "",
    [switch]$RebootImmediately = $false,
    [string]$SafeCommand       = ""
)

$SaveVerbosePreference = $VerbosePreference
$VerbosePreference = 'Continue'
$SaveCurrentDir = Get-Location


$keyRunOnce = "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce"
$keyWinlogon = "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon"

$runEntry   = "*ExecuteSafeMode"

$SaveVerbosePreference = $VerbosePreference
$VerbosePreference = 'Continue'

$PluginScriptMask = "SafeMode-*.ps1"


$MyScript = $MyInvocation.MyCommand.Path 
$WorkDir = Split-Path ($MyInvocation.MyCommand.Path) -Parent
$SafeBootScript = "$WorkDir\safeboot.cmd"
$LogFile = [IO.Path]::ChangeExtension($MyInvocation.MyCommand.Path, "log")

Set-Location $WorkDir


$IsNormalBoot = (Get-WmiObject -Class Win32_ComputerSystem | 
    Select-Object -ExpandProperty BootupState) -like '*Normal*'



function myeval($cmd) 
{
    if ($cmd[0] -eq '"')    
    {
        Invoke-Expression "& $cmd"
    }
    else
    {
        Invoke-Expression $cmd 
    }
}

function Write-RegistryString($Path, $Name, $Value)
{
    Remove-ItemProperty -Path $Path -Name $Name | Out-Null
    New-ItemProperty -Path $Path -Name $Name -Value $Value -PropertyType String
}

Write-Verbose "Arguments is"
Write-Verbose "`tUserName          : $UserName"
Write-Verbose "`tDomain            : $Domain"
Write-Verbose "`tPassword          : $Password"
Write-Verbose "`tRebootImmediately : $RebootImmediately"
Write-Verbose "`tSafeCommand       : $SafeCommand"
Write-Verbose ""
Write-Verbose "`tIsNormalBoot      : $IsNormalBoot"


# проверка аргументов
if ($IsNormalBoot) 
{
    if ( [string]::IsNullOrEmpty($UserName) )
    {
        throw New-Object System.ArgumentException("Parameter -UserName must not be NULL")
    }
    if ( [string]::IsNullOrEmpty($Password) )
    {
        throw New-Object System.ArgumentException("Parameter -Password must not be NULL")
    }
}


if ($IsNormalBoot)
{
    # создаём файл safeboot.cmd с указанной командой
    $CommandLine = "PowerShell.exe -NoProfile -ExecutionPolicy Bypass -File {0} -SafeCommand `"{1}`"" -f $MyScript, $SafeCommand
    $CommandLine | Set-Content -Path $SafeBootScript -Force

    # устанавливаем в HKLM\\RunOnce наш скрипт safeboot.cmd
    if ( !(Test-Path -Path $keyRunOnce) )
    {
        New-Item -Path $keyRunOnce -Force
    }

    Remove-ItemProperty -Path $keyRunOnce -Name $runEntry -Force | Out-Null
    New-ItemProperty -Path $keyRunOnce -Name $runEntry -Value $SafeBootScript -PropertyType String -Force | Out-Null

    # назначаем AutoAdminLogon пользователя
    if ( !(Test-Path -Path $keyWinlogon) ) 
    {
        New-Item -Path $keyWinlogon -Force | Out-Null
    }
    Remove-ItemProperty -Path $keyWinlogon -Name "AutoAdminLogon" | Out-Null
    New-ItemProperty -Path $keyWinlogon -Name "AutoAdminLogon" -Value "1" -PropertyType String -Force

    if ( [string]::IsNullOrEmpty($Domain) ) 
    {
        $Domain = $env:COMPUTERNAME
    }

    Remove-ItemProperty -Path $keyWinlogon -Name "DefaultDomainName" -Force | Out-Null
    New-ItemProperty -Path $keyWinlogon -Name "DefaultDomainName" -Value $Domain 
        -PropertyType String -Force | Out-Null
    Remove-ItemProperty -Path $keyWinlogon -Name "DefaultUserName" -Force | Out-Null
    New-ItemProperty -Path $keyWinlogon -Name "DefaultUserName" -Value $UserName 
        -PropertyType String -Force | Out-Null
    Remove-ItemProperty -Path $keyWinlogon -Name "DefaultPassword" -Force | Out-Null
    New-ItemProperty -Path $keyWinlogon -Name "DefaultPassword" -Value $Password 
        -PropertyType String -Force | Out-Null

    # устанавливаем следующую перезагрузку в безопасном режиме
    & bcdedit /set `{current`} safeboot minimal

    # перегружаемся
    if ($RebootImmediately)
    {
        Restart-Computer -Force
    }
} 
else # Safe Mode
{
    # удаляем Auto Logon пользователя
    if ( !(Test-Path -Path $keyWinlogon) ) 
    {
        New-Item -Path $keyWinlogon -Force
    }
    Remove-ItemProperty -Path $keyWinlogon -Name "AutoAdminLogon" | Out-Null
    New-ItemProperty -Path $keyWinlogon -Name "AutoAdminLogon" -Value "0" -PropertyType String | Out-Null

    Remove-ItemProperty -Path $keyWinlogon -Name "DefaultPassword" -Force | Out-Null
    Remove-ItemProperty -Path $keyWinlogon -Name "DefaultDomainName" -Force | Out-Null
    Remove-ItemProperty -Path $keyWinlogon -Name "DefaultUserName" -Force | Out-Null

    # устанавливаем следующую перезагрузку в нормальный режим
    & bcdedit /deletevalue `{current`} safeboot

    # удаляем SafeBoot.cmd
    Remove-Item -Path $SafeBootScript -Force | Out-Null

    # выполняем команду пользователя
    if ( ![string]::IsNullOrEmpty($SafeCommand) )
    {
        try
        {
            "Invoke $SafeCommand :" | Out-File -FilePath $LogFile -Append -Encoding unicode
            myeval $SafeCommand | Out-File -FilePath $LogFile -Append -Encoding unicode
        }
        catch
        {
            "ERROR: $($_.Exception.Message)" | Out-File $LogFile -Append -Encoding unicode
        }
    }

    Get-ChildItem -Path $WorkDir -Filter "SafeMode-*.ps1" |
        Select-Object -ExpandProperty FullName |
        ForEach-Object {
            $SafeModePlugin = $_
            try
            {
                "Invoke $SafeModePlugin :" | Out-File -FilePath $LogFile -Append -Encoding unicode
                Invoke-Expression -Command $SafeModePlugin | Out-File -FilePath $LogFile -Append -Encoding unicode
                "Invoke $SafeModePlugin : OK" | Out-File -FilePath $LogFile -Append -Encoding unicode
            }
            catch
            {
                "ERROR: $($_.Exception.Message)" | Out-File -FilePath $LogFile -Append -Encoding unicode
            }
        }

    # перегружаемся 
    & shutdown.exe -r -f -t 3
}


$VerbosePreference = $SaveVerbosePreference
Set-Location $SaveCurrentDir

PowerShell: Если забыли пароль от KES10

Итак, если вы просрали пароль на KES10 и хотите его сбросить - поможет следующий скрипт.
Скрипт необходимо выполнять в безопасном режиме.

safemode-resetpwdkes10.ps1
# howto reset KES10
# x64: HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\KasperskyLab\protected\KES10\settings
# x32: HKEY_LOCAL_MACHINE\SOFTWARE\KasperskyLab\protected\KES10\settings
#    "EnablePswrdProtect"=dword:00000000
#    "OPEP"=""
#

$keyKES10x64 = "HKLM:\SOFTWARE\Wow6432Node\KasperskyLab\protected\KES10"
$keyKES10x86 = "HKLM:\SOFTWARE\KasperskyLab\protected\KES10"

$valPassworpProtect = "EnablePswrdProtect"
$valOPEP = "OPEP"

if ([System.IntPtr]::Size -eq 8) # is x64 bit system
{
    $keyKES10Settings = "$keyKES10x64\Settings"
}
else
{
    $keyKES10Settings = "$keyKES10x86\Settings"
}

New-ItemProperty -Path $keyKES10Settings -Name $valPassworpProtect -Value 0 -PropertyType DWord -Force | Out-Null
New-ItemProperty -Path $keyKES10Settings -Name $valOPEP -Value "" -PropertyType String -Force | Out-Null 
# the end :-)

13 августа 2017 г.

21 июля 2017 г.

Скрипт PowerShell, проверяющий хосты локальной сети на наличие установленных патчей уязвимости протокола SMBv1


Скрипт PowerShell, проверяющий хосты локальной сети на наличие установленных патчей уязвимости протокола SMBv1

# --
function Find-CryHotFixes
{

    param([string]$ComputerName)


    # List of all HotFixes containing the patch
    $hotfixes = @(
        "KB4012598", "KB4012212", "KB4012215", "KB4015549",
        "KB4019264", "KB4012213", "KB4012216", "KB4015550",
        "KB4019215", "KB4012214", "KB4012217", "KB4015551",
        "KB4019216", "KB4012606", "KB4015221", "KB4016637",
        "KB4019474", "KB4013198", "KB4015219", "KB4016636",
        "KB4019473", "KB4013429", "KB4015217", "KB4015438",
        "KB4016635", "KB4019472", "KB4018466")


    # Search for the HotFixes
    $HotfixIDs = Get-HotFix -ComputerName $ComputerName |
        Where-Object {$hotfixes -contains $_.HotfixID} |
        Select-Object -ExpandProperty "HotFixID"
    $obj = New-Object -TypeName PSCustomObject -Property @{
        ComputerName = $ComputerName;
        CryHotFixes = [string]$HotfixIDs
    }

    $obj | Write-Output
}

# --


Clear-Host

$FoundFixes = @()

Get-ADComputer -Filter { Enabled -eq $true } `
               -Properties IPv4Address -SearchBase "OU=Computers,DC=office,DC=domain,DC=com" |
    Where-Object { Test-Connection -ComputerName $_ -Quiet } |
    ForEach-Object {
        $pc = $_   
        $FoundFixes += ( Find-CryHotFixes -ComputerName $pc )
}


$FoundFixes | ft -au