Trao đổi với tôi

http://www.buidao.com

10/23/09

[Hacking] Khai thác qua Hidden Input

Khai thác qua Hidden Input

I. Giới thiệu
Khi thiết kế ứng dụng web, do đặc tính HTTP là Stateless protocol nên việc cần thiết là làm thế nào giữ kết nối giữa Client và Server. Để làm công việc này các nhà lập trình dùng phương thức đưa các giá trị về cho User và kiểm tra lại khi cần thiết, giá trị được đưa xuống thường bằng một số cách: cookie, encode URL và HTTP Form hidden field.

Việc sử dụng form hidden field thường được sử dụng vì có thể chứa nhiều dữ liệu, nhưng đây là một phương thức không an toàn nếu chứa các dữ liệu nhạy cảm.

Vd sau minh họa một Form với hidden field:
Form trên HTML:
Trích:
< action="http://congty.com/shop.php" method="post">
...
< input color="Red">type=hidden< /span> name=price value="99.99">
...
< /form>
Khi sử dụng hidden field người dùng cuối sẽ không thấy các giá trị này được truyền xuống nhưng một Attacker chỉ cần đơn giản mở source code ra xem là sẽ thấy được các thông tin này và việc chỉnh sửa có thể thực hiện bằng cách save trang web hoặc dùng công cụ hỗ trợ như proxy sẽ thay đổi toàn bộ dữ liệu truyền lên Server:

Request lúc gửi lên Server:
Trích:
POST /shop.php HTTP/1.0
....

price=99.99
Request đã bị chỉnh sửa:
Trích:
POST /shop.php HTTP/1.0
....

price=0.99
Đoạn code trên minh họa một Attacker thay đổi trường giá được đưa xuống máy anh ta thông qua HTTP Form.

Một cách để hạn chế sự khai thác này là kiểm tra lại trang trước đó bằng trường HTTP_REFERER. Tuy nhiên, nếu một người biết lập trình sẽ dễ dàng thay đổi được các trường này trong HTTP header.

Hãy xem sự nguy hiểm của các khai thác này qua đoạn minh họa sau:

1. Tí muốn tìm việc làm nên đăng ký vào một trang web:
Hình ảnh này đã được thay đổi kích thước. Click vào đây để xem hình ảnh gốc với kích thước là 800x574


2. Tí đăng nhập vào:
Hình ảnh này đã được thay đổi kích thước. Click vào đây để xem hình ảnh gốc với kích thước là 800x574


3. Tí muốn chỉnh sửa hồ sơ mình nên vào mục chỉnh sửa:
Hình ảnh này đã được thay đổi kích thước. Click vào đây để xem hình ảnh gốc với kích thước là 800x574


Hình ảnh này đã được thay đổi kích thước. Click vào đây để xem hình ảnh gốc với kích thước là 800x574


4. Tí xem thử source code:
Hình ảnh này đã được thay đổi kích thước. Click vào đây để xem hình ảnh gốc với kích thước là 784x523


..và thấy một hidden field nghi ngờ: user_id!
Hình ảnh này đã được thay đổi kích thước. Click vào đây để xem hình ảnh gốc với kích thước là 800x574

Nghĩ đây có thể là id của user truyền lên Server để update thông tin, Tí thử thay đổi thông tin email của user_id trước đó bằng email của mình (id của Tí: 51369, id sửa: 51368). Tí làm với công cụ hỗ trợ Burpsuite:
Hình ảnh này đã được thay đổi kích thước. Click vào đây để xem hình ảnh gốc với kích thước là 800x574

Xong.

5. Tí vào mục "quên mật khẩu" để reset lại mật khẩu user này:


Hình ảnh này đã được thay đổi kích thước. Click vào đây để xem hình ảnh gốc với kích thước là 800x574


Hình ảnh này đã được thay đổi kích thước. Click vào đây để xem hình ảnh gốc với kích thước là 800x574


Hình ảnh này đã được thay đổi kích thước. Click vào đây để xem hình ảnh gốc với kích thước là 800x574


Hình ảnh này đã được thay đổi kích thước. Click vào đây để xem hình ảnh gốc với kích thước là 800x574


Hình ảnh này đã được thay đổi kích thước. Click vào đây để xem hình ảnh gốc với kích thước là 800x574


Hình ảnh này đã được thay đổi kích thước. Click vào đây để xem hình ảnh gốc với kích thước là 800x574


Hình ảnh này đã được thay đổi kích thước. Click vào đây để xem hình ảnh gốc với kích thước là 800x574


6. Tí đăng nhập với email và mật khẩu mới:
Hình ảnh này đã được thay đổi kích thước. Click vào đây để xem hình ảnh gốc với kích thước là 800x574

Thành công. Tí lúc này có thể xem hồ sơ user này:

Hình ảnh này đã được thay đổi kích thước. Click vào đây để xem hình ảnh gốc với kích thước là 800x574


Với cách làm này Tí có thể đánh cắp được bất kỳ account nào.
Lỗi đã được gửi đến Quản trị website.

III. Hướng khắc phục:
- Không nên lưu các dữ liệu quan trọng tại Client.
- Sử dụng các phương thức encrypt session như SSL để encrypt cookie hay input data
- Dùng các giải thuật hash trên các dữ liệu.
Link: http://www.nhatnghe.com/forum/showthread.php?t=31182