»-(¯`v´¯)-»Diễn Đàn Trường Công Nghệ Thông Tin Thái Nguyên»-(¯`v´¯)-»

.:hix lâu không làm web.nên giờ lười làm quá.dùng tạm cái Forum việt vậy.chủ yếu là chất lượng Những bài viết thôi đúng không.thật THà là nói hết không giấu diếm nhưng học xong cấm nghịch bậy..http://guichonguoiay.net.tf web mình đó RỖI VÀO CHơi Ha.hjhj:.
 
Trang ChínhPortalCalendarGalleryTrợ giúpTìm kiếmThành viênNhómĐăng kýĐăng Nhập
Thông Tin Cực Sock Cho Những Ai Nghiện Game Audition Của Thái Nguyên.Sau Một Thời Gian Tìm Hiểu Mà Nhờ Mấy Anh Ở forum ClbGame Mình Đã Cài THành Công Bản Audition Offline THái Nguyên.Sắp Tới Mình Sẽ Đưa Lên Online.Các Bạn Muốn Chơi Game Và Muốn Sở Hữu Những Bộ Đồ Đẹp Nhất Không Còn Chần Chừ Gì Nữa Mà Không Click Chuột Để Truy Cập Trang Web wWw.AuTn.tk Để Download Và Thưởng thức

Share | 
 

 Hackproofing MySQL (phần 1)

Go down 
Tác giảThông điệp
Admin
Admin


Tổng số bài gửi : 136
Join date : 13/03/2010

Bài gửiTiêu đề: Hackproofing MySQL (phần 1)   Tue Mar 16, 2010 9:16 pm

Hackproofing MySQL (phần 1)



Bài dịch của : PIP(VNISS)

Chris Anley [chris@ngssoftware.com]
5th July 2004
An NGSSoftware Insight Security Research (NISR) Publication
©️2004 Next Generation Security Software Ltd
http://www.ngssoftware.com/


Table of Contents
Introduction...................................... .................................................. .................................
MySQL versions and patching.......................................... .................................................. ......
MySQL in the network........................................... .................................................. ......... ...
Bugs In The Authentication Protocol.......................................... .............................................
Basic Cryptographic Weakness in the Authentication Protocol Prior to 4.1.......................................
Authentication Bypass and Stack Overflow in Version 4.1.0-4.1.2 and 5.0.......................................
Authentication Algorithm Prior to 3.23.11........................................... ......................................
CHANGE_USER Prior to 3.23.54 and 4.x prior to 4.0.6............................................. ..................
Other Historical Bugs.............................................. .................................................. ..........
MySQL as a web back-end............................................... .................................................. .
SQL injection in MySQL............................................. .................................................. .......
UNION SELECT............................................ .................................................. .................
LOAD_FILE function.......................................... .................................................. .............
LOAD DATA INFILE statement......................................... .................................................
SELECT ... INTO OUTFILE........................................... ..................................................
Time delays and the BENCHMARK function.......................................... ..............................
User defined functions......................................... .................................................. ........
Local Attacks........................................... .................................................. ..................
Other MySQL features to be wary of................................................ .................................
MySQL Lockdown Checklist......................................... .................................................. .

Giới Thiệu :

MySQL được xem là hệ thống cơ sở dữ liệu mã nguồn mở được sử dụng phổ biến nhất trên thế giới. Vời điều kiện đó, sản phẩm này hoàn toàn miễn phí, có thể kể đến các điểm mạnh của Mysql đó là chạy ổn định trên hầu hết các hệ điều hành, tương đối đơn giản, dễ dàng cấu hình, thực hiện các tác vụ tốt ngay cả với những vấn đề nghiêm trọng nhất. Bằng viêc so sánh với các hệ thống quản lí cơ sở dữ liệu khác, ta thấy Mysql việc cấu hình khá đơn giản, nhưng xét về tính bảo mật, mysql vẫn còn những chặng đường thách thức phía trước. Tài liệu này tóm tắt các kiểu tấn công thông dụng nhất, cũng như các bước bảo mật dành cho nhà quản trị.

Phiên bản Mysql và vấn đề về lỗi:

