Tråd bedømmelse:
  • 1 Stemmer - 5 Gennemsnit
  • 1
  • 2
  • 3
  • 4
  • 5
XSS Guide For Begyndere - af SwiZz
04-05-2013, 20:28
#1
XSS Guide For Begyndere - af SwiZz
[Billede: HJOEV3P.png]
Denne guide er lavet på baggrund af min viden inden for emnet. Der er rigtig meget som du stadig kan lære udenfor denne guide.
Jeg vil komme ind på det mest basale, og hvordan du bruger det i praksis. Denne guide er lavet for at lære om emnet,
og bør ikke anvendes på andres bekostning. Jeg står ikke til ansvar for, hvad i vil bruge denne viden til.


1. Hvad er Cross-Site Scripthing
Cross-Site Scripting, også mere normalt kaldet XSS, er en type angreb, som for det meste bruges mod web-applikationer.
Selve angrebet består i at "Hackeren" injicere scripts ind i kilde koden på en hjemmesiden som slaver kan se, når de besøger linket.
Det betyder samtidig at indholdet/dataen på hjemmesiden er afgørende for hvor meget du får ud af dit angreb mod slaven. Dette kommer jeg også mere ind på senere.

2. At finde en sårbarhed
Når vi skal finde sårbarheder på en hjemmeside så er der 2 primære måder at gøre dette på. Den ene er URL injection, altså vi sætter et led på url addressen, så vi simpelthen kører scriptet igennem URL'en. Det andet er et input på selve hjemmesiden. Dette kan være en søgeboks.

Et ekspempel ville være ind textbox ligesom denne:
[Billede: 12yksHp.jpg]
Metoden er at injicere et script via en af disse textbox.

Et eksempel på URL injection ville være:
Kode:
http://www.eksempel.dk/index.php?id=<script>alert(1);</script>

En måde at starte på, som jeg plejer at gøre det, så jeg ikke bare fumler i blinde, det er at skrive noget unikt. Dette kan være "hej123" eller noget andet, bare det er unikt. Derefter så gå ind under kildekoden på hjemmesiden(højreklik -> vis kildekode (sourcecode)), og derefter klik CTRL+F og så søg på dit unikke tekst stykke.

Kode:
<form name="XSS" action="#" method="GET">
    <p>Hvad er dit navn?</p>
    <input type="text" name="name">
    <input type="submit" value="submit">
</form>

<pre>Hej hej123</pre>

Vi har nu fundet det sted hvor vores input bliver lagret midlertidigt. Vi prøver nu at sætte et <script> tag ind og ser hvad der sker.

Kode:
<form name="XSS" action="#" method="GET">
    <p>Hvad er dit navn?</p>
    <input type="text" name="name">
    <input type="submit" value="submit">
</form>

<pre>Hej <script></pre>

Det som egentlig sker, det er at hjemmesiden den ser vores tekst som kode, fordi vi netop sætter det i tags. Dette er hvad vi leder efter!
En sårbarhed!

3. Udnyt/Exploit sårbarheden
Nu har vi fundet vores sårbarhed. Det er jo nøglen til et XSS angreb. For at være sikker på at sårbarheden er der, så kan vi teste på en ufarlig måde ved at frembringe en besked box på hjemmesiden. Dette er et meget kendt trick, som bruges af langt de fleste der finder XSS. Der findes bedre og mere avanceret metoder, men nu er det blot for at i får forståelsen af det.

Hvor du før fandt dit input, der skal du nu prøve at indsætte et script igen, og så bruge vektoren:
Kode:
<script>alert("hej123");</script>

Når du har gjort dette, så burde du gerne se en tekst box komme frem, hvor der står "hej123" og du kan klikke ok. Hvis du ikke ser dette, så frygt ikke. Dette kan skyldes at din browser ikke tillader det. Jeg henviser til at bruge mozilla firefox, da det er nemt at teste XSS deri.

Nå men for at komme tilbage til emnet. Hvis du kigger samme sted i kildekoden igen så burde det gerne se sådan her ud:
Kode:
[code]<form name="XSS" action="#" method="GET">
    <p>Hvad er dit navn?</p>
    <input type="text" name="name">
    <input type="submit" value="submit">
</form>

<pre>Hej <script>alert("hej123");</script></pre>

Det ses i kildekoden at vores script ikke er blevet filtreret. At det faktisk kører. Hvis disse forudsætninger jeg har beskrevet er opfyldt, så er hjemmesiden XSS sårbar.

