Tải bản đầy đủ (.pdf) (3 trang)

Hack server thông qua khai thác lỗ hổng của Unicode trong Microsoft IIS pps

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (125.46 KB, 3 trang )

Khai thác lỗ hổng của Unicode trong Microsoft IIS, Hack server
Microsoft IIS là một phần mềm web server. Nó chứa tất cả file của một website,
và làm chúng có hiệu lực cho mọi người dùng trên internet. Nhưng như tất cả
các phần mềm khác, (đặc biệt là của Microsoft) nó có lỗ hỏng bảo mật Unicode
trong IIS của Microsoft, nhưng "không may" những người quản trị thì lại không
quan tâm đến việc cài đặt những patch fix lỗi đó. Trong bài hướng dẫn này, ta
thảo luận về cách mà lỗi này hoạt động, và Tại sao nó hoạt động được.

Khi bạn viếng thăm một website, địa chỉ của file bạn hiện giờ đang xem sẽ giống
như sau:

Đây là remote address của web server, hiển thị trên thanh address của trình
duyệt. Bất kỳ ai cũng có thể truy cập nó trên internet. Khi vào site này, web
server sẽ đưa cho bạn file index, (index.html hay ) của root folder web server.
Hầu hết những root folder của một web server là:
C:\inetpub\wwwroot
Đây là thư mục local của web servers, nơi cất giữ tất cả các trang chính của
website. Vì vậy nếu bạn gõ địa chỉ sau:

Ở trình duyệt, web server sẽ đưa cho bạn local file của nó:
c:\inetpub\wwwroot\index.html

Tôi hy vọng bạn sẽ không quá nhàm chán, việc quan trọng nhất là bạn phải hiểu
được sự khác nhau giữa địa chỉ local và remote.

Bây giờ, cái gì sẽ xảy ra nếu ta muốn di chuyển một cặp thư mục lên web
server?
Ta muốn di chuyển từ
c:\inetpub\wwwroot
Đến
c:\



Chúng ta sẽ làm như thế nào?

Bạn không thể gõ

Web server sẽ bắt đầu đi qua c:\inetpub\wwwroot (local)
Đối với những thư mục riêng, và do bạn không thể có : trong thư mục, nó sẽ đỗ
vỡ và bạn nhận được thông báo lỗi trong trình duyệt.
Tiếc quá! nó lại không hoạt động.
Nếu đã quen với FTP, thì bạn cũng biết lệnh DIRUP dùng để làm gì.
Lệnh để đi đến một thư mục ở trên là
/ /
Nếu bạn thiết kế bất kỳ web hay mã html nào thì chắc chắn bạn sẽ dùng được
rất nhiều.

Vì thế ta chỉ đặt lệnh lẫn nhau, giống như sau
/ /
Và bắt đầu truy cập vào ổ đĩa c (local) của server?

Tốt, ta bắt đầu khai thác ở đây, nhưng người tạo IIS lại muốn tránh phiền phức,
bằng cách làm server từ chối loại yêu cầu này.

Vì thế ta phải làm gì đây?

Bạn có bao giờ thử download một file mà trong tên của nó có khoản trống chưa?
Bạn có nhận được thông báo là trình duyệt đã biến đổi khoản trống đó thành %20
không?
Hãy làm 1 ví dụ.
Nếu bạn gõ cái này trong trình duyệt:
Unicode hole.txt

Trình duyệt sẽ thay thế khoảng trống bằng %20 :

Và sau đó mới cho phép bạn download file.

Đó là cái gì, và tại sao trình duyệt lại phải làm như thế?

Máy tính không thể hiểu được khoảng trống. Đơn giản là chúng không làm được vậy thôi.

%20 ở đây chính là Unicode cho ký tự ASCII mà ta hay gọi là “khoảng trống”.
Ký tự ASCII là những ký tự mà ta thấy trên màn hình khi dùng máy tính. Chỉ có một
Unicode cho mỗi ký tự ASCII. Vì thế, khi bạn đưa một khoảng trống vào trình duyệt, nó
phải được thay thế bằng cái gì mà cho máy tính có thể hiểu được trước khi nó bắt đầu tìm
kiếm.

