Skip to main content
  1. Blogposts/

Så lurar du en soap-tjänst med en falsk header 🔓 🍳

·550 words·3 mins· loading · · ·
Rasmus
Author
Rasmus
Att dela en ide eller två kan vara bra för hjärnan
Table of Contents

En serverhall där en liten lapp med texten “ExecuteCommand” smyger in genom ett öppet fönster


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:

  1. Förklädnaden: Vi skriver LoginRequest i XML-kroppen (som en oskyldig beställning)
  2. Lappen som ljuger: Sätter SOAPAction: ExecuteCommand i headern (som en falsk chefsnamnsskylt)
  3. 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 en FetchWeather-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! 🍕🔨