<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
    <channel>
        <title>Greasemonkey XSS assistant</title>
        <description>It occured to me today to make a greasemonkey script to help people find XSS flaws in various forms. My idea so far:
Run through every form and insert an image like [img]http://img60.imageshack.us/img60/6074/xssdw1.gif[/img] at the start of every form.
Everything is then done through a menu that appears when you click that icon.
The options on that menu would be:
1. Show details of form - Show the action of the form, as well as the method and any hidden elements, also it'd show the name of every field.
2. Duplicate form - this would open a new tab to the current page and fill the form in as it is currently filled in (I'm not sure if the filling in part is possible, but I'd try).
3. Fill in every text field with an entry from the XSS cheat sheet (the script would dynamically load and parse the file, good thing the xml version was made). Which entry to fill it in with would be picked from a sub menu.
4. Create link to PoC - If the form uses GET this would create a link to the target page with the flaws as querystrings, if POST is used it'll auto generate the url to my script, but that would be changeble in the options.

I realise a lot of this is int he web developer extension, but I don't have that and I think keeping it with this makes sense.

What do you guys think? Can you think of what should be added, removed or changed?

Edit: I'd also allow users to create their own XSS injections to be included into the list.

Edit2: Instead of always running the script I'll do:[code]GM_registerMenuCommand(&quot;Start XSSing forms&quot;, start);
GM_registerMenuCommand(&quot;Stop XSSing forms&quot;, stop);[/code] which will let the user start and stop XSSing at will.</description>
        <link>http://sla.ckers.org/forum/read.php?12,1919,1919#msg-1919</link>
        <lastBuildDate>Sat, 25 May 2013 05:15:53 -0500</lastBuildDate>
        <generator>Phorum 5.2.15a</generator>
        <item>
            <guid>http://sla.ckers.org/forum/read.php?12,1919,29376#msg-29376</guid>
            <title>Re: Greasemonkey XSS assistant</title>
            <link>http://sla.ckers.org/forum/read.php?12,1919,29376#msg-29376</link>
            <description><![CDATA[What's it going to take to make this script FF3 compatable, as I'm willing to try and sort it out, but I'm not too sure where to even start?]]></description>
            <dc:creator>xyberpix</dc:creator>
            <category>Projects</category>
            <pubDate>Sun, 19 Jul 2009 17:12:00 -0500</pubDate>
        </item>
        <item>
            <guid>http://sla.ckers.org/forum/read.php?12,1919,29357#msg-29357</guid>
            <title>Re: Greasemonkey XSS assistant</title>
            <link>http://sla.ckers.org/forum/read.php?12,1919,29357#msg-29357</link>
            <description><![CDATA[I want the firefox 3.5 version]]></description>
            <dc:creator>ted</dc:creator>
            <category>Projects</category>
            <pubDate>Fri, 17 Jul 2009 22:25:31 -0500</pubDate>
        </item>
        <item>
            <guid>http://sla.ckers.org/forum/read.php?12,1919,24073#msg-24073</guid>
            <title>Re: Greasemonkey XSS assistant</title>
            <link>http://sla.ckers.org/forum/read.php?12,1919,24073#msg-24073</link>
            <description><![CDATA[This is made of win and awesome. Do want ff3 version]]></description>
            <dc:creator>asilvermtzion</dc:creator>
            <category>Projects</category>
            <pubDate>Thu, 14 Aug 2008 14:15:43 -0500</pubDate>
        </item>
        <item>
            <guid>http://sla.ckers.org/forum/read.php?12,1919,23799#msg-23799</guid>
            <title>Re: Greasemonkey XSS assistant</title>
            <link>http://sla.ckers.org/forum/read.php?12,1919,23799#msg-23799</link>
            <description><![CDATA[There are some issues with the GM eval() method. I recently talked to someone who said he wanted to try to fix it. If done I will post here with credits.]]></description>
            <dc:creator>Anonymous User</dc:creator>
            <category>Projects</category>
            <pubDate>Sun, 03 Aug 2008 10:08:38 -0500</pubDate>
        </item>
        <item>
            <guid>http://sla.ckers.org/forum/read.php?12,1919,23758#msg-23758</guid>
            <title>Re: Greasemonkey XSS assistant</title>
            <link>http://sla.ckers.org/forum/read.php?12,1919,23758#msg-23758</link>
            <description><![CDATA[Great tool, keeps me from memorizing all those vectors! :) Any plans to update for FF3?  Any idea what happened in FF3 that broke the script?<br />
<br />
-straylight]]></description>
            <dc:creator>straylight</dc:creator>
            <category>Projects</category>
            <pubDate>Thu, 31 Jul 2008 08:43:28 -0500</pubDate>
        </item>
        <item>
            <guid>http://sla.ckers.org/forum/read.php?12,1919,23747#msg-23747</guid>
            <title>Re: Greasemonkey XSS assistant</title>
            <link>http://sla.ckers.org/forum/read.php?12,1919,23747#msg-23747</link>
            <description><![CDATA[Nup<br />
<br />
But love the porn spam.]]></description>
            <dc:creator>Anonymous User</dc:creator>
            <category>Projects</category>
            <pubDate>Wed, 30 Jul 2008 17:00:38 -0500</pubDate>
        </item>
        <item>
            <guid>http://sla.ckers.org/forum/read.php?12,1919,23740#msg-23740</guid>
            <title>Re: Greasemonkey XSS assistant</title>
            <link>http://sla.ckers.org/forum/read.php?12,1919,23740#msg-23740</link>
            <description><![CDATA[Does it work in Firefox 3? <br />
<br />
I have some problems with it, the image (xss) does not appear.]]></description>
            <dc:creator>macguffin</dc:creator>
            <category>Projects</category>
            <pubDate>Wed, 30 Jul 2008 06:55:12 -0500</pubDate>
        </item>
        <item>
            <guid>http://sla.ckers.org/forum/read.php?12,1919,20391#msg-20391</guid>
            <title>Re: Greasemonkey XSS assistant</title>
            <link>http://sla.ckers.org/forum/read.php?12,1919,20391#msg-20391</link>
            <description><![CDATA[You can find it here:<br />
http://groups.google.com/group/xss-assistant/browse_thread/thread/369dd328249d77ba]]></description>
            <dc:creator>Anonymous User</dc:creator>
            <category>Projects</category>
            <pubDate>Sat, 09 Feb 2008 05:07:22 -0600</pubDate>
        </item>
        <item>
            <guid>http://sla.ckers.org/forum/read.php?12,1919,20390#msg-20390</guid>
            <title>Re: Greasemonkey XSS assistant</title>
            <link>http://sla.ckers.org/forum/read.php?12,1919,20390#msg-20390</link>
            <description><![CDATA[that last message was with purpose of preserving the script - i just can't find it anywhere on net (http://www.whiteacid.org/greasemonkey/ is inaccessible).]]></description>
            <dc:creator>mstampar</dc:creator>
            <category>Projects</category>
            <pubDate>Sat, 09 Feb 2008 05:02:23 -0600</pubDate>
        </item>
        <item>
            <guid>http://sla.ckers.org/forum/read.php?12,1919,20389#msg-20389</guid>
            <title>Re: Greasemonkey XSS assistant</title>
            <link>http://sla.ckers.org/forum/read.php?12,1919,20389#msg-20389</link>
            <description><![CDATA[// ==UserScript==<br />
// @name          XSS assistant<br />
// @description	  This will help people find Cross site scripting flaws in forms as well and ease making a PoC from the XSS which is easy to show people.<br />
// @include       *<br />
// ==/UserScript==<br />
<br />
/*<br />
How to use:<br />
Install this script into greasemonkey. To start XSSing forms select tools &gt; Greasemonkey &gt; User script commands &gt; Start XSSing forms.<br />
From now on all forms on all pages will have an image by them, clicking that image will bring up a menu with plenty of options to help<br />
you speedily find flaws in the form.<br />
To stop XSSing forms (which means the image won't appear anymore) select tools &gt; Greasemonkey &gt; User script commands &gt; Stop XSSing forms.<br />
<br />
Don't forget you can change some variables just below this block of comments<br />
*/<br />
<br />
//USER SETINGS START<br />
//list of xml files to read to get the XSS vectors from<br />
//vectorsURL = new Array(&quot;http://ha.ckers.org/xssAttacks.xml&quot;,&quot;http://127.0.0.1/xss.xml&quot;)<br />
vectorsURL = new Array(&quot;http://ha.ckers.org/xssAttacks.xml&quot;)<br />
//The url of the page which can showcase XSSes using POST. default = &quot;http://www.whiteacid.org/misc/xss_post_forwarder.php&quot;<br />
setting_PoC_POST = &quot;http://www.whiteacid.org/misc/xss_post_forwarder.php&quot;<br />
//USER SETTINGS END<br />
<br />
glb_xss = new Array()<br />
glb_forms = new Array()<br />
<br />
//Load the remote XML files with all the XSSes in them<br />
function getRemoteXMLFiles()<br />
{<br />
	for (i=0; i&lt;vectorsURL.length; i++)<br />
	{<br />
		GM_xmlhttpRequest<br />
		(<br />
			{<br />
				method:&quot;GET&quot;,<br />
				url:vectorsURL<i>,<br />
				headers:<br />
				{<br />
					&quot;User-Agent&quot;:&quot;XSS assistant&quot;,<br />
					&quot;Accept&quot;:&quot;text/xml&quot;,<br />
				},<br />
				onload:function(details)<br />
				{<br />
					add2glb_xss(this.url,parseXML(details.responseText))<br />
					<br />
					//As a one time thing we need to set the default list of values in the second select box<br />
					//We can only do this after the first AJAX request has been returned, so this is where we do it<br />
					if (glb_xss.length == 1)<br />
					{<br />
						changeVectors(this.url)<br />
					}<br />
				}<br />
			}<br />
		)<br />
	}<br />
}<br />
<br />
//Given the remote XML files, store that data<br />
function add2glb_xss(url,xml)<br />
{<br />
	glb_xss.push(new Array(url,xml.name,xml.vector))<br />
}<br />
<br />
//Find all forms on the page and add the relevant image button by them<br />
function findForms()<br />
{<br />
	xss_images = new Array() //array of all images<br />
	frms = document.forms //array of all forms<br />
	for (i=0; i&lt;frms.length; i++) //for each form<br />
	{<br />
		xss_images.push(createButton(i)) //create a new image<br />
		frms<i>.insertBefore(xss_images[xss_images.length-1],document.forms<i>.firstChild) //insert image as first thing inside form<br />
		glb_forms.push(new Array(i,frms<i>.innerHTML))<br />
	}<br />
}<br />
<br />
//creates the button which when clicked brings up the menu<br />
function createButton(n)<br />
{<br />
	x = document.createElement('img')<br />
	x.src = &quot;data:image/gif,GIF89aP%00%0F%00%91%00%00%00%00%00%FFf%00%FF%FF%FF%00%00%00!%F9%04%00%00%00%00%00%2C%00%00%00%00P%00%0F%00%40%02%86%84%8F%A9%CB%ED%0F%8F%084%CCY%B3%D5%14%5B%01%86!%20%0A%A4)%92%E7%C8%96%AE%E1q%F2%9C%B9%F6%8D%E78L%F7%B4%0E%0C%06y%BEbM%88L%8EH%B5%8D%26V%81~n%2B%D0%A9zM%A9%AAT%A6%F1%AB%0C%0B%23%E4%B2%F9%BC%10%AB%D7a%E2%B7%C8%8Ek%3DtN%E8%09%8A%EE%60%CB%92%24%D5%92%E3%D61%93%87w%D4%B5%92%B5%C4%A5%82%A2%E3V%87%88%17%23%F8%D2h%05%98%09%E9%F5%E6%23%07%CA%07%3A%1AZ%00%00%3B&quot;<br />
	x.alt = n //Just for holding the form number<br />
	x.setAttribute(&quot;onclick&quot;,&quot;openMenu(this)&quot;)<br />
	x.setAttribute(&quot;style&quot;,&quot;display: block; z-index: 9&quot;)<br />
	return x<br />
}<br />
<br />
//Opens the menu and places it at the button which called this function<br />
function openMenu(getter)<br />
{<br />
	father = document.getElementById('menu_father')<br />
	coords = findPos(getter)<br />
<br />
	father.style.top = coords.top+&quot;px&quot;<br />
	father.style.display = 'block'<br />
	//If the box is off the bottom or off too far to the right, bring it home (this can only be done after we've set father.style.display = &quot;block&quot;<br />
	while (coords.left+getter.offsetWidth+5+father.offsetWidth &gt; screen.width)<br />
	{<br />
		coords.left--<br />
	}<br />
	father.style.left = coords.left+getter.offsetWidth+5+&quot;px&quot;<br />
	//And now for height - broken (hence commented out)<br />
	/*<br />
	while (coords.top+father.offsetHeight &gt; (screen.height)+coords.top)<br />
	{<br />
		coords.top--<br />
	}<br />
	father.style.top = coords.top+getter.offsetHeight+&quot;px&quot;<br />
	*/<br />
	<br />
	//Enter the form info in the menu's heading<br />
	heading = document.getElementById('menu_heading')<br />
<br />
	heading.innerHTML = &quot;Form &quot;+getter.alt<br />
	try<br />
	{<br />
		heading.innerHTML += &quot; [&quot;+getter.parentNode.name+&quot;]&quot;<br />
	} catch (err) {}<br />
	<br />
	//shove the correct options into the menu_target_select select box<br />
	targets = document.getElementById('menu_target_select')<br />
	//remove existing elements<br />
	while (targets.childNodes.length != 0)<br />
		targets.removeChild(targets.childNodes[0])<br />
	<br />
	children = getChildren(document.forms[getFormNumber()])<br />
	<br />
	//Add the global option<br />
	tmp = document.createElement('option')<br />
	tmp.value  = &quot;&quot;<br />
	tmp.innerHTML = &quot;#GLOBAL#&quot;<br />
	targets.appendChild(tmp)<br />
	<br />
	//Loop through named elements and add them<br />
	for (i=0; i&lt;children.length; i++)<br />
	{<br />
		try<br />
		{<br />
			if (children<i>.hasAttribute('name'))<br />
			{<br />
				tmp = document.createElement('option')<br />
				tmp.value  = children<i>.name<br />
				tmp.innerHTML = children<i>.name<br />
				targets.appendChild(tmp)<br />
			}<br />
		}<br />
		catch(err) {}<br />
	}<br />
}<br />
<br />
//Function to create the menu<br />
function createMenu()<br />
{<br />
	//Create top level of menu<br />
	father = document.createElement('div')<br />
	father.id = &quot;menu_father&quot;<br />
	father.setAttribute(&quot;style&quot;,&quot;display: none; position: absolute; z-index: 10; top: 0px; left: 0px; style;&quot;)<br />
<br />
	//the title bar (empty but allows the box to be dragged)<br />
	title = document.createElement('div')<br />
	title.setAttribute(&quot;onmousedown&quot;,&quot;dragStart(event,'menu_father')&quot;)<br />
	title.appendChild(document.createElement('br'))<br />
	title.setAttribute(&quot;style&quot;, &quot;cursor: move; border: none;&quot;)<br />
	father.appendChild(title)<br />
<br />
	//The heading with the info of the form that currently being looked at<br />
	heading = document.createElement('div')<br />
	heading.id = &quot;menu_heading&quot;<br />
	father.appendChild(heading)<br />
	<br />
	//Create the options<br />
	//Show info will show all the info about the form including the forms target and method as well as the name attribute of every element<br />
	showInfo = document.createElement('div')<br />
	showInfo.innerHTML = &quot;Show form information&quot;<br />
	showInfo.setAttribute(&quot;onclick&quot;,&quot;showInfo()&quot;)<br />
	father.appendChild(showInfo)<br />
	<br />
	//A couple of select boxes allowing the user to apply certain XSS vectors.<br />
	vectors_div = createVectors()<br />
	father.appendChild(vectors_div)<br />
	<br />
	//The create PoC function will supply the user with a ready-to-copy-n-paste link to showcase their XSS.<br />
	PoC = document.createElement('div')<br />
	PoC.innerHTML = &quot;Generate PoC link&quot;<br />
	PoC.setAttribute(&quot;onclick&quot;,&quot;createPoC()&quot;)<br />
	father.appendChild(PoC)<br />
	<br />
	//The reset function sets the form back to how it was when the page loaded.<br />
	reset = document.createElement('div')<br />
	reset.innerHTML = &quot;Reset form&quot;<br />
	reset.setAttribute(&quot;onclick&quot;,&quot;resetForm()&quot;)<br />
	father.appendChild(reset)<br />
	<br />
	//Create a submit form button<br />
	submit = document.createElement('div')<br />
	submit.innerHTML = &quot;Submit form&quot;<br />
	submit.setAttribute(&quot;onclick&quot;,&quot;submitForm()&quot;)<br />
	father.appendChild(submit)<br />
	<br />
	//The close button, closes the menu<br />
	close_button = document.createElement('input')<br />
	close_button.type = &quot;button&quot;<br />
	close_button.value = &quot; [ close ] &quot;<br />
	close_button.setAttribute(&quot;onclick&quot;,&quot;hideMe(document.getElementById('menu_father'))&quot;)<br />
	father.appendChild(close_button)<br />
	<br />
	//And shove the whole box onto the document.<br />
	document.body.appendChild(father) //hehe, semantics went out the window there<br />
}<br />
<br />
//Function which creates the bar which lets you XSS the querystrings<br />
function createGETBar(GET)<br />
{<br />
	<br />
	bar = document.createElement('div')<br />
	bar.className = &quot;GETBar&quot;<br />
	//An error may have occured when reading the querystring<br />
	if (GET == 'ERROR')<br />
	{<br />
		bar.innerHTML = &quot;Error, cannot read the querystring variables and corresponding values&quot;<br />
		document.body.appendChild(bar)<br />
		return<br />
	}<br />
	<br />
	//An easy way to let people XSS these variables is by creating a hidden form and then just letting the rest of the script treat it as such<br />
	form = document.createElement('form')<br />
	form.method = &quot;get&quot;<br />
	form.action = location.href.substring(0,location.href.indexOf(&quot;?&quot;))<br />
	form.id = &quot;xss_querystring&quot;<br />
	<br />
	//Start looping through each GETed variable and add that to this form<br />
	for (i=0; i&lt;GET.list_name.length; i++)<br />
	{<br />
		tmp = document.createElement('input')<br />
		tmp.type = 'hidden'<br />
		tmp.setAttribute('name',GET.list_name<i>)<br />
		tmp.setAttribute('value',GET.list_value<i>)<br />
		form.appendChild(tmp)<br />
	}<br />
	<br />
	bar.appendChild(form)<br />
	<br />
	document.body.appendChild(bar)<br />
}<br />
<br />
//Given the returned code from a remote location, turn it into usable XML<br />
function parseXML(html)<br />
{<br />
	names = new Array()<br />
	vectors = new Array()<br />
	parser = new DOMParser()<br />
	var dom = parser.parseFromString(html,&quot;application/xml&quot;)<br />
	var entries = dom.getElementsByTagName('attack')<br />
	for (var i = 0; i &lt; entries.length; i++)<br />
	{<br />
		names.push(entries<i>.getElementsByTagName('name')[0].textContent)<br />
		vectors.push(entries<i>.getElementsByTagName('code')[0].textContent)<br />
	}<br />
	return {name:names,vector:vectors}<br />
}<br />
<br />
//Show the info about a form<br />
showInfoDone = new Array()<br />
function showInfo()<br />
{<br />
	x = getFormNumber()<br />
	//Check if already done<br />
	for (i=0; i&lt;showInfoDone.length; i++)<br />
	{<br />
		if (showInfoDone<i> == x)<br />
		{<br />
			alert(&quot;Already shown information on this form.\nIf you want to run it again reset the status and run this again.&quot;)<br />
			return false;<br />
		}<br />
	}<br />
	showInfoDone.push(x)<br />
	<br />
	f = document.forms[x]<br />
	//Add the forms info<br />
	x = document.createElement('span')<br />
	x.setAttribute(&quot;class&quot;,&quot;form_info&quot;)<br />
	x.innerHTML = &quot;name: &quot;+f.name+&quot;&lt;br /&gt;target: &quot;+f.target+&quot;&lt;br /&gt;&quot;<br />
	f.insertBefore(x,f.childNodes[1])<br />
	<br />
	//Go through all nodes with a name attribute and add info about them<br />
	children = getChildren(f)<br />
	for (i=0; i&lt;children.length; i++)<br />
	{<br />
		try<br />
		{<br />
			if (children<i>.hasAttribute('name'))<br />
			{<br />
				x = document.createElement('span')<br />
				x.setAttribute(&quot;class&quot;,&quot;form_info&quot;)<br />
				x.innerHTML = children<i>.name<br />
				children<i>.parentNode.insertBefore(x,children<i>)<br />
			}<br />
			//Show any hidden elements<br />
			if (children<i>.type == &quot;hidden&quot;)<br />
				children<i>.type = &quot;text&quot;<br />
		}<br />
		catch(err) {}<br />
	}<br />
}<br />
<br />
//Create the select boxes and return their objects.<br />
function createVectors()<br />
{<br />
	holder = document.createElement('div')<br />
	<br />
	url_list = document.createElement('select')<br />
	url_list.setAttribute('onchange','changeVectors(this.value)')<br />
	<br />
	vector_list = document.createElement('select')<br />
	vector_list.id = &quot;menu_vector_select&quot;<br />
	<br />
	target_list = document.createElement('select')<br />
	target_list.id = &quot;menu_target_select&quot;<br />
	<br />
	apply_button = document.createElement('input')<br />
	apply_button.type = &quot;button&quot;<br />
	apply_button.value = &quot;apply&quot;<br />
	apply_button.setAttribute('onclick','applyVectors(document.getElementById(&quot;menu_target_select&quot;).value,document.getElementById(&quot;menu_vector_select&quot;).value)')<br />
	<br />
<br />
	for (i=0; i&lt;vectorsURL.length; i++)<br />
	{<br />
		x = document.createElement('option')<br />
		x.value = vectorsURL<i><br />
		x.innerHTML = getDomain(vectorsURL<i>)<br />
		url_list.appendChild(x)<br />
	}<br />
	<br />
	x = document.createElement('option')<br />
	x.innerHTML = &quot;Select a vector&quot;<br />
	x.value = &quot;&quot;<br />
	vector_list.appendChild(x)<br />
	holder.appendChild(url_list)<br />
	holder.appendChild(vector_list)<br />
	holder.appendChild(document.createElement(&quot;br&quot;))<br />
	holder.appendChild(target_list)<br />
	holder.appendChild(apply_button)<br />
	return holder<br />
}<br />
<br />
//Function will change which vectors are visible in the second select box, shows the vectors from the source supplied as parameter.<br />
function changeVectors(val)<br />
{<br />
	for (i=0; i&lt;glb_xss.length; i++)<br />
	{<br />
		if (glb_xss<i>[0] == val)<br />
		{<br />
			o = document.getElementById('menu_vector_select')<br />
			o.innerHTML = &quot;&quot; //clear any old data<br />
			x = document.createElement('option')<br />
			x.innerHTML = &quot;Select a vector&quot;<br />
			x.value = &quot;&quot;<br />
			o.appendChild(x)<br />
			for (j=0; j&lt;glb_xss<i>[1].length; j++)<br />
			{<br />
				x = document.createElement('option')<br />
				x.value = glb_xss<i>[2][j]<br />
				x.innerHTML = glb_xss<i>[1][j]<br />
				o.appendChild(x)<br />
			}<br />
		}<br />
	}<br />
}<br />
<br />
//Apply a certain vector to all elements in form which have a name attribute<br />
function applyVectors(target,vector)<br />
{<br />
	f = document.forms[getFormNumber()]<br />
	<br />
	children = getChildren(f)<br />
	<br />
	//If we are to apply globally<br />
	if (target == &quot;&quot;)<br />
	{<br />
		for (i=0; i&lt;children.length; i++)<br />
		{<br />
			try<br />
			{<br />
				if (children<i>.hasAttribute('name'))<br />
				{<br />
					if (children<i>.hasAttribute('maxlength'))<br />
						children<i>.removeAttribute('maxlength')<br />
					children<i>.value = vector<br />
				}<br />
				//Show any hidden elements<br />
				if (children<i>.type == &quot;hidden&quot;)<br />
					children<i>.type = &quot;text&quot;<br />
			}<br />
			catch(err) {}<br />
		}<br />
	}<br />
	else //If we are to apply only to one element<br />
	{<br />
		for (i=0; i&lt;children.length; i++)<br />
		{<br />
			if (children<i>.name == target)<br />
			{<br />
				children<i>.removeAttribute('maxlength')<br />
				children<i>.value = vector<br />
			}<br />
		}<br />
	}<br />
}<br />
<br />
//Create a prompt box which allows users to easily copy paste PoC links<br />
function createPoC()<br />
{<br />
	f = document.forms[getFormNumber()]<br />
	method = f.method.toLowerCase()<br />
	target = f.target<br />
	if (target == &quot;&quot;)<br />
		target = location.href<br />
	if (method != &quot;post&quot;) //incase they are odd, or didn't supply one then default to get<br />
		method = &quot;get&quot;<br />
	if (method == &quot;get&quot;)<br />
	{<br />
		//Scrap any existing querystring variables in the target<br />
		if (target.indexOf(&quot;?&quot;) &gt; -1)<br />
		{<br />
			target = target.substring(0,target.indexOf(&quot;?&quot;))<br />
		}<br />
		<br />
		target += &quot;?&quot;<br />
		children = getChildren(f)<br />
		target = addToTarget(target,children)<br />
		//Chop off the last &amp;<br />
		target = target.substr(0,target.length-1)<br />
		<br />
		prompt(&quot;Copy the below url&quot;,target)<br />
	}<br />
	else<br />
	{<br />
		//Esacpe any existing querystring variables in the target<br />
		if (target.indexOf(&quot;?&quot;) &gt; -1)<br />
		{<br />
			target = target.substring(0,target.indexOf(&quot;?&quot;)) + escape(target.substring(target.indexOf(&quot;?&quot;),target.length))<br />
		}<br />
		target = setting_PoC_POST+&quot;?xss_target=&quot;+target+&quot;&amp;&quot;<br />
		children = getChildren(f)<br />
		target = addToTarget(target,children)<br />
		//Chop off the last &amp;<br />
		target = target.substr(0,target.length-1)<br />
		<br />
		prompt(&quot;Copy the below url&quot;,target)<br />
	}<br />
	<br />
}<br />
<br />
//Reset form to how it was when the page loaded<br />
function resetForm()<br />
{<br />
	x = getFormNumber()<br />
	f = document.forms[x]<br />
	f.innerHTML = glb_forms[x][1]<br />
	<br />
	//Find and remove from the showInfoDone array<br />
	for (i=0; i&lt;showInfoDone.length; i++)<br />
		if (showInfoDone<i> == x)<br />
		{<br />
			showInfoDone.splice(i,1)<br />
			return true //End function so we don't do unnecessary work<br />
		}<br />
}<br />
<br />
//Submit the form, useful if the submit button isn't there, for whatever reason<br />
function submitForm()<br />
{<br />
	//Why am I using a variable at all? cos rdivilbiss said:<br />
		/*<br />
		I had a similar problem with form fields once were document.forms[0].field returned the correct reference but document.forms[0].field.focus() returned not a function.<br />
		I was able to work around that with;<br />
		tmp = document.forms[0].field;<br />
		tmp.focus();<br />
		I still to this day don't know why I had to do that but it worked. <br />
		*/<br />
	tmp = document.forms[getFormNumber()]<br />
	tmp.submit()<br />
}<br />
<br />
//Using the &quot;Form 1 [form_name]&quot; field, we'll get the forms number<br />
function getFormNumber()<br />
{<br />
	x = document.getElementById('menu_heading').innerHTML<br />
	x = parseInt(x.substring(4,x.length))<br />
	return x<br />
}<br />
<br />
//Given a url, get that urls domain<br />
function getDomain(url)<br />
{<br />
	url = url.substring(7,url.length)<br />
	url = url.substr(0,(url.search(&quot;/&quot;) &gt; -1)? url.search(&quot;/&quot;):url.length)<br />
	return url<br />
}<br />
<br />
//Recusively find all children of one node minus the text nodes<br />
function getChildren(obj)<br />
{<br />
	var children = new Array()<br />
	for (var i=0; i&lt;obj.childNodes.length; i++)<br />
	{<br />
		if (obj.childNodes<i>.type != 3) //type 3 is a text node<br />
		{<br />
			children.push(obj.childNodes<i>)<br />
			if (obj.childNodes<i>.hasChildNodes())<br />
			{<br />
				x = getChildren(obj.childNodes<i>)<br />
				for (j=0; j&lt;x.length; j++)<br />
					children.push(x[j])<br />
			}<br />
		}<br />
	}<br />
	return children<br />
}<br />
<br />
//Hide an object<br />
function hideMe(obj)<br />
{<br />
	obj.style.display = &quot;none&quot;<br />
}<br />
<br />
function addToTarget(target,children)<br />
{<br />
	for (i=0; i&lt;children.length; i++)<br />
	{<br />
		try<br />
		{<br />
			if (children<i>.hasAttribute('name'))<br />
			{<br />
				target += children<i>.name+&quot;=&quot;+children<i>.value+&quot;&amp;&quot;<br />
			}<br />
		}<br />
		catch(err) {}<br />
	}<br />
	return target<br />
}<br />
<br />
//Function to find the X and Y co-ordinates of where the menu should go. Returns both within a struct, of sorts<br />
function findPos(obj)<br />
{<br />
	var curtop = 0;<br />
	var curleft = 0;<br />
	if (obj.offsetParent)<br />
	{<br />
		while (obj.offsetParent)<br />
		{<br />
			curtop += obj.offsetTop<br />
			curleft += obj.offsetLeft<br />
			obj = obj.offsetParent<br />
		}<br />
	}<br />
	return {left:curleft,top:curtop}<br />
}<br />
<br />
//A crap load of functions for dragging from http://www.brainjar.com/dhtml/drag/demo.html<br />
//Removed browser checking<br />
<br />
//*****************************************************************************<br />
// Do not remove this notice.<br />
//<br />
// Copyright 2001 by Mike Hall.<br />
// See http://www.brainjar.com for terms of use.<br />
//*****************************************************************************<br />
<br />
// Determine browser and version.<br />
<br />
function Browser() {<br />
<br />
  var ua, s, i;<br />
<br />
  this.isNS    = false;<br />
  this.version = null;<br />
<br />
  ua = navigator.userAgent;<br />
<br />
<br />
  // Treat any other &quot;Gecko&quot; browser as NS 6.1.<br />
  s = &quot;Gecko&quot;;<br />
  if ((i = ua.indexOf(s)) &gt;= 0) {<br />
    this.isNS = true;<br />
    this.version = 6.1;<br />
    return;<br />
  }<br />
}<br />
<br />
var browser = new Browser();<br />
<br />
// Global object to hold drag information.<br />
<br />
var dragObj = new Object();<br />
dragObj.zIndex = 0;<br />
<br />
function dragStart(event, id) {<br />
<br />
  var el;<br />
  var x, y;<br />
<br />
  // If an element id was given, find it. Otherwise use the element being<br />
  // clicked on.<br />
<br />
  if (id)<br />
    dragObj.elNode = document.getElementById(id);<br />
  else {<br />
    dragObj.elNode = event.target;<br />
<br />
    // If this is a text node, use its parent element.<br />
<br />
    if (dragObj.elNode.nodeType == 3)<br />
      dragObj.elNode = dragObj.elNode.parentNode;<br />
  }<br />
<br />
  // Get cursor position with respect to the page.<br />
<br />
  x = event.clientX + window.scrollX;<br />
  y = event.clientY + window.scrollY;<br />
<br />
  // Save starting positions of cursor and element.<br />
<br />
  dragObj.cursorStartX = x;<br />
  dragObj.cursorStartY = y;<br />
  dragObj.elStartLeft  = parseInt(dragObj.elNode.style.left, 10);<br />
  dragObj.elStartTop   = parseInt(dragObj.elNode.style.top,  10);<br />
<br />
  if (isNaN(dragObj.elStartLeft)) dragObj.elStartLeft = 0;<br />
  if (isNaN(dragObj.elStartTop))  dragObj.elStartTop  = 0;<br />
<br />
  // Update element's z-index.<br />
<br />
  dragObj.elNode.style.zIndex = ++dragObj.zIndex;<br />
<br />
  // Capture mousemove and mouseup events on the page.<br />
<br />
  document.addEventListener(&quot;mousemove&quot;, dragGo,   true);<br />
  document.addEventListener(&quot;mouseup&quot;,   dragStop, true);<br />
  event.preventDefault();<br />
}<br />
<br />
function dragGo(event) {<br />
<br />
  var x, y;<br />
<br />
  // Get cursor position with respect to the page.<br />
<br />
  x = event.clientX + window.scrollX;<br />
  y = event.clientY + window.scrollY;<br />
<br />
  // Move drag element by the same amount the cursor has moved.<br />
<br />
  dragObj.elNode.style.left = (dragObj.elStartLeft + x - dragObj.cursorStartX) + &quot;px&quot;;<br />
  dragObj.elNode.style.top  = (dragObj.elStartTop  + y - dragObj.cursorStartY) + &quot;px&quot;;<br />
<br />
  event.preventDefault();<br />
}<br />
<br />
function dragStop(event) {<br />
<br />
  // Stop capturing mousemove and mouseup events.<br />
<br />
  document.removeEventListener(&quot;mousemove&quot;, dragGo,   true);<br />
  document.removeEventListener(&quot;mouseup&quot;,   dragStop, true);<br />
}<br />
///////////////////////////////ENDETH THE DRAGGING FNUCTIONS<br />
<br />
<br />
//Function to read the querystring<br />
function v_GET_init()<br />
{<br />
    v_GET = new Object()<br />
    v_GET.list_name = new Array()<br />
    v_GET.list_value = new Array()<br />
    <br />
    v_GET.raw = location.href.substring(location.href.indexOf('?')+1,location.href.length)<br />
    getted_var = v_GET.raw.split(&quot;&amp;&quot;)<br />
    for (i=0; i&lt;getted_var.length; i++)<br />
    {<br />
        getted_var_name = getted_var<i>.substring(0,getted_var<i>.search('='))<br />
        getted_var_value = getted_var<i>.substring(getted_var<i>.search('=')+1,getted_var<i>.length)<br />
        v_GET.list_name.push(getted_var_name)<br />
        v_GET.list_value.push(getted_var_value)<br />
    }<br />
    return v_GET<br />
}<br />
<br />
//If this is the main page (not an iframe), add the buttons to the toolbar allowing user to start/stop<br />
if (location.href == top.location)<br />
{<br />
	GM_registerMenuCommand(&quot;Start XSSing forms&quot;, start)<br />
	GM_registerMenuCommand(&quot;Stop XSSing forms&quot;, stop)<br />
}<br />
<br />
//Create functions those buttons call<br />
function start() { GM_setValue(&quot;live&quot;, true) }<br />
function stop() { GM_setValue(&quot;live&quot;, false) }<br />
<br />
//Add some CSS<br />
GM_addStyle('#menu_father {background-color:#BCD2EE; padding: 2px;}')<br />
GM_addStyle('#menu_father div {display:block; border: solid #000; border-width: 1px; cursor: pointer;}')<br />
GM_addStyle('.form_info {color:red; background-color:#ffe4c4; font-size:small; font-family:Courier New, arial;}')<br />
GM_addStyle('.GETBar {color:black; background-color:#ffff00; text-align:center; position: absolute; top: 0px; left: 40%; width: 20%; padding: 3px; cursor: pointer; font-size:small; font-family:Courier New, arial;}')<br />
GM_addStyle('.GETBar * {display: inline !important;}')<br />
<br />
//Write some function onto the page<br />
unsafeWindow.eval(openMenu.toString())<br />
unsafeWindow.eval(findPos.toString())<br />
unsafeWindow.eval(hideMe.toString())<br />
unsafeWindow.eval(showInfo.toString())<br />
unsafeWindow.eval(resetForm.toString())<br />
unsafeWindow.eval(submitForm.toString())<br />
unsafeWindow.eval(changeVectors.toString())<br />
unsafeWindow.eval(applyVectors.toString())<br />
unsafeWindow.eval(createPoC.toString())<br />
unsafeWindow.eval(addToTarget.toString())<br />
//And the dragging functions<br />
unsafeWindow.eval(Browser.toString())<br />
unsafeWindow.eval(dragStart.toString())<br />
unsafeWindow.eval(dragGo.toString())<br />
unsafeWindow.eval(dragStop.toString())<br />
<br />
//Start the whole thing off, if we're live<br />
if (GM_getValue('live', false) == true)<br />
{<br />
	getRemoteXMLFiles()<br />
	<br />
	//If there is a querystring, add the bar<br />
	if (location.href.indexOf(&quot;?&quot;) &gt; 0)<br />
	{<br />
		try<br />
		{<br />
			x = v_GET_init()<br />
		}<br />
		catch (err) {x = 'ERROR'}<br />
		createGETBar(x)<br />
	}<br />
	findForms()<br />
	createMenu()<br />
}</i></i></i></i></i></i></i></i></i></i></i></i></i></i></i></i></i></i></i></i></i></i></i></i></i></i></i></i></i></i></i></i></i></i></i></i></i></i></i></i></i></i></i></i></i></i>]]></description>
            <dc:creator>mstampar</dc:creator>
            <category>Projects</category>
            <pubDate>Sat, 09 Feb 2008 04:59:15 -0600</pubDate>
        </item>
        <item>
            <guid>http://sla.ckers.org/forum/read.php?12,1919,12767#msg-12767</guid>
            <title>Re: Greasemonkey XSS assistant</title>
            <link>http://sla.ckers.org/forum/read.php?12,1919,12767#msg-12767</link>
            <description><![CDATA[That's a good idea.<br />
http://groups.google.com/group/xss-assistant/<br />
RSS feed: http://groups.google.com/group/xss-assistant/feed/rss_v2_0_msgs.xml]]></description>
            <dc:creator>WhiteAcid</dc:creator>
            <category>Projects</category>
            <pubDate>Wed, 20 Jun 2007 05:47:10 -0500</pubDate>
        </item>
        <item>
            <guid>http://sla.ckers.org/forum/read.php?12,1919,12759#msg-12759</guid>
            <title>Re: Greasemonkey XSS assistant</title>
            <link>http://sla.ckers.org/forum/read.php?12,1919,12759#msg-12759</link>
            <description><![CDATA[Jep - if you want em out just drop me a line. What about bringing the project to google code/ creating a google group? I think it would be way easier to maintain those issues that way.<br />
<br />
Greetings,<br />
.mario]]></description>
            <dc:creator>Anonymous User</dc:creator>
            <category>Projects</category>
            <pubDate>Wed, 20 Jun 2007 02:41:17 -0500</pubDate>
        </item>
        <item>
            <guid>http://sla.ckers.org/forum/read.php?12,1919,12744#msg-12744</guid>
            <title>Re: Greasemonkey XSS assistant</title>
            <link>http://sla.ckers.org/forum/read.php?12,1919,12744#msg-12744</link>
            <description><![CDATA[aah, good stuff. I couldn't see those things due to cache issues. Now I see you also have HTML tags in the name element. I'm not sure if I should render those in the script. I don't see how a user could be exploited without manually adding the evil .xml file to the list, but what if your domain was hacked and someone else edited the xml file. Then suddenly a lot of users of this script will be vulnerable.<br />
<br />
Now, how to filter this? If I use JS's escape() the it uglifies the whole thing by changing spaces to %20 etc. If I filter &lt; and &gt; then it could work, but as the charset depends on the parent page (I imagine) it's possible that variablel width encoding would be possible. Or should I just leave the HTML enabled and write a note on the site to tell people to download a copy of the XML file locally and use that to prevent any tampering.<br />
<br />
I really should have an announcement mailing list for this script.]]></description>
            <dc:creator>WhiteAcid</dc:creator>
            <category>Projects</category>
            <pubDate>Tue, 19 Jun 2007 16:44:11 -0500</pubDate>
        </item>
        <item>
            <guid>http://sla.ckers.org/forum/read.php?12,1919,12740#msg-12740</guid>
            <title>Re: Greasemonkey XSS assistant</title>
            <link>http://sla.ckers.org/forum/read.php?12,1919,12740#msg-12740</link>
            <description><![CDATA[the xml below line 359 is new<br />
<br />
http://mario.heideri.ch/xss.xml]]></description>
            <dc:creator>Anonymous User</dc:creator>
            <category>Projects</category>
            <pubDate>Tue, 19 Jun 2007 15:03:18 -0500</pubDate>
        </item>
        <item>
            <guid>http://sla.ckers.org/forum/read.php?12,1919,12739#msg-12739</guid>
            <title>Re: Greasemonkey XSS assistant</title>
            <link>http://sla.ckers.org/forum/read.php?12,1919,12739#msg-12739</link>
            <description><![CDATA[Which are the new ones? I really should know this, unfortunately I didn't memorise the vectors :p<br />
There's a really bad storm here atm cutting my Internet off every few minutes, for once I'm happy this forum doesn't bind my session to an IP or I'd have to keep logging back in all the time.]]></description>
            <dc:creator>WhiteAcid</dc:creator>
            <category>Projects</category>
            <pubDate>Tue, 19 Jun 2007 15:00:16 -0500</pubDate>
        </item>
        <item>
            <guid>http://sla.ckers.org/forum/read.php?12,1919,12738#msg-12738</guid>
            <title>Re: Greasemonkey XSS assistant</title>
            <link>http://sla.ckers.org/forum/read.php?12,1919,12738#msg-12738</link>
            <description><![CDATA[Which are the new ones? I really should know this, unfortunately I didn't memorise the vectors :p]]></description>
            <dc:creator>WhiteAcid</dc:creator>
            <category>Projects</category>
            <pubDate>Tue, 19 Jun 2007 14:52:17 -0500</pubDate>
        </item>
        <item>
            <guid>http://sla.ckers.org/forum/read.php?12,1919,12728#msg-12728</guid>
            <title>Re: Greasemonkey XSS assistant</title>
            <link>http://sla.ckers.org/forum/read.php?12,1919,12728#msg-12728</link>
            <description><![CDATA[Hi!<br />
<br />
I added new vectors - precisely Kishor's solutions - to the xss.xml - give it a try!<br />
<br />
Greetings,<br />
.mario]]></description>
            <dc:creator>Anonymous User</dc:creator>
            <category>Projects</category>
            <pubDate>Tue, 19 Jun 2007 11:44:22 -0500</pubDate>
        </item>
        <item>
            <guid>http://sla.ckers.org/forum/read.php?12,1919,12179#msg-12179</guid>
            <title>Re: Greasemonkey XSS assistant</title>
            <link>http://sla.ckers.org/forum/read.php?12,1919,12179#msg-12179</link>
            <description><![CDATA[K - works fine now! <br />
<br />
Thx!]]></description>
            <dc:creator>Anonymous User</dc:creator>
            <category>Projects</category>
            <pubDate>Tue, 05 Jun 2007 07:46:29 -0500</pubDate>
        </item>
        <item>
            <guid>http://sla.ckers.org/forum/read.php?12,1919,12178#msg-12178</guid>
            <title>Re: Greasemonkey XSS assistant</title>
            <link>http://sla.ckers.org/forum/read.php?12,1919,12178#msg-12178</link>
            <description><![CDATA[Oops. I've re-uploaded.<br />
I have copies of the .xml files at those locations to speed up the loading times and so that you guys don't see the requests from the sites I browse :p.]]></description>
            <dc:creator>WhiteAcid</dc:creator>
            <category>Projects</category>
            <pubDate>Tue, 05 Jun 2007 07:37:44 -0500</pubDate>
        </item>
        <item>
            <guid>http://sla.ckers.org/forum/read.php?12,1919,12175#msg-12175</guid>
            <title>Re: Greasemonkey XSS assistant</title>
            <link>http://sla.ckers.org/forum/read.php?12,1919,12175#msg-12175</link>
            <description><![CDATA[http://127.0.0.1/xssAttacks.xml ???<br />
http://sid.selfip.org/xss.xml ???<br />
<br />
;)]]></description>
            <dc:creator>Anonymous User</dc:creator>
            <category>Projects</category>
            <pubDate>Tue, 05 Jun 2007 01:37:11 -0500</pubDate>
        </item>
        <item>
            <guid>http://sla.ckers.org/forum/read.php?12,1919,12162#msg-12162</guid>
            <title>Re: Greasemonkey XSS assistant</title>
            <link>http://sla.ckers.org/forum/read.php?12,1919,12162#msg-12162</link>
            <description><![CDATA[Truly the peak of irony; this tool was vulnerable to XSS itself. It was possible for a web admin (who is able to create forms) to create one which runs JS when you try to XSS his forms. Create a page with the following form on it:<br />
&lt;form name=&quot;asd&lt;img src=fail onerror=alert(1)&gt;&quot;&gt;a&lt;/form&gt;<br />
Then hit the little icon to bring up the window for this tool and you'll be XSSed. This same bug existed in more than one place, also in the form's action attribute which executes when you hit &quot;Show form information&quot;. It'd able work in the form's children's name attributes as it uses that to build the select box.<br />
<br />
I've now used the JS function escape() to protect you. Please update the script.<br />
<br />
Yes this was bad, yes, I shouldn't have done this. I do apologize. At least to my knowledge this hasn't been abused and if it has at least the attacker didn't get access to the GM API allowing cross domain requests.<br />
<br />
Edit: <a href="http://www.whiteacid.org/greasemonkey/#xss_assistant" rel="nofollow" >It's here</a> (to save you scrolling up)]]></description>
            <dc:creator>WhiteAcid</dc:creator>
            <category>Projects</category>
            <pubDate>Mon, 04 Jun 2007 18:34:07 -0500</pubDate>
        </item>
        <item>
            <guid>http://sla.ckers.org/forum/read.php?12,1919,11665#msg-11665</guid>
            <title>Re: Greasemonkey XSS assistant</title>
            <link>http://sla.ckers.org/forum/read.php?12,1919,11665#msg-11665</link>
            <description><![CDATA[Due to crappy testing the reportPoC() didn't actually work properly. I just had to escape() some values, I've reuploaded. Please update the script.<br />
<br />
Edit: slightly later I made another fix. I really should implement something in this so it calls home to check for new versions, but I know you guys don't want me to be able to track what sites you use this on.]]></description>
            <dc:creator>WhiteAcid</dc:creator>
            <category>Projects</category>
            <pubDate>Wed, 16 May 2007 21:31:49 -0500</pubDate>
        </item>
        <item>
            <guid>http://sla.ckers.org/forum/read.php?12,1919,11651#msg-11651</guid>
            <title>Re: Greasemonkey XSS assistant</title>
            <link>http://sla.ckers.org/forum/read.php?12,1919,11651#msg-11651</link>
            <description><![CDATA[Ah. I had actually thought about that myself. I figured I could have a GM function such as <i>xss_test() { alert('xss works') }</i>, write that into the page using GM (before even the onload event would fire). Then it'd have an edited version of the XSS location in rsnake's XML file which instead or running an alert() tries to run that function. It'd then inject this into a form (inside a hidden iframe). It is probably very possible.]]></description>
            <dc:creator>WhiteAcid</dc:creator>
            <category>Projects</category>
            <pubDate>Wed, 16 May 2007 15:10:01 -0500</pubDate>
        </item>
        <item>
            <guid>http://sla.ckers.org/forum/read.php?12,1919,11650#msg-11650</guid>
            <title>Re: Greasemonkey XSS assistant</title>
            <link>http://sla.ckers.org/forum/read.php?12,1919,11650#msg-11650</link>
            <description><![CDATA[.mario Wrote:<br />
-------------------------------------------------------<br />
&gt; @ntp: I use cal9000 only for encoding issues -<br />
&gt; never tried the auto attack feature. Unfortunately<br />
&gt; the project seems stalled since end of 2006. The<br />
&gt; Wiki page seems to wait for user feedback<br />
&gt; though...<br />
<br />
i don't think any more work is planned, so it looks DOA.  the owasp spring of code allotments were already announced and I don't see anything about CAL9000 or any of the project leaders named.  i'll try to find out more.<br />
<br />
WhiteAcid Wrote:<br />
-------------------------------------------------------<br />
&gt; What specifically do you mean by &quot;writeups on<br />
&gt; Greasemonkey automation&quot;?<br />
<br />
It would be nice if your scripts (or similar ones) were able to detect parameters/forms, add the xss tests, submit the request, watch the response (and/or crawl the site for responses showing the xss, etc), et al.  iow: do all the work for me.]]></description>
            <dc:creator>ntp</dc:creator>
            <category>Projects</category>
            <pubDate>Wed, 16 May 2007 14:59:23 -0500</pubDate>
        </item>
        <item>
            <guid>http://sla.ckers.org/forum/read.php?12,1919,11649#msg-11649</guid>
            <title>Re: Greasemonkey XSS assistant</title>
            <link>http://sla.ckers.org/forum/read.php?12,1919,11649#msg-11649</link>
            <description><![CDATA[CAL9000 will not be continued, unfortunately<br />
The major problem is that modern browsers are to restrictive in using XMLHttpRequest. My experiance is that latest mozilla (1.7.x) works fine.<br />
Beside the XSS cheat seat, the En-/Decoder is one of its best features, AFAIK someone builds a new tool about that. Input welcome.]]></description>
            <dc:creator>kirke</dc:creator>
            <category>Projects</category>
            <pubDate>Wed, 16 May 2007 14:58:23 -0500</pubDate>
        </item>
        <item>
            <guid>http://sla.ckers.org/forum/read.php?12,1919,11611#msg-11611</guid>
            <title>Re: Greasemonkey XSS assistant</title>
            <link>http://sla.ckers.org/forum/read.php?12,1919,11611#msg-11611</link>
            <description><![CDATA[Hi WhiteAcid!<br />
<br />
Great new release and thanks for embedding my xml ;)<br />
<br />
@ntp: I use cal9000 only for encoding issues - never tried the auto attack feature. Unfortunately the project seems stalled since end of 2006. The Wiki page seems to wait for user feedback though...<br />
<br />
http://www.owasp.org/index.php/OWASP_CAL9000_Project_Roadmap<br />
<br />
Greetings,<br />
.mario]]></description>
            <dc:creator>Anonymous User</dc:creator>
            <category>Projects</category>
            <pubDate>Wed, 16 May 2007 02:54:47 -0500</pubDate>
        </item>
        <item>
            <guid>http://sla.ckers.org/forum/read.php?12,1919,11599#msg-11599</guid>
            <title>Re: Greasemonkey XSS assistant</title>
            <link>http://sla.ckers.org/forum/read.php?12,1919,11599#msg-11599</link>
            <description><![CDATA[Thanks for those comments ntp.<br />
I do know that some greasemonkey scripts can be imported straight into Opera, but do to so with this script would mean loosing functionality if it's even possible. I use functions specific to GM that allow for cross domain AJAX. I use this to load the XML files and to submit stuff to XSSed.com. Beside that, the way you start or stop activation of this tool is GM specific, but that part could of course just be re-written.<br />
<br />
Perhaps it could be made without GM specific functions if it had the XML files inside itself and instead of automated submission to XSSed it'd just redirect you to the form and pre-fill all the values by adding the variables to the querystring (we'd need to get the folks who run XSSed to set that functionality up for us).<br />
<br />
You have the book XSS Attacks? I pre-ordered that thing back in February and it's still not here. Due date for amazon.<b>co.uk</b> is 1 Jun 2007 *sigh*.<br />
<br />
What specifically do you mean by &quot;writeups on Greasemonkey automation&quot;?]]></description>
            <dc:creator>WhiteAcid</dc:creator>
            <category>Projects</category>
            <pubDate>Tue, 15 May 2007 23:09:40 -0500</pubDate>
        </item>
        <item>
            <guid>http://sla.ckers.org/forum/read.php?12,1919,11593#msg-11593</guid>
            <title>Re: Greasemonkey XSS assistant</title>
            <link>http://sla.ckers.org/forum/read.php?12,1919,11593#msg-11593</link>
            <description><![CDATA[WhiteAcid Wrote:<br />
-------------------------------------------------------<br />
&gt; It's taken way too long, but I finally got around<br />
&gt; to making the new version.<br />
<br />
I've used this tool since you first released it (on real, very serious web application vulnerability assessments).  Can't wait to try out the new version.  The plug for XSS Assistant in &quot;XSS Attacks&quot; is great.<br />
<br />
However, in &quot;XSS Attacks&quot;, they [probably pdp] seem to promote using Technika to autoload bookmarklets over the Greasemonkey [autoload] approach, citing bookmarklets as portable and Greasemonkey as Firefox only.  However, I know otherwise that Greasemonkey scripts work in Opera and can also be made to work in other browsers.  I haven't tried XSS Assistant in Opera, although that would be interesting.<br />
<br />
&gt; 2. Uses .mario's XML file too<br />
<br />
Oh how I wish that CAL9000 also used .mario's XSS XML file as well (it should be easy to import).  Speaking to Opera above, CAL9000 seems to work best in Opera (although I do use multiple versions of IE, FF, and Opera when testing for XSS).  The autoattack features in CAL9000 are great, but the reporting and use is kind of weak.<br />
<br />
With the new version of your tool, WhiteAcid, I really think you have the best tool for testing for XSS out there (having tried a huge number myself), although writeups on Greasemonkey automation and integration with other tools would be nice.  I found myself copying from XSS Assistant and into Burp a lot way back when - so I'll have to come up with a faster method, probably based off of other ideas from the book, &quot;XSS Attacks&quot;.]]></description>
            <dc:creator>ntp</dc:creator>
            <category>Projects</category>
            <pubDate>Tue, 15 May 2007 21:42:53 -0500</pubDate>
        </item>
        <item>
            <guid>http://sla.ckers.org/forum/read.php?12,1919,11591#msg-11591</guid>
            <title>Re: Greasemonkey XSS assistant</title>
            <link>http://sla.ckers.org/forum/read.php?12,1919,11591#msg-11591</link>
            <description><![CDATA[Glad you got the thing with XSSed.com setup. :D]]></description>
            <dc:creator>Kyran</dc:creator>
            <category>Projects</category>
            <pubDate>Tue, 15 May 2007 20:55:30 -0500</pubDate>
        </item>
        <item>
            <guid>http://sla.ckers.org/forum/read.php?12,1919,11579#msg-11579</guid>
            <title>Re: Greasemonkey XSS assistant</title>
            <link>http://sla.ckers.org/forum/read.php?12,1919,11579#msg-11579</link>
            <description><![CDATA[It's taken way too long, but I finally got around to making the new version.<br />
1. Works with xssed.com, allowing you to report PoCs straight to their DB<br />
2. Uses .mario's XML file too<br />
3. Cleaned code just a little<br />
<br />
The new version still hasn't been tested by anyone but me and Kevin, the owner of xssed.com so I would greatly appreciate testing, note though that Kevin would not appreciate spamming his DB.<br />
<br />
As always the script is located here: http://www.whiteacid.org/greasemonkey/#xss_assistant]]></description>
            <dc:creator>WhiteAcid</dc:creator>
            <category>Projects</category>
            <pubDate>Tue, 15 May 2007 16:46:34 -0500</pubDate>
        </item>
    </channel>
</rss>