Mysql AB vẫn tích cực duy trì một vài phiên bản phần mềm cơ sở dữ liệu của họ, và xác định phiên bản nào còn khó khăn trong việc cài đặt. Từ việc kiểm tra các điểm bảo mật, họ đi đến giải quyết các vấn đề khó khăn còn tồn tại trong sản phẩm, sau đó thêm các chức năng bảo mật vào sản phẩm và thường được xem là phiên bản alpha vì thế nó ko được xem là phiên bản chính thức. Phiên bản 3.23.x và các phiên bản cũ hơn, một số ít đã quá lỗi thời. Nhiều cải tiến đã được đưa vào phiên bản 4. Phiên bản 4.0.x là phiên bản chính thức khi tôi đang viết bài hướng dẫn này, phiên bản này được cải tiến hown nhiều so với phiên bản 3.23.x đặc biệt ở phiên bản này là có hỗ trợ UNION (sẽ nói rõ sau trong phần SQL injection ), hỗ trợ giao thức kết nối mã hóa SSL, và nhiều đặc tính nổi bật khác. Phiên bản 4.1.x hiện thời là phiên bản alpha, nó có 1 vài thay đổi trong giao thức xac thực bao goomg một hàm tên là SHA1.Việc bổ sung giao thức xác thực trong phiên bản trước của Mysql được mã hóa kém và đã có 1 vài lời than phiền về các cuộc tấn công liên quan đến phiên bản này. Ngoài ra cơ chế xác thực mới trong 4.1 cho phép hỗ trợ subqueris, unicode, và thêm một số đặc tính nổi bật đối với phiên bản 4.0. Phiên bản 5.0 là phiên bản phát triển. Điểm chú ý nhất trong phiên bản này là có thêm một vài tính năng cho phép hỗ trợ stored procedures.

Trong lúc tôi viết bài này, phiên bản hiện thời là 4.0.20. Có một vài tính năng bảo mật mới trong 4.1, ví dụ như cơ chế mật khẩu mới với 1 giao thức xác thực bảo mật hơn, nhưng các tính nĂng này là phiên bản alpha và vì thế bạn ko nên quá tin tưởng nó. Nếu bạn muốn cài phiên bản bảo mật hãy cài phiên bản mới nhất và câp nhật thông tin thường xuyên. Trong phiên bản mới, vấn đề bảo mật được tìm thấy hàng ngày và có cảm tưởng như bản vá lỗi được tung ra đều đặn. Nếu bạn có một lí do tốt để sử dụng các phiên bản khác với phiên bản thịnh hành , trong ý nghĩ bản thân bạn có thể khám phá ra cac vấn đề về bảo mật và thu gom được kết quả đáng tin cậy. Người đi trước có thể triển khai các công việc không hoàn chình, và người sau thông qua các nhìn tỉ mỉ và thấu đáo cung đóng góp 1 chút nào cho công việc kia.


MySQL in the network :

Kể từ khi Mysql được tung ra miễn phí và sử dụng thịnh hành, bạn có thể ngạc nhiên khi tìm thấy nó có mọi nơi trên mạng máy tính. Đã có nhiều đề án mã nguồn mở tích hợp với sản phẩm này, vì vậy việc tìm thấy người dùng Mysql trên máy tính của họ thì hiếm hơn so với sử dụng cho server. Trong các cấu hình đặc trưng, một máy khách sẽ kết nối tới Mysql thông qua TCP cổng 3306. Trên HĐH Windows, Mysql có thể được cấu hình để chạy thông qua các pipe ( kí hiệu ống dẫn ) với lựa chon 'enable-named-pipe' nhưng cách này ko được khuyến cáo. Theo mặc định, mysql sẽ chạy rong chế đọ named pipe, sẽ lắng nghe trên ca 2 cổng TCP 3306 và một named pipe được đặt tên là "MySSQL". Giao thức mạng mà MySQL sử dụng thì tương đối đơn giản ( khi so sánh với các DBMS khác như Oracle) theo mặc định là plaintext, mặc dù phiên bản được kích hoạt SSL có sẵn trong phiên bản hiện thời (4.0.0 và cao hơn). Phiên bản được kích hoạt SSL vẫn thi hành qua TCP cổng 3306 và vượt qua luồng SSL
Bạn có thể dễ dàng kiểm tra phiên bản MySQL mà 1 host đang chạy khi nó được trả về trên biểu ngữ lúc bạn kết nối. Một số phiên bản thường trả bề manh mối của hệ điều hành, ví dụ như 4.0.18-nt được trả về bởi phiên bản 4.0.18 MySQL trên Windows. Tại thời điểm bài viết đặc tính này ko thể thay đổi bởi nhà quản trị trừ khi thay đổi mã nguồn hay sửa giá trị nhị phân, vì thế có nghiã là phiên bản MySql bạn nhìn thấy là chính xác. Một số CT quét cổng TCP chộp biểu ngữ cũng có thể cho ta phiên bản Mysql. Có thể công dụng phổ biến nhất của mysql là phụ trợ cho các ứng dụng web động. Nó thường được xem như là CT phụ trợ của ứng dụng Apache/PHP và cũng có thể chạy trên cùng host như một web server. Trong môi trường rộng hơn nó có thể được sử dụng như một logging server, như đích cho IDS logs, web server logs hay các audit task ( kiểm tra thao tác ) khác. Trong mạng nội bộ bạn có thể thấy Mysql được sử dụng nhiều hơn theo lối cổ, chế độ phục vụ - khách, có thể phụ trợ cho helpdesk system ( tạm dich là hệ thống giúp đỡ văn phòng ). Đấy là một số lí do vì sao người dùng trên khắp thế giới sử dụng Mysql trên may tính để bàn của họ, vì thế ko hiếm khi thấy mysql trong các trạm làm việc, đặc biệt là trong các môi trường phát triển.
Cách cấu hình phổ biến thường là triển khai một SSH serrver chung trên một host như là Mysql server và sử dụng cổng chuyển tiếp để kết nối tới cổng 3306 thông qua tunnel được mã hóa. Có một số thuận lợi khi đề cập tới điều này, nó có nghĩa là dữ liệu được mã hóa trong khi chuyển tiếp, nó bắt buộc phải thêm vào một bước xác thực và nó cũng cung cấp một mẫu tin kiểm tra việc kết nối tới một DB server. Để xem chi tiết về vấn đề triển khai cách cấu hình này, bạn có thể tham khảo tại:

http://dev.mysql.com/doc/mysql/en/Se...st_attack.html

http://dev.mysql.com/doc/mysql/en/Se...nnections.html


Và tài liệu về client-server của người bạn.
Duy chỉ có một lời khuyên với bạn về việc cấu hình bảo mật cho Mysql chạy trên cùng một host với web server là thực sự nguy hiểm, để các kết nối từ xa đến Mysql server bị ngăn chặn. Vì thế những cách cấu hình này có thể tự nó có những mối nguy hiểm tiềm ẩn bởi vì các table trong Mysql được lưu trữ trong các thư mục mà bản thân nó ko được khóa (bảo mật kĩ lưỡng ). Lỗi để lộ một thư mục trong ứng dụng wweb có thể là mục tiêu tố cho kẻ tấn công có thể download cá thực thể nhạy cảm trong một DB. Một cái nhìn khác, nếu trong một ứng dụng wweb bị lỗi SQL injection có thể là một cơ hội cho kẻ tấn công thay đổi nội dung các script trên web server. Nhìn nhận đúng vấn đề này sẽ ngăn ngừa được các mỗi nguy hiểm trên, nhưng điều mà bạn phải ghi nhớ đó là đặt web server và DB server trên cùng một host sẽ mở nhiều con đường khai thác cho kẻ tấn công.


Bugs In The Authentication Protocol :

Có một số lỗi đáng kể tần tại trong giao thức xác thực của Mysql. Lỗi chúng tôi đề cập để bạn tham khảo là: Basic Cryptographic Weakness in the Authentication
Protocol Prior to 4.1 ( Có thể hiểu đây là lỗi mã hóa kém trong giao thức xác thực )

Trong phiên bản của Mysql trước 4.1, việc nhận biết password hassh ( lưu trong table mysql.user ) có khả năng xác thực hơn là nhận biết password. Điều này có nghĩa là việc viết ra công cụ crack password trong phiên bản Mysql trước 4.1 là có thể, công cụ này bạn có thể tìm thấy dễ dàng trên internet.
Thuật toán xác thực tự bản thân nó cũng hàm chứa những lỗi mã hóa trong phiên bản 4.1. Để hiểu thêm điều này bạn có thể tham khảo tại:
http://icat.nist.gov/icat.cfm?cvename=CVE-2000-0981

Authentication Bypass and Stack Overflow in Version 4.1.0-4.1.2 and 5.0 :

Bằng kĩ thuật đệ trình gói dữ liệu xác thực, kể tấn công có thể bypass password xác thực trong Mysql 4.1.0 -4.1.2 và phiên bản 5.0 mới phát hành.