4. Persistent XSS, og Non-persistent XSS
Først må vi slå op i en overbog for at få betydningen. Oxfords ordbog beskriver persistent sådan her:
Citer:2. continuing to exist or occur over a prolonged period
Altså noget som er vedvarende, og forbliver der. Og modsat er non-persistent noget som ikke er vedvarende, og som faktisk forsvinder igen.

Disse 2 ting er meget godt at gave styr på. De eksempler jeg har gennemgået i denne tutorial er non-persistent, altså de er ikke vedvarende. Det er fordi de ligger i vores "infected" link. Du skal simpelthen besøge vores custom link, vi har skrevet ved hjælp af et input felt. Det er ikke den aller bedste metode kan i nok se.
Derfor er det også vigtigt at vide noget om persistent xss. Hvordan får man noget til at blive på en hjemmeside?

Vi kan tage et eksempel fra Arto.dk
På arto har du en profiltekst. Jeg vil ikke komme ind på hvordan jeg fandt det, men jeg vil fortælle jer princippet. Ved at sætte mit script ind, og gemme min profiltekst, så er mit script lagret i den profil tekst. Derved vil alle der bare går ind på min profil, få executed mit script.

Et andet eksempel der måske kan give jer en idé til hvor man kan finde persistent XSS er på Lectio.dk (Er blevet meldt og fixet.)
Der findes et besked system, hvor du har mulighed for at bruge BBCode. Altså tags der gjorde teksten mere dynamisk. F.eks. kunne du sende links, og mask dem. Dette kunne gøres på følgende måde:
Kode:
[url=www.eksempel.dk]maske[/url]
Der så jeg muligheden for et persistent XSS. Inden du læser videre så prøv at kigge på det. Hvor ville du tro der var en sårbarhed? Meget at dette er også fantasi, og idé værk. Altså vær åben, tænk stort og kreativt!

For at vende tilbage, så gjorde jeg det på denne måde:
Kode:
[url="><script>alert(1);</script>][/url]

Med en cookie stealer, og så en besked til samtlige gymnasie elever, så ville jeg pludselig have cookies til rigtig mange profiler. Dette er da noget der kunne bruges?

Jeg håber det har givet en forståelse for hvad non-persistent XSS og persistent XSS er.

5. Hvad hvis alt fejler? (Bypass filtrering)
Ja så er du sq på den! Nej spøg til side. Så er det først XSS bliver avanceret. Nu skal vi til at bypass de filtrer som admin har lagt ud.
Pain in the ass, I know, men vil du igennem så er denne del meget essentiel!

Jeg vil gennemgå nogle få filter metoder, og måder at bypass på, men der er rigtig mange metoder så jeg tager nogle jeg syntes der er gode og kende, som også giver jeg en idé om hvad i selv kan gøre.

1. Bypass magic_quotes_gpc
magic_quotes_gpc findes i PHP.ini fil og filterer alle citat tegn og '-citat tegn. Så vis dit script så sådan ud:
Kode:
<script>alert("hej");</script>
Så ville det se sådan ud i stedet, efter det er blevet filtreret:
Kode:
<script>alert(/hej/);</script>
Så vil vores script altså ikke virke. Eller det vil i hvert fald ikke give vores indikator på at siden er XSS sårbar.

Måden dette kan bypasses på er ved at kryptere din vektor.
Så vi lader vores tags værre, og kigger nærmere på "alert("hej");"

En god krypterings metode er ved at bruge: String.fromCharCode()
Så ville vores script altså se sådan her ud til sidst:
Kode:
<script>String.fromCharCode(104, 101, 106)</script>
Tallene er vores tegn som er krypteret. Men aller vigtigst så optræder der ikke nogle citat tegn noget sted.

En god måde at kryptere på denne måde kan gøres ved at downloade Addonet Hackbar til Mozilla Firefox: https://addons.mozilla.org/en-US/firefox/addon/hackbar/

2. HEX Encoding
Dette er egentlig ikke så meget til noget bestemt filter, men det er et skud værd. Vi encoder simpelthen hele vores script.

Altså vil:
Kode:
<script>alert("hej");</script>
<=>
3c:73:63:72:69:70:74:3e:61:6c:65:72:74:28:22:68:65:6a:22:29:3b:3c:2f:73:63:72:69:70:74:3e

Så når vi bruger scriptet så vil det se sådan ud:
Kode:
http://www.eksempel.dk/index.php?id=3c:73:63:72:69:70:74:3e:61:6c:65:72:74:28:22:68:65:6a:22:29:3b:3c:2f:73:63:72:69:70:74:3e

Og derefter så vil vores script blive executed.
En god ASCII til HEX converter kan findes her: http://www.dolcevie.com/js/converter.html

3. Lukke et åbent tag
Nogle gange kan det være nødvendigt at lukke et åbent tag. Dette gøres ved at sætte "> ind foran vores script så det kommer til at se sådan ud:
Kode:
http://www.eksempel.dk/index.php?id="><script>alert("hej");</script>

Dette er 3 metoder som er gode at bruge. Der er selvfølgelig mange flere og en enkelt google søgning kan sikkert give dig mange bedre metoder, men som sagt så er denne guide det basaleSmile

6. XSS expert nu!
Haha der troede du lige ;) Nej det er du sq langt fra, medmindre du selvfølgelig var i forvejen :D Nej, dette er en god start til hvordan du begynder at "lege" med XSS. Der er meget mere til det end hvad jeg har gennemgået. Nogle nøgle ord du selv kan søge på google er:
  • XSS cookie stealer
  • XSS cheat sheat (flere vektorer)
  • XSS Defacement
  • XSS Malware Attack

