Achim,

On Thu, Feb 16, 2012 at 6:01 PM, Achim Hoffmann <webse...@sic-sec.org> wrote:
> Hi Andrés,
>
> I'd start with following (the payload literaly):
>
>    uniqew3afid"' foo=bar --><fooled app=//evil.tld/; >
>
> The goal is to detect XSS in most variants, so how it works:
>    uniqew3afid    - find payload in response (reflected)
>    "'             - test if single and/or double quotes are encoded
>                     a further check may be if the quotes are escaped
>                     like \" (as PHP does) or &quot; and so on ...
>    --             - check if HTML comments are injectable
>                     Note: this also is a simple check if the payload
>                     gets into some XML data
>    <fooled >      - try simple HTML injection (aka content spoofing)
>                     this is a invalid tag to avoid detection by stupid
>                     filters
>    app=           - check if we can inject tag attributes
>    //evil.tld/    - check if atributes can have values *and* if it can
>                     be a URL
>    ;              - check if semicolon is escaped
>                     this is important to allow unquoted values serving
>                     as valid JavaScript or CSS, like: onfocus=alert(42);

Sounds good so far,

> Depending on the results you get, you can start injecting other payloads.
> Lucky shot:
>    complete string unencode ==> game over, XSS fully exploitable

Agreed,

> escaped quotes:
>    continue with injections without quotes

If and only if we're NOT injecting into an attr value

> escaped or removed angle braces:
>    continue with tag or attribute injection

If and only if we're not in a TEXT (<a>TEXT</a>) section, because
we're never going to be able to execute JS if we don't create some
kind of new tag and are in that context. Correct?

> removed or mangled fooled tag:
>    continue attribute injection and non-HTML injections like CSS or JS

Something similar to the above applies but I'm too tired to think ;)

> If you have a vector with vulnerability types to be check, something like:
>
>   vulns=(bracket,quote,attribute,tag,comment); // incomplete list
>
> you can write a recursive loop over this vector and check again according
> the results you get.

Sorry mate, but failed to follow your idea in this last paragraph

> Just a rough idea ...
>
> More comments below inline ...
>
> Achim
>
>
>
> Am 16.02.2012 21:21, schrieb Andres Riancho:
>> Martin, Taras,
>>
>>     While trying to code the new xss.py I've found myself in a
>> situation where I see that it's difficult to cover all cases. Just to
>> make sure we're talking about the same thing, what we're trying to do
>> is to detect reflected XSS vulnerabilities with the lowest amount of
>> HTTP requests, lowest false positive and false negative rate. This is
>> the algorithm that I'm implementing and I would like to get your
>> feedback on:
>>
>>     * Send hN<97>97"97'97(97)hN  or a similar payload  [0]
>>     * Analyze the HTML response and identify WHERE in the HTML
>> structure the payload is echoed back and WHICH special characters were
>> allowed in each context. The context is one or more of the following
>> places (taking into account that the input might be echoed more than
>> once):
>>             TAG
>>             ATTR_NAME
>>             ATTR_DOUBLE_QUOTE
>>             ATTR_SINGLE_QUOTE
>>             TEXT
>>             COMMENT
>>             SCRIPT
>>             CDATA
>
> I don't see a reason for CDATA as long as we're in HTML/CSS/JS context.
>
>>     * This should give us a result similar to this:
>>         [ (ATTR_NAME, ['<','>', '"' ...]) , (TEXT, ['"', '\'', '(', ')']) ]
>>     * Then we could analyze that result and say: "For an XSS
>> vulnerability to appear in an ATTR_NAME I have to be able to send a
>> double quote". If it is possible in this case then the plugin should
>> send a specific payload for that case, something similar to --"
>> onload="foo()"--
>
> The assumtion about the quote is wrong. You may use
>   attr=value
>   attr = value
>   attr='value'
>   attr="value"

    Yes, I was taking those into account

>   attr=`IE only`
>   attr
>        =
>        IE-only

    I hate IE , it breaks my XSS detection algorithm ;)

>
>>     * Finally, analyze the second response body and if there is an
>> attribute in one of the DOM objects that's called "onload" and it's
>> text is "foo()" then we have a XSS.
>
> Hmm, I'd use one more request to avoid false negatives. Again there
> might be a stupid blacklist which filters for example onmouseover but
> not onclick. So I'd use first:
>    aEvent=confirm();
> If it is unencoded in the response, we at least have a potential XSS,
> which fires if there is any browser implementing aEvent.
> Then we also check if is exploitable actually, we use something like:
>   onfocus=prompt();

    Understood.

>
>>
>>     Ideas? Does this cover all major cases? Should we have two or more
>> XSS detection algorithms and run them all (configurable by the user)?
>
> Hmm, there're pros and cons to offer configuration.
> As it is a automated fuzzing, I don't care how many requests fail if
> the filter finally does work correctly.
> On the other side an option for advanced users can be helpfull in some
> cases.
> So my suggestion: first approach with full payload, second approach
> configurable, third ...
>
>
>> [0] The problem with this are filters that say: "If special char X in
>> input then don't echo anything", where "X" might be "<" and that
>> affects our possibility to detect if any of the rest of the chars are
>> allowed
>>
>> Regards,
>



-- 
Andrés Riancho
Director of Web Security at Rapid7 LLC
Founder at Bonsai Information Security
Project Leader at w3af

------------------------------------------------------------------------------
Virtualization & Cloud Management Using Capacity Planning
Cloud computing makes use of virtualization - but cloud computing 
also focuses on allowing computing to be delivered as a service.
http://www.accelacomm.com/jaw/sfnl/114/51521223/
_______________________________________________
W3af-develop mailing list
W3af-develop@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/w3af-develop

Reply via email to