Từ hàm check_connection (sql_parse.cp), dòng ~837:

/*
Old clients send null-terminated string as password; new clients send
the size (1 byte) + string (not null-terminated). Hence in case of empty
password both send '\0'.
*/
uint passwd_len= thd->client_capabilities & CLIENT_SECURE_CONNECTION ?
*passwd++ : strlen(passwd);
Provided 0x8000 is specified in the client capabilities flags, the use can specify the
passwd_len field of their choice. For this attack, we will choose 0x14 (20) which is the
expected SHA1 hash length.
Several checks are now carried out to ensure that the user is authenticating from a host
that is permitted to connect. Provided these checks are passed, we reach:
/* check password: it should be empty or valid */
if (passwd_len == acl_user_tmp->salt_len)
{
if (acl_user_tmp->salt_len == 0 ||
acl_user_tmp->salt_len == SCRAMBLE_LENGTH &&
check_scramble(passwd, thd->scramble, acl_user_tmp->salt) == 0 ||
check_scramble_323(passwd, thd->scramble,
(ulong *) acl_user_tmp->salt) == 0)
{
acl_user= acl_user_tmp;
res= 0;
}
}
the check_scramble function fails, but within the check_scramble_323 function we see:
my_bool
check_scramble_323(const char *scrambled, const char *message,
ulong *hash_pass)
{
struct rand_struct rand_st;
ulong hash_message[2];
char buff[16],*to,extra; /* Big enough for check */
const char *pos;
hash_password(hash_message, message, SCRAMBLE_LENGTH_323);
randominit(&rand_st,hash_pass[0] ^ hash_message[0],

hash_pass[1] ^ hash_message[1]);
to=buff;
for (pos=scrambled ; *pos ; pos++)
*to++=(char) (floor(my_rnd(&rand_st)*31)+64);
extra=(char) (floor(my_rnd(&rand_st)*31));
to=buff;
while (*scrambled)
{
if (*scrambled++ != (char) (*to++ ^ extra))
return 1; /* Wrong password */
}
return 0;
}

Tại thời điểm này, người dùng đã chỉ định một chuỗi "scrambled" theo ý mình. Đây là 1 chuỗi zero-length (theo mình hiểu đây là 1 chuỗi rỗng ) trong trường hợp dễ dàng bypass authentication. Bằng cách so sánh vòng lặp cuối cùng của 1 kí tự trong chuỗi "scrambled" đối với đoạn chuỗi mà mysql biết để đáp ứng đúng cho đến khi ko còn các kí tự trong chuỗi "scrambled", ngay lập tức hàm trở về "0", cho phép người dùng xác thực với chuỗi zero-length. Lỗi này thì tương đối dễ khai thác, mặc dù thông thường nó cần thiết phải viết một máy khác myssql để làm điều này.

Ngoài lỗi zero-length string authentication bypass, lỗi tràn bộ đệm trên ngăn xếp có thể gây tràn bộ nhớ bởi một chuỗi "scrambled" dài. Bộ nhớ tràn do các kí tự xuất ra từ hàm my_rnd(), một số gải mạo được tạo ra ngẫu nhiên. Các kí tự nằm trong phạm vi 0x40..0x5f. Trên một HDH, việc tùy ý thực thi các đoạn mã là điều có thể, mặc dù việc khai thác khá phức tap và cần dùng đến kĩ thuật brute force, hoặc ít nhất là phải có hiểu biết về password hash. Cách tấn công này mới thực sự hiệu quả nếu kẻ tấn công biết hoặc có thể đoán ra tên một user, vì thế cách phòng ngừa đó là đổi tên tài khoản "root" mặc định của Mysql. Cũng vậy, tài khoản đang được nói đến cũng phải được accessible từ host của kẻ tấn công, vì vậy việc ứng dụng kiểu hạn chế truy cập cơ bản trên địa chỉ Ip cũng có thể giảm thiểu nguy cơ bảo mật của lỗi hổng này.

Authentication Algorithm Prior to 3.23.11 :

Trong Mysql version prior to 3.23.11 tồn tại một lỗi nghiêm trọng trong cơ chế xác thực mà qua đó kẻ tấn công có thể xác thực đơn giản chỉ việc sử dụng 1 kí tự đơn trong password "scrambled". Nó gọi ra chuỗi gồm có các kí tự từ một tập hợp 32 (from a set of 32). Vì vậy kẻ tấn công chỉ cần 1 chút phỏng đoán là có thể đăng nhập thành công. Để tham khảo thêm, bạn có thể xem tại :
http://icat.nist.gov/icat.cfm?cvename=CVE-2000-0148

