it-swarm-vi.com

Làm thế nào để chiếm quyền điều khiển một phiên?

Mặc dù tiêu đề trắng trợn của câu hỏi, đây thực sự là một mục đích thực sự.

Trang web của tôi sử dụng PHP mã như thế này:

    $select="select id from tableA where user_id='".$_SESSION['sess_user_id']."'";

Tôi thực sự đang cố gắng nghĩ như một hacker và tìm ra cách tôi có thể thay đổi giá trị này. Tôi đã đọc các bài báo nói về "chiếm quyền điều khiển phiên", nhưng mơ hồ về cách thực hiện điều đó ...

25
Steve

Về cơ bản khi bạn chiếm quyền điều khiển phiên của ai đó, bạn lấy sessionID của họ và giả vờ là phiên của riêng bạn. Thông thường sessionID được chuyển trong cookie, nghĩa là nếu bạn có thể truy cập cookie của các bên khác, bạn chỉ có thể đặt nó vào cookie của riêng bạn và bạn đã đánh cắp phiên của họ.

Điều này có thể được thực hiện bằng nhiều cách, ví dụ bằng cách đánh hơi mạng không dây và xem các gói HTTP được truyền hoặc bằng tấn công XSS nơi bạn có thể báo cho trình duyệt nạn nhân tiết lộ thông tin cookie của họ cho bạn.

Tôi muốn đề cập rằng ví dụ bạn mô tả trong câu hỏi của bạn cũng có thể dễ bị tổn thương với SQL-Injection. Nếu tôi thay đổi sessionID của cookie thành

asdf' OR 1=1-- 

Tôi rất có thể sẽ được xác thực là một người dùng hợp lệ. Để ngăn chặn điều này, bạn phải đảm bảo rằng bạn đã vệ sinh đúng cách đối với dữ liệu bẩn đến từ khách hàng của bạn trước khi bạn sử dụng dữ liệu cho bất cứ điều gì.

10
Chris Dale

Nếu bạn quan tâm đến việc trình diễn, Twitter là một ví dụ rất hay về việc nó được thực hiện dễ dàng như thế nào. Có thể bạn sẽ cần:

  • Hai máy tính
  • Firefox với Fireorms (rõ ràng có các tùy chọn khác, nhưng đây là những tùy chọn phổ biến và dễ kiếm)
  • Trình chỉnh sửa cookie, như Trình quản lý cookie nâng cao (một lần nữa, tiện ích bổ sung có thể cài đặt dễ dàng thông qua Firefox)

Trên máy tính A có firefox và fireorms, đăng nhập vào tài khoản Twitter của bạn trên trang web không https. Sau khi đăng nhập, hãy mở Firebird và xem dòng "NHẬN Twitter.com". Khi bạn mở rộng, hãy xem phần Tiêu đề phản hồi và tìm Set-Cookie. Ở đó, bạn sẽ tìm thấy một cookie có tên _Twitter_sess. Đánh dấu và sao chép giá trị (tất cả các cách cho đến dấu chấm phẩy).

Bây giờ hãy mở Firefox bằng trình quản lý cookie nâng cao trên máy tính B và truy cập trang đăng nhập Twitter. Mở Trình quản lý cookie nâng cao và bộ lọc cho Twitter.com. Khi bạn tìm thấy tên miền Twitter.com và danh sách cookie của nó, bạn sẽ thấy một cookie có tên _Twitter_sess. Xóa đi. Bây giờ, tạo một cookie mới với tên "_Twitter_sess", đường dẫn "/" và "Giá trị" giá trị của _Twitter_sess từ máy tính khác. Lưu cookie.

Bây giờ hãy đóng trình quản lý cookie và quay lại trang đăng nhập Twitter, làm mới trang và bam, bạn đang ở trong đó.

Bây giờ chỉ cần nghĩ ra một số cách thông minh để có được phiên của người khác (mở wifi, xss) và đó là một cách để thực hiện việc chiếm quyền điều khiển phiên.

7
Safado

Mã của Karrax là một cuộc tấn công SQL Injection (mà mã của bạn dễ bị tấn công - điều này cần được sửa) không phải là một cuộc tấn công chiếm quyền điều khiển phiên.

$select="select id from tableA where user_id='"
    .mysql_real_escape_string($_SESSION['sess_user_id'], $db_handle)
    ."'";

Trong chiếm quyền điều khiển phiên, Bob đánh cắp giá trị cho id phiên mà bạn đã gán cho Alice. Đây có thể là kết quả của một cuộc tấn công MITM vào luồng HTML, đánh hơi mạng, lỗi CSS cho phép anh ta nhúng một số javacript onm trang web của bạn hoặc các phương pháp khác.

Điều quan trọng là không để mất các vấn đề sửa lỗi phiên - ngay cả khi bạn đặt cờ chỉ SSL và HTTP trên cookie, VÀ đặt use_only_cookies không giải quyết vấn đề khi Bob tấn công máy tính của Alice trước khi cô truy cập trang web của bạn và đặt giá trị cụ thể cho id phiên. Sau đó, Bob có thể đặt cùng một giá trị trên máy tính của mình và các yêu cầu của anh ta bị ràng buộc vào cùng một phiên với Alice. Vì vậy, khi bạn xác thực, bạn nên tạo id phiên mới - xem session_regenerate_id ()

4
symcbean

Chiếm quyền điều khiển phiên thường liên quan đến việc đánh cắp cookie từ người dùng. Ví dụ: Firesheep là một phần bổ trợ cho Firefox chuyên đánh cắp các phiên qua Wifi không bảo mật. HTTP là một giao thức không trạng thái, vì vậy cách tốt nhất chúng ta có thể làm để xác thực mọi người là với cookie.

Mã PHP mà bạn có trong câu hỏi của mình là một ví dụ về mã đó là có thể dễ bị tiêm SQL. Cách tốt nhất là vệ sinh các biến trước khi đưa vào một truy vấn như thế.

2
WalterJ89