Jeg håber dette har hjulpet dig til forståelse af emnet, og at du har fået lært noget. Hvis ikke, så er jeg sq ked af at du skulle læse så meget :=L:
Citer denne besked i et svar
04-05-2013, 22:07
#2
RE: XSS Guide For Begyndere - af SwiZz
Thumbs up. Virkelig en lækker guide :)
Følg mig på twitter: https://twitter.com/Morph3s
Find alle beskeder fra denne bruger
Citer denne besked i et svar
04-05-2013, 22:28
#3
RE: XSS Guide For Begyndere - af SwiZz
God guide, godt udseende, generelt lækker og letlæselig :)
En lille detalje du kunne tage med er, at når man bruger den til at angribe kan det være godt at skjule URL'en. Det er såmænd bare ved at hex-encode det hele som du også har forklaret, men bare med et lidt andet formål.
Et andet godt trick er at sætte kommentar-symboler ind, altså // og /* og så se hvad der sker, for det kan også sommetider udløse brugbare fejl, og med et lille kik på kildekoden finder man jo så noget i stil med det jeg fandt på hardcasa.
Mangler du hjælp?
Regler |  E-mail (PGP)
Besøg denne brugers hjemmeside Find alle beskeder fra denne bruger
Citer denne besked i et svar
05-05-2013, 14:42
#4
RE: XSS Guide For Begyndere - af SwiZz
Er glad for den gode respons! Blev sq helt bange da jeg kiggede tidligere idag da jeg ikke kunne finde den under de almindelige hacking tutorials :D
Doctor Blue: Det med at skjule havde jeg faktisk tænkt over, men som sagt så ville jeg egentlig bare ind på det basale, og selve brugen af XSS. Idéen bag tråden er også at man selv skulle kunne bygge sine egne færdigheder, såsom metoden med hex-encode for at skjule et script i et link Smile Men ja kan godt se hvad du mener!
Også det med at sætte kommentar-symboler ind, der er rigtig mange metoder og jeg mener også jeg opfordrer til at bruge google og finde "cheat sheats". Men er glad for kritiken!
Citer denne besked i et svar
06-05-2013, 16:33 (Denne besked var sidst ændret: 06-05-2013, 22:07 af Spagnum.)
#5
RE: XSS Guide For Begyndere - af SwiZz
Rigtig fin guide SwiZz, noget jeg bliver nødt til at lege lidt med på et senere tidspunkt

Edit:
Sådan min første XSS fundet! :^^::^^::^^:

[Billede: hmmXSS_zpsacbfefb9.png]
Don't learn to hack, hack to learn
Find alle beskeder fra denne bruger
Citer denne besked i et svar
01-06-2013, 09:59
#6
RE: XSS Guide For Begyndere - af SwiZz
Lækker guide du har fået smækket sammen her mate :)
Not bad!
Besøg denne brugers hjemmeside Find alle beskeder fra denne bruger
Citer denne besked i et svar
01-07-2013, 12:25
#7
RE: XSS Guide For Begyndere - af SwiZz
Lækker guide. Utrolig god for bla. begyndere. :)
Find alle beskeder fra denne bruger
Citer denne besked i et svar
« Ældre | Nyere »




User(s) browsing this thread: 1 Gæst(er)