Xin hỏi về UNION Based SQL injection

lelelov3

W-------
11/03/2015
4
33 bài viết
Xin hỏi về UNION Based SQL injection
Hầu hết các tut trong và ngoài nước về sql injection hiện nay đều chỉ mang tính chất hướng dẫn thao tác. Bởi vậy, mình post thread này có đôi điều xin hỏi về bản chất đằng sau của sql injection qua một số thao tác như vậy

Bây giờ giả sử ta biết bảng có tên products của trang co loi sql injection http://site.com có 3 cột (columns) bằng cách dùng order by
http://site.com/products.php?id=1 order by 3-- (không lỗi)
http://site.com/products.php?id=1 order by 4-- (xuất hiện lỗi)
Tiếp theo, tut hướng dẫn tìm cái gọi là cột có lỗi (vunerable column) bằng:
http://site.com/products.php?id=-1 union all select 1,2,3--
Như mình biết, union all select cho phép select dữ liệu từ CSDL 2 lần từ cùng một câu truy vấn.Đến đoạn này thì mình không hiểu, Vậy ý nghĩa câu truy vấn trên là gì. VD, mình đánh vào trình duyệt:
http://site.com/products.php?id=1
Thì câu truy vấn thực chất là:
PHP code:
SELECT*FROM products WHERE id=1
Và máy chủ CSDL sẽ trả về trình duyệt dữ liệu từ bảng products tại dòng có id=1
Tiếp theo, tut hướng dẫn trang web sẽ hiện cột có lỗi, vd "2" , "3". Tại sao lại như vậy? Cũng có tut nói rằng union select trên là truy vấn chọn tất cả các cột, không biết có đúng không. Vậy bạn nào giải thích cho mình với. Mình xin cảm ơn trước.
 
Chỉnh sửa lần cuối bởi người điều hành:
Mời các bạn tham gia Group WhiteHat để thảo luận và cập nhật tin tức an ninh mạng hàng ngày.
Lưu ý từ WhiteHat: Kiến thức an ninh mạng để phòng chống, không làm điều xấu. Luật pháp liên quan
Test abcdefggdsfd
 
Mời các bạn tham gia Group WhiteHat để thảo luận và cập nhật tin tức an ninh mạng hàng ngày.
Lưu ý từ WhiteHat: Kiến thức an ninh mạng để phòng chống, không làm điều xấu. Luật pháp liên quan
Comment
Trước hết, mình khuyên ban nên học kỹ kiến thức về SQL trước nhé! :)
Còn về câu hỏi của bạn:
1. Sử dụng keyword union sẽ cho phép bạn tổng hợp dữ liệu trả về từ cả 2 vế select vào một bảng duy nhất.
2. Về câu truy vấn trong url: "http://site.com/products.php?id=-1 union all select 1,2,3--"
=> Như mình đã nói ở trên kết quả trả về sẽ được tổng hợp từ cả 2 vế nhưng truy vấn ở vế 1 sẽ có dạng "select from where id = -1" nên sẽ không trả về record nào cả bởi không tìm thấy record với id = -1 ( bạn cũng có thể dùng "id=1'" hay "id=1 and 1=0" v.v miễn là điều kiện để không bản ghi nào thỏa mãn).
Lúc này nó sẽ trả về dữ liệu từ vế select thứ 2 " select 1,2,3 "=> query này sẽ giúp trả về một bảng dữ liệu nhưng với giá trị các cột trong bảng sẽ là các hằng số lần lượt là 1, 2, 3.
Nếu website cho phép hiển thị dữ liệu trên browser ở bất kì vị trí nào thì vị trí đó sẽ xuất hiện 1 trong 3 giá trị: 1, 2, 3 => Đó cũng chính là những điểm mình sẽ đánh vào để moi những thông tin cần thiết :)
Done! Hi vọng giúp được bạn!
 
Chỉnh sửa lần cuối bởi người điều hành:
Mời các bạn tham gia Group WhiteHat để thảo luận và cập nhật tin tức an ninh mạng hàng ngày.
Lưu ý từ WhiteHat: Kiến thức an ninh mạng để phòng chống, không làm điều xấu. Luật pháp liên quan
Comment
Bên trên