Từ khi trình duyệt biến đổi khoảng trống thành ký tự Unicode mới và gửi chúng đến web
server mà có thể hiểu được, ta cũng có thể dùng ký tự Unicode để giải thích bất cứ thứ gì
ta muốn, và web server sẽ cũng hiểu được chúng. Không chỉ với khoảng trống. Mà ta
cũng có thể biến đổi lệnh DIRUP thành Unicode, và gửi chúng đến server. Ta cần biến đổi
dấu gạch chéo (/) thành / / / trong Unicode. Unicode của / là %5C .

Thật là tuyệt, thế nếu tôi chỉ cần gõ
+ %5C %5C/
thì có thể thấy host được không?

Nhưng có một vài lý do làm nó không hoạt động.

Đầu tiên, nếu bạn đã làm với c:\ (local) của server, bạn sẽ cần một vài thứ để đóng thư
mục. Web server sẽ không làm như vậy cho bạn. Vì vậy chúng ta cần mở cmd.exe (dấu
nhắc DOS) của server. Trong trình duyệt của bạn! Nhưng chúng ta sẽ quay lại vấn đề này
sau.


Thứ hai, khi server giải mã / %5C %5C/
Nó sẽ thành / / / mà lại bị hạn chế, và sau đó từ chối yêu cầu. Vì thế ta cần phải làm gì,
hay mã hoá Unicode đã mã hóa rồi một lần nữa. Có thể bạn sẽ không theo tôi ngay bây
giờ, nhưng tôi sẽ cố gắng giải thích một lần nữa. Ta cần mã hoá mọi ký tự của chuỗi
Unicode đã có.
Xem bảng dưới sẽ hiểu hơn.

ASCII UNICODE
% %25
5 %35
C %43

Vì vậy khi ta mã hóa ký tự ASCII
/ %5C %5C/
Sang Unicode, ta được
%25%35%43 %25%35%43
Và khi server đọc chuỗi ký tự này, nó sẽ trở lại
/ %5C %5C/ Đó không phải là lệnh DIRUP bình thường, nên nó được cho phép.

Nhưng có một vài thứ chúng ta cần biết. Như tôi đã đề cập ở trước, khi bạn kết nối đến
một web server, thư mục root mặc định là
wwwroot
. Thư mục này những trang chính của
site. Nhưng có những thư mục khác cho những trang web như yếu tố scripts. Những thư
mục này có chứa file mà có khá nhiều thứ quan trọng trong web server. Vì vậy khi vận
dụng server, ta cần làm nó từ thư mục mà ta đã có đặc quyền để làm. Điều này không
khó; Tôi chỉ muốn bạn hiểu tại sao tôi thêm /scripts/ vào cuối URL.

Rốt cuộc, khi ta thi hành lệnh ở dấu nhắc server’s local dos prompt, ta cần thi hành một

lệnh cũng trong cái này. Ta muốn hiển thị c:\ ? Dễ thôi; ta chỉ cần làm vài thủ thuật khác
hơn bạn thường làm ở dấu nhắc dos.

Bắt đầu cmd.exe theo cách sau:
cmd.exe?/c+
? = Mọi thứ sau dòng đối số của lệnh.
/c = Thi hành lệnh, sau đó đóng cmd.exe (để cho nó không chạy mãi)
+ = Thay thế cho khoảng trống

Cuối cùng, toàn bộ lệnh ráp lại sẽ như sau:

+ /winnt/system32/cmd.exe?/c+dir+c:\

Chú thích: Tôi không viết đầy đủ mà chỉ các bạn có thể tự ráp lại.Sorry
Ngoài ra vẫn còn nhiều đường dẫn vào c:\ của server. Hy vọng các bạn có thể
tìm được.

×