CHANGE_USER Prior to 3.23.54 and 4.x prior to 4.0.6
Trong phiên bản Mysql trước 3.23.54, nếu người dùng được xác thực, họ có thể đưa ra câu lệnh 'CHANGE_USER' với các chuổi khá dài (để gây tràn bộ đệm) hoặc một chuỗi đợn nhằm cho phép leo thang đặc quyền một cách dễ dàng.
<http://icat.nist.gov/icat.cfm?cvename=CAN-2002-1374>
<http://icat.nist.gov/icat.cfm?cvename=CAN-2002-1375>
Việc cấu hình vững chắc nhằm nâng cao tính bảo mật là triển khai Mysql trên một host mà chỉ hiện diện các network daemon là SSH. Điều này có thể thực hiện được với một script IPtables có chức năng block tất cả các IP truy cập ngoại trừ cổng 22 (hoặc bất cứ cổng nào mà SSH đang lắng nghe ). Lý do đằng sau vấn đề này là (cũng được xem như 1 bài tập tốt) SSH có thể bắt buộc điều kiện mã hóa mooth layer, quyền xác thực và sửa chữa điều kiện trong cơ chế chính của Mysql.

Other Historical Bugs:

MySQL có khá nhiều lỗ hổng đã được thông báo.Phần này sẽ tổng kết các lỗi bảo mật này.Dĩ nhiên có một điều cần nói với bạn là:Cách sữa lỗi tốt nhất cho các lõ hổng này là tải các bản Patch từ người bán.Điều này thực sự hữu ích cho việc phòng chống các lỗ hổng nghiêm trọng,trong quá khứ khi MySQl được phát hiện có các lỗi bảo mật,đó cũng là một ngụ ý tốt cho các lỗi sẽ được phát hiện trong tương lai.

Ngoài điều này,nó còn thực sự hữu ích,coi như là một bài tập để ta giải quyết các lỗi bảo mật nghiêm trọng theo một cách khác và áp dụng chúng vào hoàn cảnh hiện tại.Do đó kĩ năng bảo mật của bạn được cải thiện từ đó có thể phòng tránh các attack mà chưa được phát hiện ra.

Sau đây là tổng hợp các lỗi mà bạn cần phải tham khảo thêm:


CVE ID Description:
CAN-2004-0388 Script mysqld_multi cho phép local users viết đè lên các file tùy ý thông qua 1 cuộc tấn công symlink
Workaround – revoke access to the script.

CAN-2004-0381 MySQL cho phép local user ( người dùng cục bộ) viết đè lên các file tùy ý qua 1 cuộc tấn công symlink failed-mysql-bugreport trong 1 file nhất thời
Workaround – revoke access to the script.

CAN-2003-0708 Tràn bộ đệm trong get_salt_from_password ở sql_acl.cc với Mysql 4.0.14 và trước đó, và 3.23.x, cho phép kẻ tấn công thực hiện mã tùy ý qua trường password dài. (note - một kẻ tấn công có thể sửa một pass của người dùng cốt để thực hiện đợt tấn công này, đó là kết quả của việc thực thi mã tùy ý.)

CAN-2003-0150 mySSql 3.23.55 và trước đó tạo trường world-writeable và cho phép người dùng mysql có thể chiếm đặc quyền root bằng việc dùng câu lệnh " SELECT * INTO OUTFILE" để ghi đè lên file cấu hình và khiến mysql chạy như root vào lúc restart.

CAN-2003-0073 2 chỗ yếu trong trong mysqld với Mysql trước .3.23.55 cho phép kẻ tấn công từ xa thực hiện cuộc tấn công " từ chối dich vụ" qua mysql_change_user.

CAN-2002-1376 thư viện khách libmysqlclient trong mysql 3.x đến 3.23.54 và 4.x đến 4.0.6, ko thẩm định đúng độ dài fields cho những sự đáp ứng nào đó trong (1) read_rows hay (2) read_one_row của các tệp tin thi hành, chúng cho phép kẻ tấn công từ xa thực hiện 1 cuộc 'từ chối dịch vụ" và có thể thực hiện các mã lệnh tùy ý. (note- trong trường hợp này, kẻ tấn công có thể tạo một Mysql server hiểm độc và tấn công các clients kết nối tới chúng. Đó có thể là 1 cách làm tổn thương tới web server.)

