Tänk dig en nattvakt som kollar passerkort. Klack, klack. Någon knackar på dörren till serverrummet. Vakten tittar snabbt på kortet – “Städpersonal” står det. Men när dörren öppnas, tar personen fram en USB-sticka och börjar kopiera känsliga filer. Så här funkar SOAPAction spoofing i grova drag. En header som ser legitim ut, men en kropp som gör något helt annat.
🍔 SOAP för oss vanliga dödliga #
SOAP är som en pizzeria som tar beställningar via lappar. Varje beställning (XML-meddelande) skickas i ett kuvert (HTTP-förfrågan) med en lapp på utsidan: “SOAPAction: HämtaKontoutdrag”. Köket (servern) läser lappen och lagar rätt rätt.
Men ibland kollar kocken bara på lappen – inte vad som står inuti kuvertet. Då kan du beställa en margherita på utsidan (SOAPAction: “Login”), men skriva “En pepperoni med extra admin-rättigheter” inuti XML:en. Om kocken är slarvig, får du precis vad du ville.
🧭 Attackens kompass: Trojanen i kuvertet #
Låt oss titta på vår pizzeria-tjänst med två menyer:
- LoginRequest – som en vanlig meny du får på stan
- ExecuteCommandRequest – som hemliga chefsrätter bara för anställda
När vi skickar ExecuteCommand
direkt från parkeringen (externt nätverk), säger vakten “Nej, det får bara kökspersonal beställa”. Men här kommer tricket:
- Förklädnaden: Vi skriver
LoginRequest
i XML-kroppen (som en oskyldig beställning) - Lappen som ljuger: Sätter
SOAPAction: ExecuteCommand
i headern (som en falsk chefsnamnsskylt) - Leveransen: Servern ser bara “chefens lapp” och kör kommandot whoami trots att det står “margherita” i beställningen
🔐 Säkerhetsbrister som låser upp #
Varför funkar detta? Tänk på:
-
En överbelastad vaktmästare När en server inte dubbelkollar att SOAPAction-headern matchar XML-kroppen, blir det som en klubbsäkerhetsvakt som bara kollar armbandsfärgen – inte ansiktet.
-
För mycket tillit till uniformer
SOAPAction
är som en polisbricka – om tjänsten inte verifierar att den som bär den faktiskt är polis, kan vem som helst skräddarsy en övertygande förklädnad.
🎨 Konsten att kamouflera en SOAP-begäran #
Här är magin i Python-koden du delade – bryt ner den som ett fultricket:
payload = '''<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope>
<soap:Body>
<LoginRequest> # 🎭 Maskeraden
<cmd>whoami</cmd> # 🐍 Ormen i äpplet
</LoginRequest>
</soap:Body>
</soap:Envelope>'''
headers = {"SOAPAction": '"ExecuteCommand"'} # 🎫 Falskt ID-kort
Det är som att skicka ett kuvert med “Kärleksbrev” skrivet på utsidan, men innehåller en detaljerad plan för att bryta sig in i ett museum. Postmästaren (servern) läser bara rubriken och skickar det till fel avdelning.
💡 Så skyddar du din egen SOAP-tjänst #
-
Dubbelkolla alltid ID:n Se till att tjänsten jämför SOAPAction-headern med den faktiska operationen i XML-kroppen – som en bartender som kollar både leg och ansikte.
-
Använd WS-Security Lägg till en digital signatur (som ett vattenmärke) som bekräftar att headern och kroppen hör ihop.
-
Testa själv med curl Kasta lite skenkommandon mot din tjänst. Om den accepterar
SOAPAction: DeleteAllData
när du skickar enFetchWeather
-begäran – då vet du att det är dags att strama åt.
🚀 Nästa steg: Bli en SOAP-operatör #
Om du redan skrattar åt tanken på att lura servrar med falska headers – testa! Klona ner exemplet, kör skriptet mot en labbmiljö, och se hur XML-kroppen dansar till headerens pipa.
Men kom ihåg: Med stor SOAP-makt kommer stor etisk kod. Använd denna kunskap som en låssmeds verktyg – för att bygga bättre lås, inte för att bryta sig in.
Kör igång, och låt inte dina SOAP-tjänster bli nästa pizzeria med bluffmeny! 🍕🔨