1. 程式人生 > >尋找PHP(網站)掛馬,後門

尋找PHP(網站)掛馬,後門


php後門木馬常用的函式大致上可分為四種類型:



1. 執行系統命令: system, passthru, shell_exec, exec, popen, proc_open


2. 程式碼執行與加密: eval, assert, call_user_func,base64_decode, gzinflate, gzuncompress, gzdecode, str_rot13


3. 檔案包含與生成: require, require_once, include, include_once, file_get_contents, file_put_contents, fputs, fwrite


4. .htaccess

: SetHandler, auto_prepend_file, auto_append_file


想找一個 關鍵詞是“hellow word” 在哪些檔案中有,我們用grep命令


grep --color -i -r -n "hellow word"  /data/www/

這樣就能搜尋出來 檔案中包含關鍵詞的檔案

--color是關鍵詞標紅

-i是不區分大小寫
-r是包含子目錄的搜尋
-d skip忽略子目錄

可以用以上命令查詢網站專案裡的帶有掛馬的檔案


.兩個查後門的實用linux命令:
find /data/web/website/ -iname *.php -mtime -35 找出/data/web/website/目錄下 35分鐘前新建的php
find /data/web/website/ -name “*.php” | xargs grep “eval($_POST[” 找出/data/web/website/ 裡面原始碼包含eval($_POST[的php檔案  (注意:POST後面可能需要轉義符“\”,否則有可能不能執行)

四.

例如

注入漏洞eval(base64_decode


grep --color -i -r -n "eval"  /data/www/   找出來對比以前正常的程式碼,看是否正常。然後用stat檢視這個木馬檔案的修改時間,最後去尋找WEB日誌,找出木馬從哪裡進來的

eg: grep --color -i -r -n 'eval($_POST'  cncar/ 

五:

實用查詢PHP木馬命令:

查詢PHP木馬

  1. # find ./ -name "*.php" |xargs egrep "phpspy|c99sh|milw0rm|eval\(gunerpress|eval\(base64_decoolcode|spider_bc"> /tmp/php.txt
  2. # grep -r --include=*.php  '[^a-z]eval($_POST' . > /tmp/eval.txt
  3. # grep -r --include=*.php  'file_put_contents(.*$_POST\[.*\]);' . > /tmp/file_put_contents.txt
  4. # find ./ -name "*.php" -type f -print0 | xargs -0 egrep "(phpspy|c99sh|milw0rm|eval\(gzuncompress\(base64_decoolcode|eval\(base64_decoolcode|spider_bc|gzinflate)" | awk -F: '{print $1}' | sort | uniq

查詢最近一天被修改的PHP檔案

  1. #   find -mtime -1 -type f -name \*.php

修改網站的許可權

  1. # find -type f -name \*.php -exec chmod 444 {} \;
  2. # find ./ -type d -exec chmod 555{} \;

假設最後更新是10天前我們可以查詢10天內生成的可以php檔案:

find /var/www/ -name “*.php” -mtime -10

也可以通過關鍵字的形式查詢 常見的木馬常用程式碼函式 eval,shell_exec,passthru,popen,system

find /var/www/ -name “*.php” |xargs grep “eval” |more
find /var/www/ -name “*.php” |xargs grep “shell_exec” |more
find /var/www/ -name “*.php” |xargs grep “passthru” |more

還有檢視access.log 當然前提是你網站的所有php檔案不是很多的情況下

一句話查詢PHP木馬
# find ./ -name “*.php” |xargs egrep “phpspy|c99sh|milw0rm|eval(gunerpress|eval(base64_decode|spider_bc”> /tmp/php.txt
# grep -r –include=*.php ’[^a-z]eval($_POST’ . > /tmp/eval.txt
# grep -r –include=*.php ’file_put_contents(.*$_POST[.*]);’ . > /tmp/file_put_contents.txt
# find ./ -name “*.php” -type f -print0 | xargs -0 egrep “(phpspy|c99sh|milw0rm|eval(gzuncompress(base64_decode|eval(base64_decode|spider_bc|gzinflate)” | awk -F: ‘{print $1}’ | sort | uniq
查詢最近一天被修改的PHP檔案
# find -mtime -1 -type f -name *.php

以下其實是多餘的操作了其實,但是還是有值得看的地方

,檢查程式碼。

肯定不是一個檔案一個檔案的檢查,Linxu有強悍的命令

grep ‘eval’ * -R 全盤搜尋當前目錄所有檔案(包含子目錄)中帶有eval的檔案,這條可以快速查詢到被掛馬的檔案。

關於eval,請自行google一句話php程式碼。

2,檢視日誌。

不到這個時候不知道日誌的可貴啊。

還是以grep命令為主。

思路:負責的站點是Linux,只開了2個埠,一個22和80,外部的執行命令是由從80埠進來,Selinux報httpd訪問/boot檔案,確認被掛馬。而所有的命令執行必須POST提交給執行的檔案。所以,查詢日誌中所有的POST記錄。

cat access_log_20120823.log | grep ‘POST’ | grep -v ‘反向查詢’ | less,通過grep -v排除正常post,egrep也支援正則,但是太複雜了,看懂不知道怎麼運用。

(這裡不建議用cat,用tail可以追加一個檔案來看)

這可以防患於未然,防止不知道哪天又被人黑進來了。每天看一眼日誌。

3,對於網頁目錄,只給apache使用者rx許可權,不要給w許可權,目錄設定要加上rx,不要給w,個別檔案除外。所以,配合2使用,Linux下可以快速過濾刷選出來不規則的POST請求。

綜合1,2其實就可以快速查詢被黑的頁面,被修改的檔案替換乾淨的程式碼。