CAN-2002-1375 Lệnh COM_CHANGE_USER trong Mysql 3.x trước 3.23.53 và 4.x đến 4.0.6 cho phép kẻ tấn công từ xa thực hiện mã lệnh tùy ý thông qua một đáp ứng dài.

Lỗ hổng này (cùng với CAN-2002-1374 bên dưới ) là một lí do hoàn hảo để rename tài khoản 'root' mặc định. Kẻ tấn công phải biết tên của một người dùng mysql để tiến hành cuộc tấn công này

CAN-2002-1374 Lệnh COM_CHANGE_USER trong Mysql 3.x trước 3.23.54 và 4.x trước 4.0.6 cho phép kẻ tấn công từ xa chiếm quyền đặc lợi qua một một cuộc tấn công brute force (dùng một kí tự password ), nguyên nhân là do mysql chỉ so sánh password nhập vào với kí tự đầu tiên của password thật.Kẻ tấn công phải biết tên của một người dùng Mysql để thực hiện đợt tấn công này.

CAN-2002-1373 chỗ bị tôn thương signed integer trong gói COM_TABLE_DUMP của mysql 3.23.x và trước 3.23.54, cho phép kẻ tấn công từ xa thực hiện một cuộc tấn công ' từ chối dịch vụ' trong mysqld bởi số nguyên âm lớn được nhập vào một memcpy call.

CAN-2002-0969 Tràn bộ đệm trong Mysql trước 3.23.50 và 4.0 beta trước 4.0.2 cho phép local users thực hiện mã lệnhj tùy ý qua một tham số "datadir" dài trong file khởi tạo my.ini, file mà trong win có được cho phép Full Control đối với Everyone group .

CAN-2001-1255 WinMySQLadmin 1.1 giữ MySQL password trong một văn bản thuần túy trong file my.ini, cho phép local user có thể giành được quyền truy nhập Mysql database. (note - lỗi này chưa được fix trong thời gian bài viết )

CVE-2001-0407 lỗi vượt qua thư mục trong Mysql trước 3.23.36 cho phép local user thay đổi file tùy ysvaf chiếm đặc quyền bằng việc tạo 1 DB có tên bắt đầu bằng .. ( 2 dấu chấm )

CAN-2001-1274 tràn bộ đệm trong Mysql trước 3.23.31 cho phép kẻ tấn công thực hiện cuộc tấn công "từ chối dịch vụ" và có thể chiếm đặc quyền.

CAN-2001-1275 Mysql trước 3.23.31 cho phép người dùng với 1 tài khoản Mysql sử dụng lệnh SHOW GRANTS để giành được password đã được mã hóa của admin từ bảng mysql.user và có thể chiếm đặc quyền qua việc crack password.

CVE-2000-0981 Mysql Database Engine sử dụng một phương thức xác nhận yếu có thể làm rò ra những thông tin mà kẻ tấn công từ xa có thể lợi dụng để sửa lại password.

CVE-2000-0148 Mysql 3.22 cho phép kẻ tấn công từ xa có thể bypass và truy nhập vào DB qua kiểm tra chuỗi kí tự ngắn ( tương tự như CAN-2002-1374)

CVE-2000-0045 Mysql cho phép local user sửa password cho một người dùng Mysql tùy ý qua đặc quyền GRANT

CVE-1999-1188 mysqld trong Mysql 3.21 tạo caca log file với quyền đọc cho tất cả mọi người ( world -readable permissions ), cho phép local user có thể giành được password của nhưng người dùng mà được add vào user database.

Mysql as a web back-end :

Nếu có thể nói một cấu hình đơn giản cho Mysql nó có thể là chương trình phụ trợ cho ứng dụng web Apache/PHP. Có rất nhiều các bài chỉ dẫn trong việc triển khai sự phối hợp của scripting language và DB server với các nền móng khác nhau nhưng ở đây chúng ta sẽ ko nói lại chúng ở đây, tuy nhiên kinh nghiêm trong kiểm toán mạng máy tính đã chỉ cho chúng ta rằng có một vài lỗi mà con người hay mắc phải khi thiếu lập cấu hình Mysql:

1) Sự giới hạn ko tương xứng của sự kết nối mạng từ các web server hay Mysql server.

2) Các miếng vá của Mysql server ko đầy đủ.

