1. Trang chủ
  2. » Công Nghệ Thông Tin

Hacker Professional Ebook part 276 doc

6 68 0

Đang tải... (xem toàn văn)

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 6
Dung lượng 172,48 KB

Nội dung

$result = @imap_body($vnforce, 1); echo $result; @imap_close($vnforce); ?> black_hat_cr(HCE) Mysql & PHP SQL Injection hê hê, thức trọn đêm đọc hiểu , và dịch tiếng Lào và viết lại bài này, sau đây là kết quả Edited , chúc anh em vui vẻ !!!! Enjoyyyy !!!!!!!!!!!!!! sry ko bỏ [code] đc , khi nào rảnh bỏ , giờ vô làm vài trận CS với mụ HY cái Bài Dịch Của Unixzdo (Mod dịch thuật của HCE cũ) - Edited by Micimacko[HcE] ==================== SQL Injection MySQL via PHP Code: ==================== Contents 1 Introduction 2 SELECT 3 INSERT 4 UPDATE 5 Conclusion/Credit Lời giới thiệu: Bài viết sẽ giúp bạn biết những điều tôi biết về injection sql trong php, với cơ sở dữ liệu MySql. ##Mã mysql/php được đặt màu xanh và các giá trị gán cho biến với mục đích inject đặt màu đỏ. Mọi bài thực hành được viết ở đây được chính tôi thực hiện. Bạn sẽ thấy có một trường hợp nhỏ của sự tương thích sql injection với ngôn ngữ php, trái với ASP hoặc JSP, bởi vì nhược điểm cấu hình của nó (sẽ được nói đến sau). Với sự cập nhật liên tục về MySql, một điều hiển nhiên rằng sẽ không bao giờ có một hướng dẫn hoàn thiện, đầy đủ về chủ đề này :D (hoặc ít nhất cũng không thể đầy đủ trong một thời gian dài). Chúng ta hãy nhớ điều này: cốt yếu của injection sql là nó thay đổi cái mục tiêu ban đầu của một yêu cầu sql (ko theo ý muốn của coder) , nhờ vào việc thay đổi các biến (có thể thay đổi đc) bởi người dùng. Hãy tưởng tượng một trang php cho phép tìm kiếm một người dùng đã được ghi nhớ trên site đó. Yêu cầu có thể theo kiểu sau: $req ="SELECT * FROM members WHERE name LIKE ' %$search%' ORDER BY name"; vị trí $search là một biến có thể thay đổi bởi người dùng, đến từ một form post (hoặc một thứ khác giống như thế) từ kiểu sau: < form method="POST" action="<? echo #; ? > "> < input type="text" name="search"><br > < input type="submit" value="Search" > </form > Ví dụ Search form ở trên làm việc với các thênh viên theo thứ tự abc ('theo tên') , và cũng làm việc tốt với uid, khi đó ta có thể cho $search giá trị: %' ORDER BY uid #. Với thứ tự làm việc của các mã thì yêu cầu thi hành lúc đó sẽ được chuyển thành: SELECT * FROM members WHERE name LIKE ' % % ' ORDER BY uid#% ' ORDER BY name Cái gì thì không phải là kịch bản chính :) . Tôi sẽ không đi vào chi tiết ví dụ này, chúng ta không phải vội vã đê hiểu hết tất cả, mọi điều đều có thứ tự của nó :D , nếu mọi thứ đc trình bày cùng 1 lúc thì bạn sẽ chẳng biết đc nên quan tâm đến điều gì, và nguyên lý cốt yếu của nó là gì? Trở lại vấn đề cấu hình php. Có một dòng trong file "php.ini" để xác định "magic_quotes_gpc". Nếu tuỳ chọn này ở ON , là trường hợp kém an toàn (97% các site php thường như vậy), các dấu " và ' sẽ thành dấu gạch chéo( \ ), IE sẽ chuyển nó thành dạng \" và \' Như vậy với ví dụ đầu của chúng ta, yêu cầu thi hành sẽ là: SELECT * FROM members WHERE name LIKE '%%\' ORDER BY uid#%' ORDER BY name Những giá trị thực nào tìm kiếm một cái tên mà chứa câu: % ' ORDER BY uid # trong bảng 'members' ,điều mà tất nhiên là sẽ không cho một kết quả nào. Dưới đây sẽ trình bày tại sao trong phần này chúng ta làm việc trên một site với magic_quotes_gpc ở tùy chọn off. 3 kiểu yêu cầu thi hành chính (3 kiểu Query chính) trong các mã php là SELECT, INSERT và UPDATE. SELECT rút thông tin của một hay nhiều bảng, INSERT thêm một bản ghi, và UPDATE thay đổi một bản ghi đã được tạo ra rồi. **SELECT: Bắt đầu từ truyền thống, yêu cầu SELECT được sử dụng nhiều nhất trong các website , và hiểu biết về injection SQL với SELECT đc biết đến sớm nhất, nên nó được nói đến nhiều nhất . SELECT thường được sử dụng trong sự xác nhận admin hoặc member. Như vậy hãy tưởng tượng một form hỏi mật khẩu và cho login. Các giá trị nhập vào sau đã được trả lại hướng tới một yêu cầu mysql: $req= "SELECT uid FROM admins WHERE login='$login' AND password='$pass'"; Yêu cầu này được thực hiện, nếu có một kết quả,tức là các giá trị nhập vào cho biến login và password trên là tồn tại và thích hợp,và như vậy ta sẽ login vào với một administrator. Cái nhìn đầu tiên, để hợp lệ hóa yêu cầu này, cần một giá trị login và password hợp lệ. Do vậy biểu thức login='$login' hoặc password='pass' trả lại giá trị đúng, có thể cần giá trị login và password nhập vào $login/$pass là tồn tại. Đó là một chút nói về điều kiện luôn có giá trị trả về là đúng. Phải gọi chúng nhiều lần để khẳng định rằng các điều kiện trong các trường hợp này ở đó. Tôi đã bỏ công soạn thảo cho các bạn một danh sách nhỏ các yêu cầu mà luôn luôn trả lại kết quả là OK :D SELECT * FROM counts WHERE 1=1 SELECT * FROM counts WHERE ' uuu' = 'uuu' SELECT * FROM counts WHERE 12 SELECT * FROM counts WHERE 3>2 SELECT * FROM counts WHERE 2<3 SELECT * FROM counts WHERE 1 SELECT * FROM counts WHERE 1+1 SELECT * FROM counts WHERE 1 1 SELECT * FROM counts WHERE ISNULL(NULL) SELECT * FROM counts WHERE ISNULL(COT(0)) SELECT * FROM counts WHERE 1 IS NOT NULL SELECT * FROM counts WHERE NULL IS NULL SELECT * FROM counts WHERE 2 BETWEEN 1 AND 3 SELECT * FROM counts WHERE 'b' BETWEEN 'a' AND 'c' SELECT * FROM counts WHERE 2 IN (0,1,2) SELECT * FROM counts WHERE CASA WHEN 1>0 THEN 1 END Bạn giữ và hiểu nó, tôi khẳng định rằng mỗi cái đó là một thực tế chắc chắn và hiển nhiên : 1=1 (biểu thức 1=1 hé,vâng), 3 lớn hơn 2 (liệu có gì đúng hơn ko nhỉ :D) , Tất nhiên rằng ngoài những cái trên ra còn có những cái khác cũng tốt, nhưng ta tạm nêu ra thế thôi. Ý tưởng mà biểu thức luôn trả lại giá trị 'ok' trong yêu cầu, là một trong những nguyên lý lớn của injection sql. Thực vậy, nếu một người chèn một giá trị luôn đúng vào yêu cầu, thật vô ích khi có một form login và một đòi hỏi nhập password. Ví dụ khi cho biến login và biến pass giá trị : 'GOLD 'a' = 'a , yêu cầu sql sau sẽ được thực hiện: SELECT uid FROM admins WHERE login = ' 'GOLD 'a' = 'a' AND password = ' ' GOLD 'a' = 'a' Điều gì sẽ trả lại 'ok' ? Chính từ 'a' = 'a' là luôn đúng. Ở đây bản ghi đầu tiên của bảng sẽ được chọn, biến uid được rút ra như vậy sẽ là '1' . Và trong hầu hết các trường hợp, member/admin đầu tiên được ghi vào database là chủ của site, do vậy nghiễm nhiên ta trở thành admin với hầu hết quyền trên site :D . Nếu một kẻ muốn có thể chọn tại khoản để truy cập (ví dụ như một kẻ mạo danh), điều cần thiết là phải có thông tin. Nếu một kẻ muốn có tài khoản của john, chỉ cần trả lại cho $login "john" và $pass là một biểu thức luôn đúng, ví dụ: 'GOLD 'b' BETWEEN 'a' AND 'c ,điều mà sẽ được thực hiện bởi yêu cầu sau: SELECT uid FROM admins WHERE login= 'John' AND password = ' 'GOLD 'b' BETWEEN 'a' AND 'c' Bây giờ hãy xem một nguyên lý lớn khác của sql injection,điều mà có thể có ích trong ví dụ mà chúng ta có ở đây, và trong những ví dụ khác : sự sử dụng kí tự comments ( # ) . Thoạt tiên kí tự # , kí tự chú giải tất cả những cái đi theo sau nó (do đó những cái đó sẽ không đc thực hiện trên cơ sở dữ liệu nữa). Ví dụ: SELECT * FROM counts WHERE nom=' Jack' # comment yêu cầu này sẽ được thực hiện: SELECT * FROM counts WHERE nom=' Jack' /* và */ cũng có thể được sử dụng để chuyển vào trong chú giải tất cả những gì ở giữa chúng). Ví dụ:

Ngày đăng: 04/07/2014, 12:20

TỪ KHÓA LIÊN QUAN