A Burp Suite beállítása Vaadin-alapú alkalmazások teszteléséhez
Norbert Bajko2025. február 7.
Bevezetés
A modern webalkalmazások gyakran keretrendszerekre épülnek, ami időnként váratlan viselkedést eredményez a biztonsági tesztelés során. Ennek egyik leggyakoribb oka, hogy a keretrendszer valamilyen szinkronizációs vagy viewstate-szerű működést valósít meg. A felhasználói felület minden változása — például szöveg beírása egy mezőbe — kérést generál, amelyben a böngésző elküldi a változás adatait. Egyes alkalmazások működéséhez ezek nem létfontosságúak: akkor is megfelelően működhetnek, ha elveszik egy kérés, vagy a kérésekben nem szerepelnek növekvő azonosítók.
A Vaadin keretrendszerben viszont ezek a szinkronizációs értékek kulcsfontosságúak. Ha nem megfelelőek, a felület újratöltődik, és elveszíti az állapotát. Ha a szerver nem a várt azonosítókat kapja, megszünteti az aktuális UIDL-munkamenetet, és a felület újratöltését kéri, a szinkronizációs azonosítók alaphelyzetbe állításával együtt. Ez megnehezíti a biztonsági tesztelést, mert minden kérésnél frissíteni kell az azonosítókat. Ha a tesztelő ezt figyelmen kívül hagyva indít vizsgálatot, az hatástalan lesz: a kérések már megszüntetett munkamenettel mennek ki.
Műszaki részletek
A kommunikáció megfigyeléséből kiderült, hogy az alkalmazás Vaadint használ. A forgalom több ponton eltért a webalkalmazások „szokásos” kommunikációjától. További részletek: https://mvysny.github.io/Vaadin8-communication-explained/
- UIDL használata: folyamatos kommunikáció a kliens és a szerver között, amely nyomon követi a felület minden változását. Akár a keresőmezőbe írunk, akár egy gombra kattintunk, a kliens kérést küld a változásokat követő szervernek.
clientIdéssyncIdhasználata: növekvő egész számok, amelyek az üzenetek sorrendjéért felelnek.
Ez azt jelenti, hogy például a Burp Repeaterrel nem küldhetünk el egyszerűen újra egy kérést. Az alkalmazás elveszítené az üzenetsorrendet, és újra kellene töltenünk a böngészőben.
Hogyan ismerhető fel ez a viselkedés? Egy keresőfunkciónál az x-pentest felhasználó keresésekor a helyes válasz Content-Length értéke körülbelül 1800. Ha nem a megfelelő syncId és clientId értékeket küldjük, nagyobb, általános választ kapunk. Az alábbi kérésben ezek a paraméterek nem megfelelően frissültek.
POST /appname/UIDL/?v-uiId=4 HTTP/1.1
Host: redactedhost.com
***TRUNCATED***
Connection: close
{"csrfToken":"c2516794-1ec7-4f33-95c4-208494e9cfdc","rpc":[["817","v","v",["positionx",["i",1473]]],["817","v","v",["positiony",["i",47]]],["820","v","v",["c",["i",9]]],["820","v","v",["curText",["s","x-pentest"]]]],"syncId":3,"clientId":3}
Válasz:
HTTP/1.1 200 OK
Connection: close
Content-Type: application/json;charset=utf-8
Cache-Control: no-cache
Content-Length: 18956
for(;;);[{"syncId": 6, "resynchronize": true, "clientId": 4, "changes" : [["change",{"pid":"744"},["0",{"id":"744","location":"https:\/\/redactedhost.com\/appname\/#\/index\/index"}]],["change",{"pid":"817"},["35",{"id":"817","v":{"action":""}},["actions",{},["action",{"key":"1","kc":27,"mk":[]}]]]],["change",{"pid":"820"},["36",{"id":"820","iem":"LAZY","iet":400,"nvc":true}]],["change",{"pid":"773"},["1",{"id":"773","ormoh":false,"usehtml":true},["options",{}],["items",{},["item",{"id":2,"text":"Admin PenTest (pentest)","command":true,"icon":"https:\/\/redactedhost.com\/profilepic?id=4"}]],["itemIds",{},["item",{"id":"2","componentId":""}]]]],["change",{"pid":"760"},["1",{"id":"760","ormoh":true,"usehtml":true},["options",{}],["items",{},["item",{"id":2,"text":"Admin PenTest","command":true,"icon":"https:\/\/redactedhost.com\/profilepic?id=4"},["item",{"id":3,"text":"My profile","command":true,"icon":"fonticon:\/\/FontAwesome\/f182"}],["item",{"id":4,"separator":true}],["item",{"id":5,"text":"Substituted persons","disabled":true}],["item",{"id":6,"style":"substitution","text":"Admin ","command":true,"icon":***TRUNCATED****
A következő kérésben már az előző válaszból kapott helyes azonosítók szerepeltek.
Kérés:
POST /appname/UIDL/?v-uiId=4 HTTP/1.1
Host: redactedhost.com
***TRUNCATED***
Connection: close
{"csrfToken":"c2516794-1ec7-4f33-95c4-208494e9cfdc","rpc":[["817","v","v",["positionx",["i",1473]]],["817","v","v",["positiony",["i",47]]],["820","v","v",["c",["i",9]]],["820","v","v",["curText",["s","pentest"]]]],"syncId":6,"clientId":4}
Válasz:
HTTP/1.1 200 OK
Connection: close
Content-Type: application/json;charset=utf-8
Cache-Control: no-cache
Content-Length: 1889
for(;;);[{"syncId": 8, "clientId": 5, "changes" : [], "state":{"821":{"childData":{"835":{"alignmentBitmask":5,"expandRatio":0}}},"835":{"styles":["i2-quicksearch-result-block"]},"836":{"childData":{"837":{"alignmentBitmask":5,"expandRatio":0},"838":{"alignmentBitmask":5,"expandRatio":1}},"width":"280.0px","styles":["i2-cursor-pointer"],"registeredEventListeners":["lClick"]},"837":{"description":"Assistant PenTest","styles":["i2-profile-picture-compact","i2-margin-vertical-small"],"resources":{"source":{"uRL":"https://redactedhost.com/profilepic?id=4"}}},"838":{"childData":{"839":{"alignmentBitmask":5,"expandRatio":0},"840":
A helyes syncId és clientId használatával az alkalmazás a megfelelő adatokat adta vissza. Az értékek automatikusan frissíthetők a TokenJar Burp-bővítménnyel, amely kiolvassa őket a válaszból: https://portswigger.net/bappstore/d9e05bf81c8f4bae8a5b0b01955c5578

A következő reguláris kifejezéseket használhatjuk:
"syncId"\s*:\s*(\d+)"clientId"\s*:\s*(\d+)
Bár a Scannerhez nincs külön jelölőnégyzet, ezekkel a beállításokkal a Burp a vizsgálat során is automatikusan frissíti az értékeket:
![]()
Így a Burp szkennelési funkciója Vaadin-alkalmazásoknál is használható.
Összegzés
A penetrációs tesztelőknek és hibavadászoknak figyelniük kell az ilyen viselkedésekre, nehogy fontos hibákat és problémákat hagyjanak észrevétlenül.
Néhány javaslat:
- Kövessük az elindított vizsgálatot, és ellenőrizzük, nem szakad-e meg a munkamenet.
- Nézzük meg, van-e a feladathoz használható Burp-bővítmény.
- A Hackvertor sok esetben hasznos eszköz.
- Különleges helyzetben a Burp Extender API-val saját bővítményt is írhatunk.
Fedezze fel a legfrissebb kiberbiztonsági híreket
Maradjon egy lépéssel a kiberveszélyek előtt a Naunet szakértői blogbejegyzéseivel! Ismerje meg a legújabb védelmi trendeket, technikákat és technológiákat, hogy növelhesse vállalkozása biztonságát. Csatlakozzon közösségünkhöz, és fejlődjön minden bejegyzéssel!
Megfelelés-vezérelt pentest, PTaaS és TLPT összehasonlítása: melyik behatolástesztelési stratégia illik vállalkozása rendszereihez és kockázataihoz?
Hogyan kapcsolja össze az együttműködés, az MI-támogatás és az architektúra-szemlélet a penetrációs tesztelést a változó rendszerekkel és kockázatokkal.
Az OpenClaw egy környezetben kapcsolja össze az üzeneteket, webes hozzáférést, eszközöket és hitelesítő adatokat. Ez a kényelem egyben biztonsági kockázat.
Az Evilginx 3 használata egyéni tanúsítványokkal
Két megoldás az Evilginx 3 közösségi kiadásának saját, akár wildcard TLS-tanúsítványokkal való használatára engedélyezett tesztelés során.
Egy red team felmérés során végzett adathalászat-szimuláció tanulságai a spamszűrőkről, a levelezési infrastruktúráról és a kézbesítésről.
Kevésbé feltűnő, mint az Nmap: ShadowProbe
A ShadowProbe több célpontra tervezett, kizárólag TCP-alapú portszkenner beépített ütemezővel, akár többhetes vizsgálatokhoz.