mysql_real_escape_string[] có cung cấp đủ khả năng bảo vệ để ghi dữ liệu do người dùng gửi vào cơ sở dữ liệu một cách an toàn mà không cần xác thực thêm không?
Tôi biết điều này có thể gây ra sự cố nếu/khi dữ liệu được truy xuất và hiển thị cho người dùng, nhưng hiện tại tôi chủ yếu lo ngại liệu mã này có an toàn theo quan điểm của các cuộc tấn công tiêm chích MySQL hoặc PHP hay không
Ví dụ tôi muốn nhập cổ điển. 1' hoặc '1'='1 trong một biến được đóng gói bởi hàm mysql_real_escape_string
Có thể không?
CHỈNH SỬA. ngay cả SQLMAP cũng không làm được
root@osboxes. /var/www/html# sqlmap -u "http. //192. 168. 1. 1/DVWA/vulnerabilities/sqli/#" --cookie="security=medium;
[. ]
[11. 06. 43] [CRITICAL] tất cả các thông số được thử nghiệm dường như không thể tiêm được. Cố gắng tăng các giá trị '--level'/'--risk' để thực hiện nhiều thử nghiệm hơn. Ngoài ra, bạn có thể thử chạy lại bằng cách cung cấp một giá trị hợp lệ cho tùy chọn '--string' [hoặc '--regexp'] Nếu bạn nghi ngờ rằng có một số loại cơ chế bảo vệ liên quan [e. g. WAF] có thể bạn có thể thử lại với tùy chọn '--tamper' [e. g. '--tamper=space2comment']
[11. 06. 43] [CẢNH BÁO] Mã lỗi HTTP được phát hiện trong quá trình chạy.
404 [Không tìm thấy] - 222 lần
[*] đóng cửa lúc 11 giờ. 06. 43
Đã chỉnh sửa 17 Tháng Sáu, 2016 bởi tot94
Liên kết để bình luậnChia sẻ trên các trang web khác
digininja
Đăng ngày 17 tháng 6 năm 2016
digininja
- Người điều hành toàn cầu
- 3. 9k
- Giới tính. Nam
- Vị trí. Sheffield, Vương quốc Anh
- Sở thích. Xâm nhập, mã hóa, leo núi
- Chia sẻ
Đăng ngày 17 tháng 6 năm 2016
Không. Toàn bộ điểm của chức năng là để ngăn chặn tiêm. Nếu ai đó tìm thấy một đường vòng thì nó sẽ mở ra nhiều lỗ hổng trong rất nhiều ứng dụng và nó sẽ được vá trong vòng vài giờ nếu không muốn nói là nhanh hơn
Liên kết để bình luậnChia sẻ trên các trang web khác
Broti
Đăng ngày 17 tháng 6 năm 2016
Broti
- thành viên tích cực
- 233
- Giới tính. Nam
- Vị trí. Đức
- Sở thích. 8 Bit, Bảo mật CNTT, Âm nhạc, Mã hóa, Kỹ thuật đảo ngược, Mật mã
- Chia sẻ
Đăng ngày 17 tháng 6 năm 2016
53 phút trước, digininja said
Nếu ai đó tìm thấy một đường vòng thì nó sẽ mở ra nhiều lỗ hổng trong rất nhiều ứng dụng và nó sẽ được vá trong vòng vài giờ nếu không muốn nói là nhanh hơn
Đó sẽ giống như địa ngục trần gian đối với webhoster/webmins
Liên kết để bình luậnChia sẻ trên các trang web khác
đá
Đăng ngày 20 tháng 6 năm 2016
đá
- thành viên tích cực
- 106
- Tác giả
- Chia sẻ
Đăng ngày 20 tháng 6 năm 2016 [đã chỉnh sửa]
Ngày 17/6/2016 lúc 5. 31 giờ chiều, digininja said
Không. Toàn bộ điểm của chức năng là để ngăn chặn tiêm. Nếu ai đó tìm thấy một đường vòng thì nó sẽ mở ra nhiều lỗ hổng trong rất nhiều ứng dụng và nó sẽ được vá trong vòng vài giờ nếu không muốn nói là nhanh hơn
Có nhưng nếu nó ở mức "Trung bình" trên DVWA, điều đó có nghĩa là nó có thể bị bỏ qua?
CHỈNH SỬA. Tôi đã bỏ qua chức năng trốn tránh này thành công nhưng tôi không biết tại sao
Đây là SQLi gốc tôi muốn vượt qua
1' HOẶC '1'='1
Tôi mã hóa khoảng trắng và bằng ở dạng thập lục phân nhưng không phải dấu nháy đơn và nó hoạt động [http. //www. bảng ascii. com/]
SQLi được mã hóa. 1%20OR%201%3D1
Câu hỏi của tôi là như sau. tại sao SQLi hoạt động ngay cả khi tôi không có dấu nháy đơn?
Có phải vì bình đẳng và không gian không bị ảnh hưởng bởi my_real_escape_string[] ?
Cf. http. //php. net/thủ công/vi/chức năng. mysql-real-escape-chuỗi. php
mysql_real_escape_string[] gọi hàm thư viện của MySQL mysql_real_escape_string, hàm này thêm dấu gạch chéo ngược vào các ký tự sau. \x00, \n, \r, \, ', " và \x1a.
Được chỉnh sửa 20 Tháng Sáu, 2016 bởi tot94Liên kết để bình luậnChia sẻ trên các trang web khác
digininja
Đăng ngày 20 tháng 6 năm 2016
digininja
- Người điều hành toàn cầu
- 3. 9k
- Giới tính. Nam
- Vị trí. Sheffield, Vương quốc Anh
- Sở thích. Xâm nhập, mã hóa, leo núi
- Chia sẻ
Đăng ngày 20 tháng 6 năm 2016
Đây là hai dòng mã quan trọng
$id = mysql_real_escape_string[ $id ]; $query = "SELECT first_name, last_name FROM users WHERE user_id = $id;";
Vì vậy, nếu bạn tiêm
1 or 1=1
thì câu lệnh được tạo thành là.
SELECT first_name, last_name FROM users WHERE user_id = 1 or 1=1;
đó là một câu lệnh hợp lệ và trả về tất cả các hàng vì boolean true ở cuối [1=1]
Lý do điều này có thể vượt qua chức năng thoát là vì không có gì trong đó cần thoát
Nếu truy vấn giống như
$query = "SELECT first_name, last_name FROM users WHERE user_id = '$id';";
Sau đó, bạn sẽ cần thoát ra khỏi các trích dẫn đơn và khi bạn chuyển chúng vào id của mình, chúng sẽ bị thoát và bạn sẽ không thể thực hiện được
Liên kết để bình luậnChia sẻ trên các trang web khác
đá
Đăng ngày 21 tháng 6 năm 2016
đá
- thành viên tích cực
- 106
- Tác giả
- Chia sẻ
Đăng ngày 21 tháng 6 năm 2016
vâng chính xác. Tôi cố gắng thoát khỏi thứ mà tôi không cần phải làm, hơn nữa tôi không phải mã hóa mySQL
Cấp thấp
$query = "SELECT first_name, last_name FROM users WHERE user_id = '$id';";
Mức trung bình.
$query = "SELECT first_name, last_name FROM users WHERE user_id = $id;";
Vì vậy, ở cấp độ trung bình, giá trị của chúng tôi không được bao quanh bởi dấu ngoặc kép, vì vậy chúng tôi không đặt dấu ngoặc kép. ]
Nhưng nếu mức độ trung bình là
$id = mysql_real_escape_string[ $id ]; $query = "SELECT first_name, last_name FROM users WHERE user_id = '$id';";
Không thể tạo SQLi?
Liên kết để bình luậnChia sẻ trên các trang web khác
digininja
Đăng ngày 21 tháng 6 năm 2016
digininja
- Người điều hành toàn cầu
- 3. 9k
- Giới tính. Nam
- Vị trí. Sheffield, Vương quốc Anh
- Sở thích. Xâm nhập, mã hóa, leo núi
- Chia sẻ
Đăng ngày 21 tháng 6 năm 2016
Tôi sẽ không bao giờ nói là không thể nhưng trong những trường hợp bình thường sẽ không thể thoát ra khỏi các trích dẫn đơn mà bạn cần trích dẫn đơn của riêng mình trong id nhưng nếu bạn làm điều đó thì chuỗi thoát sẽ có dấu gạch chéo phía trước
________số 8sẽ trở thành
id = " \' or 1=1"
cái sẽ giữ bạn bên trong biến
Liên kết để bình luậnChia sẻ trên các trang web khác
đá
Đăng ngày 22 tháng 6 năm 2016
đá
- thành viên tích cực
- 106
- Tác giả
- Chia sẻ
Đăng ngày 22 tháng 6 năm 2016
Có nên gần như không thể;]
Cảm ơn một lần nữa cho lời giải thích rõ ràng của bạn digininja. ]
Liên kết để bình luậnChia sẻ trên các trang web khác
digininja
Đăng ngày 22 tháng 6 năm 2016
digininja
- Người điều hành toàn cầu
- 3. 9k
- Giới tính. Nam
- Vị trí. Sheffield, Vương quốc Anh
- Sở thích. Xâm nhập, mã hóa, leo núi
- Chia sẻ
Đăng ngày 22 tháng 6 năm 2016
Đây là nơi nhận xét của tôi về việc nếu chuỗi thoát không thành công thì đó là một ngày tồi tệ. Trong ví dụ này, về cơ bản, nó đang dừng việc tiêm nhưng nếu có thể bỏ qua thì mọi thứ dựa vào nó [nếu không dựa vào nó thì có lẽ nó đã được tiêm rồi] sẽ trở thành có thể tiêm được
Liên kết để bình luậnChia sẻ trên các trang web khác
đá
Đăng ngày 24 tháng 6 năm 2016
đá
- thành viên tích cực
- 106
- Tác giả
- Chia sẻ
Đăng ngày 24 tháng 6 năm 2016
Hmm tôi không hiểu bạn giải thích
Liên kết để bình luậnChia sẻ trên các trang web khác
digininja
Đăng ngày 24 tháng 6 năm 2016
digininja
- Người điều hành toàn cầu
- 3. 9k
- Giới tính. Nam
- Vị trí. Sheffield, Vương quốc Anh
- Sở thích. Xâm nhập, mã hóa, leo núi
- Chia sẻ
Đăng ngày 24 tháng 6 năm 2016
Chức năng chuỗi thoát đang bảo vệ câu lệnh khỏi bị khai thác, nếu nó không thành công thì câu lệnh sẽ không còn được bảo vệ. Hãy tưởng tượng điều này trên toàn bộ internet
Liên kết để bình luậnChia sẻ trên các trang web khác
đá
Đăng ngày 27 tháng 6 năm 2016
đá
- thành viên tích cực
- 106
- Tác giả
- Chia sẻ
Đăng ngày 27 tháng 6 năm 2016
Có nhưng "nếu thất bại" không nên được xem xét với chức năng như vậy phải không?
Tuy nhiên, tôi biết rằng có một bước củng cố khác có thể được thực hiện
Liên kết để bình luậnChia sẻ trên các trang web khác
digininja
Đăng ngày 27 tháng 6 năm 2016
digininja
- Người điều hành toàn cầu
- 3. 9k
- Giới tính. Nam
- Vị trí. Sheffield, Vương quốc Anh
- Sở thích. Xâm nhập, mã hóa, leo núi
- Chia sẻ
Đăng ngày 27 tháng 6 năm 2016
Trích dẫn
Có nhưng "nếu thất bại" không nên được xem xét với chức năng như vậy phải không?
Không chắc chắn những gì bạn có ý nghĩa
Liên kết để bình luậnChia sẻ trên các trang web khác
đá
Đăng ngày 28 tháng 6 năm 2016
đá
- thành viên tích cực
- 106
- Tác giả
- Chia sẻ
Đăng ngày 28 tháng 6 năm 2016
Ngày 24/6/2016 lúc 3. 01 giờ chiều, digininja said
Chức năng chuỗi thoát đang bảo vệ câu lệnh khỏi bị khai thác, nếu nó không thành công thì câu lệnh sẽ không còn được bảo vệ. Hãy tưởng tượng điều này trên toàn bộ internet
ý bạn là
Hàm chuỗi thoát đang bảo vệ câu lệnh khỏi bị khai thác, "hàm chuỗi thoát" không thành công thì câu lệnh sẽ không còn được bảo vệ. Hãy tưởng tượng điều này trên toàn bộ internet
Mà tôi trả lời
Có nhưng "nếu câu lệnh chuỗi thoát không thành công" không nên được xem xét với chức năng như vậy phải không?
Liên kết để bình luậnChia sẻ trên các trang web khác
digininja
Đăng ngày 28 tháng 6 năm 2016
digininja
- Người điều hành toàn cầu
- 3. 9k
- Giới tính. Nam
- Vị trí. Sheffield, Vương quốc Anh
- Sở thích. Xâm nhập, mã hóa, leo núi
- Chia sẻ
Đăng ngày 28 tháng 6 năm 2016
Tôi vẫn không hiểu điều này có nghĩa là gì, tôi nghĩ rằng bạn đang mất một cái gì đó trong bản dịch
Trích dẫn
Có nhưng "nếu câu lệnh chuỗi thoát không thành công" không nên được xem xét với chức năng như vậy phải không?
Liên kết để bình luậnChia sẻ trên các trang web khác
Jason Cooper
Đăng ngày 28 tháng 6 năm 2016
Jason Cooper
- thành viên chuyên dụng
- 520
- Giới tính. Nam
- Vị trí. Vương quốc Anh
- Sở thích. Thẻ, Máy tính, Mật mã, Hacking, Chọn khóa, Lập trình, v.v.
- Chia sẻ
Đăng ngày 28 tháng 6 năm 2016
2 giờ trước tot94 said
Có nhưng "nếu câu lệnh chuỗi thoát không thành công" không nên được xem xét với chức năng như vậy phải không?
Bạn phải luôn xem xét điều gì sẽ xảy ra nếu một chức năng/câu lệnh không thành công, cả từ quan điểm bảo mật và quan điểm độ tin cậy. Sau đó, bạn cần xem xét khả năng hàm/câu lệnh sẽ thất bại là bao nhiêu. Đối với những thứ như mysql_real_escape_string, tác động của việc nó bị lỗi là rất cao và khả năng nó bị lỗi có thể là trung bình. Sau khi đưa ra phán quyết này, bạn hãy xem liệu có cách nào tốt hơn không [gợi ý, hãy đọc các truy vấn tham số hóa]