2014-04-07 12 views
7

Chúng tôi lưu trữ 1000 tên miền trên nhiều máy chủ. Chúng tôi có vấn đề với số lượng lớn phần mềm độc hại và phpshell. Việc sử dụng nhiều máy quét không có tác dụng trong việc đưa chúng xuống. có lẽ chúng tôi nhận được 10/20 kết quả mơ hồ từ những máy quétgrep toàn bộ máy chủ cho vỏ hack/phần mềm độc hại

vì vậy tôi xây dựng tệp bash nhỏ của riêng tôi để tìm các tập lệnh đó. Nó tìm thấy 148 phpshells cuối tuần này (im không phải là giỏi trong việc tạo các tệp .SH).



Câu hỏi của tôi Các grep là khủng khiếp chậm, nó sẽ kéo dài trong ngày. làm thế nào tôi có thể làm cho kịch bản này hiệu quả hơn?

array=(
    "base64_decode(" 
    "substr(md5(strrev(" 
    "cwd = @getcwd();" 
    "chr((ord(" 
    "gzinflate(base64_decode(" 
    "php_uname()" "] = chr(ord(" 
    "cwd[strlen($cwd)" 
    "ini_get('safe_mode');" 
    "=\"\x62\"" 
    "\"+ r + \"&r=\" + document.referrer;\"" 
    "if(strtoupper(substr(PHP_OS, 0, 3)) == \"WIN\")" 
    "window.top.location.href=\"http://" 
    "@ini_get(\"disable_functions\")" 
    "$g3='';$g3.=$r;$g3.=$h;$g3.=$y" 
    "hacked" 
) 

for value in "${array[@]}" 
do 
    printf "\n[$value] [start => $(date +"%T")]\n" 
     grep -l -inr "$value" "/home/" 
    printf "\n[end => $(date +"%T")]\n" 
done 



CUỐI CÙNG KẾT QUẢ

#!/bin/bash 
LC_ALL=C grep -F -n -r -f /root/scanner/pattern.txt "/home/" 

Pattern.txt

eval($___($__)); 
eval(stripslashes(@$_POST[ 
eval(stripslashes(array_pop(
eval(base64_decode(
eval(gzinflate(str_rot13(base64_decode(
gzinflate(base64_decode(
Array(base64_decode(
sha1(base64_decode(
print(base64_decode(
wsoScandir($dir) 
substr(current(array_keys(
cwd = @getcwd(); 
$OOO000000=urldecode(
$l___l_='base'.(32*2) 
substr(md5(strrev(
cwd[strlen($cwd) 
="x62 
+ r + "&r=" + document.referrer; 
if(strtoupper(substr(PHP_OS, 0, 3)) == "WIN") 
){if(@copy(
copy("endless.html 
system("wget 
symlink("/","sym/root"); 
@copy($_FILES['file']['tmp_name'] 
error_reporting(0);if(
x6C\x28\x67\x7A\x69 
"/.*/e","\x28\x65\x76\x61 
preg_replace("/.*/e", 
Windows-1251";preg_replace(
); exit(); } if(isset(
system("$cmd"); die;} 
rtrim($security_code, "/"); 
+3

Nó có thể là hiệu suất tốt hơn khôn ngoan để thực hiện quét toàn bộ một lần và sau đó theo dõi các tệp đã thay đổi và chỉ quét những tệp đó. – PeeHaa

+0

vâng, tôi cũng muốn điều đó. chỉ tôi cần kịch bản để kết thúc hoàn toàn. bây giờ nó đi 50% và quá trình bị mắc kẹt. những gì tôi cũng tìm thấy là shellhacks sử dụng lệnh 'cảm ứng' của php để thay đổi trường 'ngày sửa đổi' của một tệp. – SinisterGlitch

+1

Bạn có thể giới hạn tập lệnh của mình để chỉ xem xét các tệp văn bản, do đó, nó sẽ bỏ qua các hình ảnh. – DanFromGermany

Trả lời

7

cửa hàng của bạn earch chuỗi như là một chuỗi multiline duy nhất, và chạy fgrep một lần thay vì trong một vòng lặp:

values="eval(base64_decode(
gzinflate(base64_decode(
cwd = @getcwd(); 
chr((ord(
substr(md5(strrev(
chr(ord(
cwd[strlen(\$cwd) 
ini_get('safe_mode'); 
=\"\x62\" 
\"+ r + \"&r=\" + document.referrer;\" 
if(strtoupper(substr(PHP_OS, 0, 3)) == \"WIN\") 
window.top.location.href=\"http:// 
@ini_get(\"disable_functions\") 
){if(@copy(
eval(\$___(\$__)); 
copy(\"endless.html\" 
system(\"wget 
symlink(\"/\",\"sym/root\"); 
@copy(\$_FILES['file']['tmp_name'] 
error_reporting(0);if(
x6C\x28\x67\x7A\x69\x6E\x66\x6C\x61\x74 
hacked" 

LC_ALL=C fgrep -nr --include \*.php "$values" * 

Phiên bản này chạy 22x nhanh hơn so với bản gốc (0.535s vs 11.817s trên một trang web khá lớn). Không phải ngẫu nhiên, bạn có 22 chuỗi tìm kiếm.

PS: Đừng quên \ your $ bên trong "" hoặc bạn sẽ không tìm thấy chuỗi tìm kiếm thứ 15 và thứ 19 của mình. Tôi sẽ tạo một tệp thử nghiệm có tất cả các chuỗi bạn đang tìm kiếm và xác minh rằng các giá trị "$ giá trị" thành công phù hợp với từng chuỗi.

+1

Kết thúc của tôi trông rất giống bạn! tôi đăng nó sau khi làm sạch thành công, thậm chí watchguard đã không loại bỏ chúng. kinda fun :) – SinisterGlitch

+1

Trên thực tế, câu trả lời của bạn là tốt hơn, vì bạn tránh phải \ "s và $ s :) – webb

Các vấn đề liên quan