3) Sử dụng tài khoản "root" hay một số tài khoản đặc quyền khác để connect vào DB.

4) Ko hạn chế host-based của các tài khoản Mysql.

5)MySQL deamon thường được cấu hình để chạy với unix 'root' acc, Windows LocaSystem acc, hay một số tài khoản đặc quyền khác

6)Sự thiếu hạn chế trong Mysql file access, và sự lỏng lẻo trong file permission trong host mà Mysql đang chạy trên đó.

7)LOAD DATA LOCAL INFILE được cho phép. Đấy rõ ràng là một lỗi hiển nhiên, nhưng theo kinh nghiệm của chúng tôi nó lại khá phổ biến. Một list tham khảo đã mô tả các fix chúng được cung cấp vào cuối bài này.

SQL injection in MySQL:

Dù sau một vài năm được công bố bởi security community, SQL injection dường như vẫn là một vấn đền lớn. Vấn đề ở đây chính là sự thiếu phê chuẩn đầu vào trong ứng dụng web, nhưng sự cấu hình của chương trình phụ trợ (back-end) DB cũng góp phần rất lớn trong sự thành công của kẻ tấn công. Nếu bạn khóa được Mysql box tốt, việc phá hoại bởi chỗ hổng của ứng ụng có thể được giảm nhẹ.

Trước khi ta để cập cụ thể tới SQL injection trong Mysql, hãy coi như đây là 1 cách tấn công phổ biến. Bài này cho là bạn đã có sự hiểu biết về SQL injection. Nếu ko quen thuộc với SQL injection, hãy xem :

http://www.ngssoftware.com/papers/ad..._injection.pdf
http://www.ngssoftware.com/papers/mo..._injection.pdf

Trong PHP, thiết lập kiểm soát 'magic_quotes_gpc', sẽ tự động loại bỏ single quotes, double quotes, backslashes và NULLs. Trong 'magic_quotes_gpc', 'gpc' thay thế cho GET/POST/COOOKIE. Sự thiết lập này trong các version hiên tại được mặc định là enable, vì thế nên nếu giá trị được nhập vào được đặt trong 1 biên chuỗi :

$query = "SELECT * FROM user where user = '" . $_REQUEST['user'] . "'";

.....Sql injection là ko thể. Tuy nhiên nếu giá trị nhaap vào được đặt trong 1 phần ko định danh của câu lệnh như giá trị số, tên bảng, tên cột :

$query = "SELECT * FROM user order by " . $_REQUEST['user'];
hay
$query = "SELECT * FROM user where max_connections = " . $_REQUEST
['user'];

......Sql injection có thể được. Một đường có thể với numeric problem trong PHP/MySql là định danh tất cả nhưng gì mà người dùng nhập vào trong single quotes, gồm cả số. Sự so sanh vẫn làm việc, nhưng 'magic_quotes_gpc' sẽ chống lại việc kẻ tấn công thoát khỏi chuỗi. Rõ ràng nếu 'magic quotes' tắt đi, SQL injection sẽ luôn luôn là có thể, tùy thuộc vào giá trj người dùng nhập vào như thế nào.

Cứ cho rằng kẻ tấn công mở một cuộc tấn công SQL injection, câu hỏi sẽ là : chúng có thể làm gì ? Dưới đây cung cấp 1 list thực sự nguy hiểm :

UNION SELECT
LOAD_FILE function
LOAD DATA INFILE statement
SELECT ... INTO OUTFILE statement
BENCHMARK function
User Defined Functions (UDFs)

Để chúng ta có thể làm việc với ví dụ cụ thể, chúng ta sẽ sửa chút ít của 1 trong những script php thông dụng thành một script dễ bị tổn thương được chúng ta tính trước. Script này có thể làm việc với mysql được cài đặt mặc định, chúng ta sẽ dùng user "root" và "mysql" DB mặc định để giải thích SQL injection.
Về Đầu Trang Go down
Xem lý lịch thành viên http://itcu.forumvi.com
 
Hackproofing MySQL (phần 1)
Về Đầu Trang 
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
»-(¯`v´¯)-»Diễn Đàn Trường Công Nghệ Thông Tin Thái Nguyên»-(¯`v´¯)-» :: Phận Làm Trai Gõ Phím Bình Thiên Hạ--Chí Anh Hùng Click Chuột Định Giang Sơn :: Những điều cơ bản để hack một trang web-
Chuyển đến