Tài liệu Tìm hiểu sql injection và viết công cụ tấn công website dựa trên sqlmap

  • Số trang: 19 |
  • Loại file: PDF |
  • Lượt xem: 1705 |
  • Lượt tải: 0
thucaothi349968

Tham gia: 25/12/2016

Mô tả:

Tìm hiểu sql injection và viết công cụ tấn công website dựa trên sqlmap
TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI VIỆN CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG ──────── * ─────── ĐỒ ÁN MÔN HỌC NGÀNH CÔNG NGHỆ THÔNG TIN TÌM HIỂU SQL INJECTION VÀ VIẾT CÔNG CỤ TẤN CÔNG WEBSITE DỰA TRÊN SQLMAP Sinh viên thực hiện: Lê Văn Quân Lớp CNTT&TT1.1 – K56 Giáo viên hướng dẫn: Ths Bùi Trọng Tùng HÀ NỘI 11-2015 Sinh viên thực hiện: 20102035 Lê Văn Quân K56 Lớp CNTT&TT1.1 LỜI NÓI ĐẦU Theo báo cáo của Whitehat Security năm 2015, 86% website chứa ít nhất một lỗ hổng bảo mật nghiêm trọng. Trong đó, số lượng website có khả năng bị nhiễm lỗ hổng bảo mật như sau: KHẢ NĂNG BỊ LỖ HỔNG BẢO MẬT WEBSITE FINGERPRINTING SQL INJECTION DIRECTORY INDEXING SESSION FIXATION URL REDIRECTOR ABUSE CONTENT SPOOFING CROSS-SITE SCRIPTING INSUFFICIENT TRANSPORT LAYER PROTECTION 0 10 20 30 40 50 60 70 80 % Biểu đồ 1: Thống kê của Whitehat security về bảo mật website 2015 Năm 2008, Sony bị tấn công bằng SQL Injection và rò rỉ hàng triệu thông tin của khách hàng. Năm 2010, BKAV bị tấn công và rò rỉ thông tin và hạ danh tiếng cũng bởi SQL Injection. Hiện tại, 6% website trên toàn thế giới vẫn bị lỗ hổng SQL Injection, hacker có thể lấy toàn bộ thông tin lưu trên databases của hệ thống, có thể thay đổi thông tin đó, có thể chiếm quyền quản trị website. Thử tưởng tượng một hệ thống ngân hàng bị nhiễm lỗ hổng này, hacker có thể làm những gì? Hay một hệ thống tên lửa được điều khiển bằng website mà có lỗ hổng này, liệu an ninh trên thế giới có được đảm bảo? Vậy SQL Injection là gì? SQL Injection hoạt động như thế nào? Làm thế nào để phòng tránh được nó? Tài liệu sau đây cung cấp các thông tin về định nghĩa, các phương pháp tấn công bằng SQL Injection, cách thức xây dựng công cụ tấn công SQL Injection qua sqlmap API để giúp những người quản trị website có thể tự kiểm tra hệ thống website của mình có bị nhiễm SQL Injection không và các developer có thể tránh những lỗ hổng đó ngay từ khi bắt đầu phát triển dự án. Sinh viên thực hiện: 20102035 Lê Văn Quân K56 Lớp CNTT&TT1.1 MỤC LỤC CHƯƠNG I: TỔNG QUAN VỀ SQL INJECTION ...................................................4 1.1. Định nghĩa và một vài ví dụ ..........................................................................4 1.2. Các kỹ thuật tấn công SQL Injection ............................................................5 1.2.1. boolean-based blind .............................................................................5 1.2.2. time-based blind ..................................................................................6 1.2.3. error-based ...........................................................................................6 1.2.4. UNION query-based............................................................................7 1.2.5. stacked queries ....................................................................................7 1.2.6. out-of-band ..........................................................................................7 1.3. Cách phòng vệ ...............................................................................................7 CHƯƠNG II: XÂY DỰNG CÔNG CỤ TẤN CÔNG WEBSITE THÔNG QUA SQL INJECTION ........................................................................................................8 2.1. Giới thiệu SQLmap ..........................................................................................8 2.1.1. Một vài cách sử dụng SQLmap thường gặp .............................................8 2.1.2. Cách thức sqlmap quét forms va crawl website. .......................................8 2.2. Xác thực trong ứng dụng Web .........................................................................9 2.2.1. Định nghĩa .................................................................................................9 2.2.2. Một vài kỹ thuật xác thực website ..........................................................10 2.2.3. Các phương thức xác thực trong SQLmap..............................................10 2.2.4. Cookies và sessions .................................................................................10 2.3. Xây dựng chương trình ..................................................................................12 2.3.1. Phân tích và thiết kế ................................................................................12 2.3.3. Hoàn thiện và kiểm thử chương trình .....................................................15 2.3.4. Tìm hiểu và so sánh black box và white box ..........................................16 TRA CỨU BẢNG BIỂU ..........................................................................................18 TÀI LIỆU THAM KHẢO .........................................................................................19 Sinh viên thực hiện: 20102035 Lê Văn Quân K56 Lớp CNTT&TT1.1 1.1. CHƯƠNG I: TỔNG QUAN VỀ SQL INJECTION Định nghĩa và một vài ví dụ Sql Injection là một lỗ hổng cho phép người dung có thể chèn và thực thi câu lệnh SQL thông qua dữ liệu đầu vào của Web. Ví dụ 1: SQL Injection dựa vào 1=1 luôn đúng Khi tìm kiếm user, server có thể sẽ thực thi đoạn mã sau: //Lấy UserID từ dữ liệu đầu vào txtUserId = getRequestString("UserId"); //Tìm kiếm xem trong bảng Users xem có user nào có UserID = txtUserID là giá trị nhập vào txtSQL = "SELECT * FROM Users WHERE UserId = " + txtUserId; Nếu ta nhập UserId = một số thì sẽ không có vấn đề gì xảy ra cả, nhưng nếu ta nhập User ID = “105 or 1=1” thì câu truy vấn sẽ thành: txtSQL = "SELECT * FROM Users WHERE UserId = 105 or 1=1 Điều kiện 105 or 1=1 sẽ trở thành luôn đúng, vì vậy hacker có thể trích xuất dữ liệu từ SQL database một cách dễ dàng nếu điều kiện đầu vào không chặt chẽ. Ví dụ 2: SQL Injection dựa vào ““=”” luôn đúng. Khi xác thực thành viên, server có thể thực thi đoạn mã sau: uName = getRequestString("UserName"); uPass = getRequestString("UserPass"); sql = "S ELECT * FROM Users WHERE Name ='" + uName + "' AND Pass ='" + uPass + "'" Hacker có thể khéo léo chèn “or” hoặc “and” vào trong trường uName và uPass như sau: SELECT * FROM Users WHERE Name ="" or ""="" AND Pass ="" or ""="" Câu truy vấn trên hoàn toàn hợp lệ, sẽ trích toàn bộ các trường trong table Users ra ngoài vì (""="") luôn đúng Ví dụ 3: SQL Injection dựa vào thực hiện nhiều câu lệnh đồng thời. Hầu hết các databases đều hỗ trợ thực thi nhiều câu lệnh SQL cách nhau bởi dấu chẩm phẩy “;” Ví dụ: Server code: txtUserId = getRequestString("UserId"); txtSQL = "SELECT * FROM Users WHERE UserId = " + txtUserId; Khi hacker dùng input UserID là: 105; DROP TABLE Suppliers Sinh viên thực hiện: 20102035 Lê Văn Quân K56 Lớp CNTT&TT1.1 Server tìm kiếm user có id là 105, sau đó xóa Table Suppliers 1.2. Các kỹ thuật tấn công SQL Injection SQL Injection gồm 6 kỹ thuật sau đây: 1.2.1. boolean-based blind Giả sử website có link http://www.example.com/index.php?id=1 hiển thị dữ liệu Nếu ta thêm ‘AND’1=2 thành http://www.example.com/index.php?id=1'and‘1=2, website ngừng hiển thị dữ liệu, sau đó thử thay 1=2 bằng 1=1, website lại hiển thị dữ liệu. Khi đó website đã bị lộ lỗ hổng Boolean-based blind (SQL injection blink dựa trên đúng sai) Nguyên nhân là do website đã khôn khéo ẩn những kết quả sai cú pháp hoặc không đúng, tuy nhiên câu truy vấn của website vẫn dễ dàng khai thác SELECT * FROM user WHERE id=’$id’ Khi không hiển thị như vậy, ta có thể thử bằng cách đoán lần lượt từng chữ cái của thông tin ta muốn lấy bằng cách dùng AND ASCII(SUBSTRING(username,1,1)) =97     SUBSTRING (expression, start, length) dùng để lấy ký length ký tự bắt đầu từ start của username. ASCII là hàm chuyển ký tự đó sang mã ASCII được tra cứu dưới đây Dựa vào cách chèn trên, ta có thể kiểm tra chữ cái đầu tiên của username có phải là a hay không. Để nhanh chóng hơn, có thể thử với <> Sinh viên thực hiện: 20102035 Lê Văn Quân K56 Lớp CNTT&TT1.1 Bảng 2: Bảng tra cứu mã ASCII, dùng để lấy thông tin từ database 1.2.2. time-based blind Tương tự cách tấn công dựa trên Boolean-based blind, chỉ khác chúng ta sẽ sử dụng nếu điều kiện đúng thì máy chủ sẽ delay bao lâu bằng cách sử dụng BENCHMARK(5000000,ENCODE('MSG','by 5 seconds')) 1.2.3. error-based Lỗ hổng này dễ nhận biết và dễ tấn công nhất, ví dụ truy vấn là SELECT * FROM User WHERE id=’$id’ Nếu ta truyền id có giá trị 1’, câu truy vấn sẽ bị sai cú pháp và hiển thị kết quả ra ngoài giao diện web. Sinh viên thực hiện: 20102035 Lê Văn Quân K56 Lớp CNTT&TT1.1 Hình 3: Website angelvestgroup.com bị lỗ hổng sql error-based. Hacker có thể dễ dàng trích xuất dữ liệu trong database dựa trên lỗ hổng này. 1.2.4. UNION query-based Giả sử website aneglvestgroup trên bị mắc lỗ hổng UNION query-based, Hacker có thể khéo léo chèn đoạn mã sau: union all select name from sysobjects where xtype='u' vào cuối link và có thể lấy được name trong bảng sysobjects mà có xtype=’u’ 1.2.5. stacked queries Đây là cách hack dựa vào câu lệnh kép trong SQL Ví dụ sql queries là SELECT * FROM User WHERE id=”$id” Ta có thể chèn $id = 1;DROP TABLE User, khi đó truy vấn sẽ là SELECT * FROM User WHERE id=1; DROP TABLE User Sẽ xóa ngay table User sau khi truy vấn đến id=1. Hacker có thể dễ dàng truy vấn dữ liệu đến database, thay đổi thông tin trên database như username, password, … Với lỗi này, admin có thể làm gì với database thì hacker cũng có thể làm được như vậy. 1.2.6. out-of-band Tương tự stackd qerries, nhưng lần này hacker có thể tấn công ddos các website khác bằng ||UTL_HTTP.request('(URL)/'||(SELECT user FROM DUAL)) -1.3. Cách phòng vệ Một số web developers sử dụng cách chặn các từ khóa trong SQL Input để tránh bị tấn công SQL Injection. Tuy nhiên cách này sinh ra nhiều bất tiện. Cách tốt nhất là sử dụng SQL Parameters. Ví dụ txtNam = getRequestString("CustomerName"); txtAdd = getRequestString("Address"); txtCit = getRequestString("City"); txtSQL = "INSERT INTO Customers (CustomerName,Address,City) Values(@0,@1,@2)"; db.Execute(txtSQL,txtNam,txtAdd,txtCit); Lệnh db.Execute sẽ chèn các parameters vào câu lệnh sql và tránh việc chèn những input chứa ác ý. Sinh viên thực hiện: 20102035 Lê Văn Quân K56 Lớp CNTT&TT1.1 CHƯƠNG II: XÂY DỰNG CÔNG CỤ TẤN CÔNG WEBSITE THÔNG QUA SQL INJECTION 2.1. Giới thiệu SQLmap SQLmap là công cụ quét lỗ hổng bảo mật database và tự động quét sql injection. SQLmap được viết bằng python, chạy ổn định trên nền python2.6 và python2.7 2.1.1. Một vài cách sử dụng SQLmap thường gặp SQLmap là công cụ quét lỗ hổng bảo mật database và tự động quét sql injection. SQLmap được viết bằng python, chạy ổn định trên nền python2.6 và python2.7 Một vài cách dung của sqlmap sau đây: Option -h, --help Hiển thị hướng dẫn -hh Hiển thị hướng dẫn đầy đủ --version Hiển thị phiên bản -v VERBOSE Hiển thị chi tiết Target -d DIRECT Kết nối trực tiếp đến database -u URL Kết nối tới URL -l LOGFILE Phân tích kết quả từ log file -m BULKFILE Quét nhiều mục tiêu được ghi trong file -r REQUESTFILE Thực hiện HTTP request từ file -g GOOGLEDORK Lấy kết quả tìm kiếm từ google và quét lần lượt -c CONFIGFILE Lấy option từ file ini Injection -p Chọn parameter(s) --skip Bỏ qua parameter --batch --crawl=x Bảng 4: Cách sử dụng Mysql Injection 2.1.2. Cách thức sqlmap quét forms va crawl website. Cách thức sqlmap quét forms Kiểm tra kết nối tới url Tìm kiếm form Nếu không tìm thấy form, kết thúc chương trình Nếu tìm thấy form, đưa ra các parameters của form đó Hỏi người dùng có muốn kiểm tra form này không (mặc định có) Kiểm tra độ ổn định của url (sau khi send post/get, url có giữ nguyên hay không) Sinh viên thực hiện: 20102035 Lê Văn Quân K56 Lớp CNTT&TT1.1 Nếu Url không ổn định, sql sẽ so sánh và dựa vào sự khác nhau của url trả về để đưa ra kết quả Kiểm tra parameter trong form Đưa ra kết quả của parameter đó Kết thúc parameters Kết thúc forms Đưa ra kết quả, kết thúc chương trình Bảng 5: Cách thức sqlmap quét form Kiểm tra có sitemap hay không (mặc định không) Nhập vào số luồng (mặc định 1) Kiểm tra url có redirect hay không, hỏi người dùng có muốn theo link này hay không (n) Dựa vào độ depth của crawl, lấy ra danh sách link bằng cách lấy từng link trong mỗi trang, lưu lại link đó, gửi http request và nhận http response, tiếp tục lấy toàn bộ link trong trang đó, cứ như vậy đến khi đạt được độ sâu Nếu không có link thì kết thúc chương trình Nếu có link, chương trình sẽ lọc ra các link có cùng cấu trúc, ví dụ http://myphamdep.org/product.php?id=1 và http://myphamdep.org/pruduct.php?id=2 sẽ chỉ được test 1 lần. Đưa ra link đầu tiên, hỏi người dùng muốn test không (y) Test nếu được yêu cầu Lặp lại cho đến khi hết toàn bộ link Đưa ra kết quả Kết thúc chương trình Bảng 6: Cách thức sqlmap crawl website 2.2. Xác thực trong ứng dụng Web 2.2.1. Định nghĩa Xác thực là một việc xác định một user chính là người đó. Hiểu đơn giản, khi tạo 1 user là abcxyz và có mật khẩu 123456. Khi xác thực, website sẽ hỏi username và password là gì. Người dùng sẽ nhập vào username và password đã tạo lập trước đó, và máy chủ sẽ xác nhận đây chính là user mà đã tạo username abcxyz. Mục đích của việc xác thực trên, là tránh những người khác có thể làm những việc mà máy chủ ủy quyền username abcxyz làm việc. Vì vậy, máy chủ sẽ cố gắng không để hacker truy cập được user mà không cần mật khẩu hoặc dễ dàng lấy được mật khẩu. Sinh viên thực hiện: 20102035 Lê Văn Quân K56 Lớp CNTT&TT1.1 2.2.2. Một vài kỹ thuật xác thực website     HTTP Basic Authentication HTTP Digest Authentication HTTPS Client Authentication Form Based Authentication 2.2.3. Các phương thức xác thực trong SQLmap Sqlmap hỗ trợ 3 phương thức xác thực http    Basic Digest NTLM 2.2.4. Cookies và sessions Cookies là gì? Cookie thường được sử dụng để xác thực người dùng, vậy Cookie là gì? Cookie là một file nhỏ máy chủ đính kèm vào thiết bị của người dùng. Mỗi khi thiết bị đó truy cập một trang với browser, nó cũng sẽ gửi kèm cookie. Máy chủ sẽ phân tích và xử lý cookie đó. Tạo một cookie trong php setcookie(name*, value, expire, path, domain, secure, httponly); Sessions là gì? Session là cách mà máy chủ lưu thông tin (trong các biến) giữa nhiều trang với nhau. Không giống cookie, thông tin không được lưu trên máy của người dùng. Tương tác cookies và sessions giữa client và webserver. Lần đầu truy cập webserver Sinh viên thực hiện: 20102035 Lê Văn Quân K56 Lớp CNTT&TT1.1 Browser truy cập website Webserver khởi tạo session Browser lưu cookie Webserver gửi cookie cho browser Hình 7: Giao tiếp giữa server và client khi chưa có cookie và session. Lần truy cập sau Browser truy cập server, gửi kèm cookie Browser hiển thị trang, lưu cookie mới nếu có Server kiểm tra cookie có tương ứng với session nào không •Nếu không, khởi tạo session mới •Nếu có, trả về các giá trị được lưu trong session cũ Trả về trang với các biến được lấy từ session tương ứng Hình 8: Giao tiếp giữa server và client khi đã có cookie và session. Cách thức máy chủ xác thức người dùng trong web application Khi người dùng truy cập website với cookie trong http header, máy chủ sẽ tìm kiếm file session tương ứng. Nếu tồn tại file đó, máy chủ sẽ trả về trang với các biến được lưu trong file session, trong file session đã lưu các thông tin như username, …. Vì vậy chúng ta cũng có thể truy cập vào tài khoản của một user nào đó nếu biết cookie của người dùng đó. Sinh viên thực hiện: 20102035 Lê Văn Quân K56 Lớp CNTT&TT1.1 2.3. Xây dựng chương trình 2.3.1. Phân tích và thiết kế a) Yêu cầu        Chương trình có thể quét được lỗ hổng sql injection trên 1 link Chương trình có thể tự crawl các link trên website, tự động lấy các url và chạy lần lượt các trang đó Chương trình có thể tự tìm forms và chạy sql injection bằng các parameter(s). Chương trình có thể tự lọc kết quả tìm kiếm từ google, sau đó lần lượt quét các trang trên đó. Chương trình có thể quét nhiều website được lưu trữ trong file xml, txt Cho phép nhập thêm nhiều tùy chọn Hiển thị kết quả ra giao diện và tự động lưu vào file csv (với nhiều trang) hoặc log file (với 1 trang). b) Giao diện Hình 9: Giao diện chương trình quét lỗ hổng sql injection Sinh viên thực hiện: 20102035 Lê Văn Quân K56 Lớp CNTT&TT1.1 c) Thiết kế chương trình Hình 10: Sơ đồ khối chương trình Chương trình sẽ tạo một form show ra cho người dùng những tùy chọn sau đây: 1. Quét theo URL  Cho phép nhập url  Cho phép crawls với độ sâu tùy chọn 2. Quét theo kết quả tìm kiếm từ google  Cho phép nhập từ khóa 3. Quét danh sách file có sẵn  Cho phép chọn danh sách file được lưu sẵn 4. Cho phép nhập thêm những tùy chọn nâng cao như sử dụng xác thực bằng http. Sau khi người dùng nhập tùy chọn và ấn Run, phần điều khiển của chương trình sẽ dựa vào form và suy ra được command theo chương trình đã lập trình sẵn và gọi command đến sqlmap. Sqlmap được viết bằng python và được chạy trên nền python vì vậy ta cần cả python và sqlmap trên máy. Sau khi sqlmap/python chạy xong chương trình, nó sẽ trả lại kết quả cho chương trình và chương trình sẽ show nó lên form. d) Sử dụng kỹ thuật xác thực http Cú pháp của sqlmap với HTTP protocol authentication là Username:password Ví dụ $ python sqlmap.py -u "http://192.168.136.131/sqlmap/mysql/basic/get_int.php?id=1" \ --auth-type Basic --auth-cred "testuser:testpass" Sẽ tấn công http://192.168.136.131/sqlmap/mysql/basic/get_int.php?id=1 với phương thức xác thực Basic và username testuser, mật khẩu là testpass Sinh viên thực hiện: 20102035 Lê Văn Quân K56 Lớp CNTT&TT1.1 e) Sử dụng cookie Đăng nhập bằng tài khoản Đăng nhập bằng firefox Lấy cookie từ trình duyệt Vào Inspect Element, Network, Reload nếu cần, chọn request đầu tiên và xem cookie của nó. Hình 11: Quét bằng cookie đã lấy Cấu trúc quét bằng cookie của sqlmap là {command} –cookie={nội dung cookie} Thực nghiệm Hình 12: SQLmap quét không dùng xác thực, webserver trả về form đăng nhập Sinh viên thực hiện: 20102035 Lê Văn Quân K56 Lớp CNTT&TT1.1 Hình 13: Sqlmap quét sử dụng cookie, trả về trang quản trị 2.3.3. Hoàn thiện và kiểm thử chương trình a) Môi trường làm việc là Windows 10 64 bit có kết nối mạng tới website bị tấn công. b) Chuẩn bị những công cụ sau trước khi lập trình 1. Python trên Windows, tải tại https://www.python.org/ 2. Sqlmap, được viết bằng python, tải tại: http://sqlmap.org/ 3. Visual Studio dùng để viết ứng dụng trên Windows. c) Cách thức chương trình hoạt động Sinh viên thực hiện: 20102035 Lê Văn Quân K56 Lớp CNTT&TT1.1 2.3.4. Tìm hiểu và so sánh black box và white box So sánh Định nghĩa Black Box và White Box trong Web development Ưu điểm Black Box Là phương pháp kiểm tra độ bảo mật của phần mềm như một “hộp đen” – người kiểm tra không cần phải biết về hoạt động bên trong của nó. Là phương pháp kiểm tra độ bảo mật website bằng cách gửi nhận http request/response, cố tình đưa vào các input ác ý nhằm đưa ra lỗ hổng của website. Ngoài ra black box còn có thể trực tiếp quét lỗ hổng của web server.      Nhược điểm    White Box Là phương pháp kiểm tra độ bảo mật của phần mềm bằng cách quét trực tiếp source code. Là phương pháp kiểm tra trực tiếp source code, xác định truy vấn đến database có sơ hở hay không, kiểm tra cách hiển thị ra ngoài có dễ bị chèn thêm script hay không, …v…v…. Dễ dàng thực hiện Không cần biết source code Sử dụng tool có thể kiểm tra được nhiều website Kiểm tra bằng cách sử dụng chính cách hacker tấn công Chỉ sử dụng http  Không thể bao quát được toàn bộ cách tấn công của hacker. Nếu không bao quát được, hacker vẫn có thể tìm ra lỗ hổng mà developers không tìm ra Cách quét rất tốn thời gian, có thể nói là vô hạn Dễ dàng bỏ sót        Không bị ảnh hưởng tới website khi quét Có thể quét trước khi hoạt động Kiểm soát được hầu hết các chi tiết nhỏ Kiểm tra lỗ hổng trước khi hacker tấn công Thời gian quét hữu hạn Có thể bỏ sót do chỉ quét được một phần code Phải lập trình cho từng framework/ source code….. Làm tăng thời gian development rất nhiều, đặc biệt khi update code. Bảng 14: So sánh whitebox và blackbox Sinh viên thực hiện: 20102035 Lê Văn Quân K56 Lớp CNTT&TT1.1 Các tool White Box được sử dụng thường dùng để quét các unit (có thể là một class, một file php, …), được hiểu là thành phần nhỏ nhất có thể test trong Source code. Để quét bằng White Box, tester phải quên đi về Project và phải tư duy như một hacker. Trong các dự án được viết bằng php, công cụ hay được sử dụng để test là phpunit (được tải về tại: https://phpunit.de/) Ngoài ra còn có Junit cho Java, Nunit cho Dotnet….. Whitebox nói chung và phpunit nói riêng, thường được sử dụng cho Extreme Programming (thường được viết tắt là XP – là phương thức phát triển phần mềm nhanh và hiệu quả nhất khi khách hàng thay đổi yêu cầu). Quá trình phát triển phần mềm dựa trên test tự động và liên tục gọi là Test Driven Development (TDD). Trong quá trình này, thay vì code được viết trước, developers sẽ viết testing unit trước như một bản thiết kế sơ khai của chương trình, sau đó mới viết code để pass các testing unit sau. Cứ mỗi lần code thay đổi, dev(s) có thể dễ dàng chạy lại quá trình test với các test cases đã được khéo léo đưa vào lúc trước, giảm thời gian phát triển phần mềm bằng cách luôn kiểm tra được lỗi. Đối với bảo mật website nói chung và sql injection nói riêng, dev có thể chủ động đưa vào các input ác ý và định nghĩa thế nào là an toàn cho testing unit nhằm kiểm tra lỗ hổng bảo mật tự động và có thể quét liên tục trong quá trình dev. Sinh viên thực hiện: 20102035 Lê Văn Quân K56 Lớp CNTT&TT1.1 TRA CỨU BẢNG BIỂU Biểu đồ 1: Thống kê của Whitehat security về bảo mật website 2015..............……3 Bảng 2: Bảng tra cứu mã ASCII, dùng để lấy thông tin từ database……………….6 Hình 3: Website angelvestgroup.com bị lỗ hổng sql error-based…………………...7 Bảng 4: Cách sử dụng Mysql Injection……………………………………………..8 Bảng 5: Cách thức sqlmap quét form………………………………………………9 Bảng 6: Cách thức sqlmap crawl website………………………………………......9 Hình 7: Giao tiếp giữa server và client khi chưa có cookie và session…………….11 Hình 8: Giao tiếp giữa server và client khi đã có cookie và session……………….11 Hình 9: Giao diện chương trình quét lỗ hổng sql injection………………………...12 Hình 10: Sơ đồ khối chương trình………………………………………..………..13 Hình 11: Quét bằng cookie đã lấy……………………………………………….....14 Hình 12: SQLmap quét không dùng xác thực, webserver trả về form đăng nhập....14 Hình 13: Sqlmap quét sử dụng cookie, trả về trang quản trị……………………….15 Bảng 14: So sánh whitebox và blackbox…………………………………….…….16 Sinh viên thực hiện: 20102035 Lê Văn Quân K56 Lớp CNTT&TT1.1 TÀI LIỆU THAM KHẢO 1. SQLmap user’s manual: https://github.com/sqlmapproject/sqlmap/wiki 2. RFC2616: http://www.w3.org/Protocols/rfc2616/rfc2616.html 3. SQL Injection (w3schools.com): http://www.w3schools.com/sql/sql_injection.asp 4. SQL Injection (owasp.org): https://www.owasp.org/index.php/SQL_Injection 5. Out of band https://www.acunetix.com/blog/articles/blind-out-of-band-sqlinjection-vulnerability-testing-added-acumonitor/ 6. Boolean-based http://security.stackexchange.com/questions/61606/understanding-booleanbased-sql-injection 7. Time-based http://www.sqlinjection.net/time-based/ 8. Error-based http://www.sqlinjectionwiki.com/Categories/2/mysql-sql-injectioncheat-sheet/ 9. UNION query-based http://www.troyhunt.com/2013/07/everything-you-wantedto-know-about-sql.html 10. Stacked Queries http://www.w3schools.com/sql/sql_injection.asp 11. Web Application Scanners Black Box vs. White Box https://www.owasp.org/images/7/76/OWASP_IL_2008_Sharabani_BlackBox_ Vs_WhiteBox.ppt 12. Web Application Security, tác giả ThS. Trịnh Tuấn Đạt 13. http://soict.hust.edu.vn/~dattt/webjava/Bai18_WebApp_Security_Scheme.pdf 14. Session và cookie: http://w3schools.com Sinh viên thực hiện: 20102035 Lê Văn Quân K56 Lớp CNTT&TT1.1
- Xem thêm -