Mã hoá file theo chuẩn Base64

I. Giới thiệu:

Chuẩn Base64 là chuẩn mã hoá file để chuyển giao file qua đường email. Vậy tại sao chúng ta không bê nguyên xi cái file mà gởi qua mail, mã hoá làm chi cho mệt ? Vấn đề ở đây là file gởi đi có thể ở bất kỳ dạng nào, khi đó trong file có thể chứa mọi ký tự. Trong số các ký tự này có cả các ký tự điều khiển. Các ký tự điều khiển sẽ làm cho mail server hiểu nhầm là các lệnh và thế là xử lý loạn cả lên. Để tránh điều này, người ta đã đưa ra chuẩn Base64 và máy chủ mail sẽ chỉ xử lý theo chuẩn này.

Chuẩn Base64 là một tập hợp gồm các ký tự (theo đúng thứ tự) : từ A đến Z, từ a đến z, từ 0 đến 9, dấu +, dấu /
Tổng cộng là 64 ký tự biểu diễn 64 giá trị từ 0 đến 63. Như vậy, ký tự từ A đến Z biểu diễn cho các giá trị từ 0 đến 25, từ a đến z biểu diễn cho giá trị từ 26 đến 51, từ 0 đến 9 biểu diễn cho giá trị từ 52 đến 61, dấu + biểu diễn cho giá trị 62, dấu / biểu diễn cho giá trị 63.

Một ký tự biểu diễn theo mã ASCII sẽ dùng 8 bits. Một ký tự theo Base64 sẽ dùng 6 bits. Như vậy, một file ở dạng Base64 sẽ có kích thước lớn hơn khi ở dạng ASCII. Cụ thể, sẽ lớn gấp 4/3 lần (8 bits/6 bits).

Để chuyển đổi file sang dạng Base64, ta thực hiện theo các bước như sau :
1. Đọc nội dung file dưới dạng bit.
2. Cứ 6 bits ta tách thành một nhóm để xử lý.
3. Tra bảng mã Base64, mỗi nhóm 6 bits sẽ có giá trị tương ứng với một ký tự.
4. Ghi ra file các ký tự đó.
Vậy là xong.

Tui sẽ thực hiện các thao tác trên qua một ví dụ cụ thể.
Bây giờ, chúng ta chuyển 1 file sang dạng Base64. Nội dung file cần chuyển ở dạng ASCII như sau :

Anh yeu em

File này tổng cộng có 10 bytes, kể cả ký tự khoảng trắng.
File này ở dạng bit như sau (tui viết theo từng nhóm 8bits, 3 ký tự dạng ASCII tương đương 4 ký tự dạng Base64) :

01000001 : Ký tự A
01101110 : Ký tự n
01100110 : Ký tự h

00100000 : Ký tự khoảng trắng
01111001 : Ký tự y
01100101 : Ký tự e

01110101 : Ký tự u
00100000 : Ký tự khoảng trắng
01100101 : Ký tự e

01101101 : Ký tự m

Chúng ta tách nó ra thành từng nhóm 6 bits và tra theo bảng mã Base64 sẽ được ký tự tương ứng (dấu trong ngoặc là giá trị thập phân) :

010000 : (16) : ký tự Q
010110 : (22) : ký tự W
111001 : (57) : ký tự 5
100110 : (38) : ký tự m

001000 : (32) : ký tự g
000111 : (7) : ký tự H
100101 : (37) : ký tự l
100101 : (37) : ký tự l

011101 : (29) : ký tự d
010010 : (18) : ký tự S
000001 : (1) : ký tự B
100101 : (37) : ký tự l

011011 : (27) : ký tự b
01 : (1) : ký tự B

Vậy là ta được file có nội dung như sau :

QW5mgHlldSBlbB

Tổng cộng có 14 bytes, hơn file ban đầu 4 ký tự.

Vậy là chúng ta đã chuyển đổi xong từ ASCII sang Base64 rồi. Có thể send thoải mái !

II. Dùng Base64 mã hóa Webshell để Bypass Antivirus:
1. Có 1 Webshell vd: r57.php. Shell này khi upload lên server cài đặt Antivirus sẽ dễ dàng detect được.
2. Dùng Base64 encode. Có thể dùng một số trang web encode online. Vd: http://www.motobit.com/util/base64-decoder-encoder.asp
3. Tạo file Newshell.php dán nội dung encode vào hàm base64_decode
<?php
eval (base64_decode(‘abc‘));
?>
Với abc là nội dung shell đã encode.
Kết thúc!

 

Advertisements

About securityforall

it, smile, share for people,...

Posted on July 23, 2012, in Bảo Mật (Security). Bookmark the permalink. Leave a comment.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google+ photo

You are commenting using your Google+ account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

w

Connecting to %s

%d bloggers like this: