SQL Injection: The Danger it Poses for Joomla
The danger posed by SQL Injection is profound. Among the arsenal of hacking techniques, SQL Injection stands as one of the most perilous. Through this malicious tactic, an attacker can swiftly obliterate not just a table but an entire database using a straightforward command executed via your website. In the contemporary landscape, it is absolutely unacceptable for any website to exhibit a vulnerability to SQL Injection, given that security professionals have been sounding the alarm about this threat for at least a decade. Addressing SQL Injection is a recognized and extensively documented procedure.
Utilize Secure FTP Connections
Ensure that the connections used for accessing your Joomla website files are secure. If your hosting service supports it, opt for SFTP encryption or SSH. In case you use an FTP client, note that the default port for SFTP is typically 22.Some of the FTP clients store passwords in plain text or encode them on your computer, with some encoded passwords being reversible. We strongly recommend against saving FTP passwords within the client to mitigate the risk of hacking.
How to Protect Joomla Websites Against SQL Injection Attacks
Modifying the default database prefix offers an effective countermeasure against SQL injections, a favored tactic employed by malicious actors to acquire super administrator privileges. While Joomla's latest versions implement this during the initial setup, the steps below elucidate the process of changing the default database prefix for pre-existing installations and provide insight into accessing the Joomla! database directly.
Related Vulnerabilities
Post by skyideas15 » Sat Aug 16, 2014 4:22 am
Vì diễn đàn mình thấy chưa có nhiều nội dung với lại bài viết này cũng tương đối bổ ích mà mọi người nên biết khi sử dụng joomla,nên mình xin được copy and paste bài viết này từ joomla.edu.vn [IMG]Hiện Joomla! ngày càng phát triển mạnh mẽ và ngày càng được ứng dụng rộng rãi ở Việt Nam với số lượng các thành phần mở rộng (extensions) từ các hãng thứ ba cũng tăng không ngừng cả về số lượng và chất lượng. Rất nhiều thành phần mở rộng (gồm component, module, plugin, template...) thực sự tuyệt vời và đáng được cài đặt trên mọi Website. Tuy nhiên, có một thực tế song hành với mặt ưu điểm trên là số lượng các Website bị tấn công thông qua các lỗi lập trình bất cẩn trong các thành phần mở rộng được cài đặt thêm cũng ngày càng tăng cao. Thậm chí số lượng lỗi bị khai thác còn cao hơn cả Microsoft (theo báo cáo 6 tháng đầu năm 2008 của IBM). Do vậy, ngay từ lúc này, bạn hãy kiểm tra lại toàn bộ hệ thống của mình để đảm bảo: Chỉ cài đặt các thành phần mở rộng thực sự cần thiết, thực sự uy tín và hãy nhờ một người có kinh nghiệm để kiểm tra các đoạn mã, mà một trong số chúng thường bị hacker khai thác - các lỗi phổ biến về truy vấn SQL (thường gọi là SQL Injection). Đối với người sử dụng cuối (end-user): Không dùng tiền tố mặc định 'jos_' Khi cài đặt website, Joomla sử dụng tiền tố mặc định cho các bảng của cơ sở dữ liệu: 'jos_'. Tuy nhiên để tránh sự nhòm ngó của các haker bạn nên đổi tiền tố này. [IMG] Không dùng tài khoản mặc định 'admin' Tạo một tài khoản quản trị (Super Administrator) mới thay vì dùng tài khoản mặc định có tên 'admin' Đổi tên và vô hiệu hóa tài khoản mặc định 'admin' mà Joomla đã tạo ra khi cài đặt bằng cách: Mở bảng _users, tìm bản ghi có id=62, đổi username khác 'admin' và thay block bằng '1') [IMG] Không dùng mã bí mật mặc định '$secret' Joomla cung cấp một mã bí mật '$secret' đặt trong file "configuration.php". Mã này được kết hợp với mật khẩu và hàm MD5 để tạo ra một mật khẩu được mã hóa rất mạnh (không thể dò ngược) - tất nhiên với điều kiện mã $secret là ngẫu nhiên và chỉ mình bạn biết. Mở file "configuration.php" tìm biến '$secret' và thay bằng một chuỗi ký tự ngẫu nhiên (không dùng chuỗi mặc định của Joomla). VD: Đối với những người lập trình (developer) thì chú ý những vấn đề sau: Ép kiểu dữ liệu Luôn ép kiểu dữ liệu cho các chuỗi đưa vào câu lệnh truy vấn SQL. Thí dụ: Nếu muốn kiểu dữ liệu là kiểu nguyên (integer) thì sử dụng câu lệnh SQL: $sql = 'UPDATE #__mytable SET `id` = ' . (int) $int; Nếu muốn kiểu dữ liệu là kiểu ngày/tháng (date) thì sử dụng câu lệnh SQL: $date = & JFactory::getDate($mydate); $sql = 'UPDATE #__mytable SET `date` = ' . $db->quote( $date->toMySQL(), false); Luôn gỡ bỏ ý nghĩa của những ký tự đặc biệt Bạn cần gỡ bỏ ý nghĩa của những ký tự đặc biệt (những ký tự có khả năng gây nguy hiểm cho câu lệnh SQL) nằm trong các chuỗi dữ liệu được đưa vào câu lệnh SQL bằng câu lệnh: $sql = 'UPDATE #__mytable SET `string` = ' . $db->quote( $db->getEscaped( $string ), false ); Chống tấn công DOS Trong các mệnh đề WHERE, nếu bạn có sử dụng lệnh LIKE, hãy đảm bảo rằng bạn đã lọc các ký tự đặc biệt như "%" và "_" thì sử dụng câu lệnh SQL: $sql = 'UPDATE #__mytable SET .... WHERE `string` LIKE '. $db->quote( $db->getEscaped( $string, true ), false ) Chống tấn công XSS Rất nhiều người có thói quen lấy dữ liệu nhập vào từ người dùng bằng câu lệnh JRequest::getVar(). Tuy nhiên đây là một thói quen không tốt. Thay vào đó bạn nên sử dụng các phương thức ép kiểu. Thí dụ: Nếu muốn kiểu số nguyên, dùng câu lệnh: $int = JRequest::getInt( $name, $default ); Nếu muốn kiểu số thực, dùng câu lệnh: $float = JRequest::getFloat( $name, $default ); Nếu muốn kiểu logic (đúng/sai), dùng câu lệnh: $bool = JRequest::getBool( $name, $default ); Nếu muốn kiểu từ (word): chỉ có các ký tự chữ cái và ký tự gạch dưới "_", dùng câu lệnh: $word = JRequest::getWord( $name, $default ); Nếu muốn kiểu câu lệnh (command): chỉ có các ký tự chữ cái, ký tự số, ký tự "." và "_", dùng câu lệnh: $cmd = JRequest::getCMD( $name, $default ); Nếu muốn kiểu văn bản không phải HTML (văn bản đã được lọc bỏ các thẻ HTML), dùng câu lệnh: $string = JRequest::getString( $name, $default );
Pentest-Tools.com recognized as a Leader in G2’s Spring 2023 Grid® Report for Penetration Testing Software.
Discover why security and IT pros worldwide use the platform to streamline their penetration and security testing workflow.
Lỗ hổng CVE-2017-8917, được phát hiện bởi chuyên gia Marc Alexandre Montpas của công ty bảo mật Sucuri (Hoa Kỳ), ảnh hưởng đến Joomla 3.7.0. Bản cập nhật 3.7.1 đã khắc phục vấn đề này.
Theo Montpas, lỗ hổng chỉ ảnh hưởng đến Joomla 3.7 do liên quan đến com_fields - một thành phần mới có trong phiên bản này. Bởi com_fields là thành phần công khai nên bất kỳ ai cũng có thể khai thác lỗ hổng mà không cần tài khoản được phân quyền trên trang web. Kẻ tấn công có thể khai thác lỗ hổng để chèn các truy vấn SQL qua một URL giả mạo.
Tin tặccó nhiều cách để lợi dụng lỗ hổng như: lấy cắp mật khẩu hàm băm, chiếm quyền điều khiển một phiên đăng nhập của người dùng. Nếu đó là phiên đăng nhập quản trị, tin tặc có thể xâm nhập toàn bộ trang web.
Người dùng Joomla được khuyến cáo cập nhật bản vá trong thời gian sớm nhất có thể. Công ty Joomla đã đưa ra thông báo an ninh tới người dùng trước khi phát hành bản cập nhật.
Mặc dù không đưa ra mã khai thác (PoC), nhưng Sucuri đã công bố chi tiết kỹ thuật về lỗ hổng.
Trước đó, vào tháng 10/2016, tin tặc đã khai thác một số lỗ hổng của Joomla trong vòng vài giờ sau khi các lỗ hổng này bị tiết lộ. Mặc dù khi đó chỉ có một số thông tin về lỗ hổng được công khai, tin tặc đã leo thang đặc quyền để tạo ra tài khoản người dùng giả mạo trên các trang web phổ biến.
Inadequate escaping leads to SQL injection vulnerability.
Joomla! version 2.5.1, 2.5.0, 1.7.4, and all earlier 1.7.x versions
Upgrade to version 2.5.2
The JSST at the Joomla! Security Centre.
Reported By: Ching Shiong Sow, Stratsec
Inadequate filtering of request data leads to a SQL Injection vulnerability.
Joomla! CMS versions 3.7.0
Upgrade to version 3.7.1
The JSST at the Joomla! Security Centre.
Reported By: Marc-Alexandre Montpas / sucuri.net
Selecting Wise Usernames and Passwords
When it comes to choosing your Joomla admin usernames and passwords, exercise prudence. Avoid utilizing "admin" as your username and opt for a complex password. Interestingly, this is among the most effective methods to bolster your Joomla security, and paradoxically, it's one of the simplest.Employing a strong password is imperative for robust Joomla security. Ensure that your login password possesses sufficient length (between 8 to 14 characters) and includes a combination of letters, numbers, and symbols. Remember that passwords are case-sensitive, so incorporating both uppercase and lowercase letters adds an extra layer of strength. Additionally, it's advisable to establish a routine of changing admin passwords at least once a month.
What is SQL injection?
SQL injection involves the insertion of harmful SQL code by a malicious actor into the input fields of your web application, including forms, URLs, or cookies. They aim to execute this code on your database server, potentially leading to data theft, corruption, or deletion, along with unauthorized access, privilege escalation, or code execution. Any web application utilizing a relational database, such as Joomla, can be susceptible to SQL injection.
Other Security Measures to Consider Against Joomla Vulnerabilities
Keeping your Joomla website up-to-date is crucial for both security and stability. Not all updates involve full site version upgrades; some are minor, consisting of bug fixes, while others are version updates.
Joomla boasts a dedicated security team renowned for promptly releasing patches. Neglecting to apply these patches to your Joomla website can leave it vulnerable to potential security breaches.To check for updates, follow these steps:1: Log-in to your Joomla site as an administrator.2: Navigate to Components > Joomla Update.Step 3: Joomla will then check for available updates. If a new update is detected, simply click on the "Install the Update" option.Before updating to a newer Joomla version, consider the following:Template Updates: Verify if your Joomla templates are compatible with the latest Joomla version. If not, either request the template author to update it or consider an alternative template.Extension Updates: Review and confirm that all your Joomla extensions are compatible with the updated Joomla version. Remove any extensions that aren't compatible. To update extensions, navigate to Extensions > Manage and click on the update option.Cache Clearance: After updating to a newer Joomla version, clear the cache on your Joomla site. You can accomplish this using Joomla's built-in cache clearing functionality.
Recently, details about three serious CVE vulnerabilities in the Joomla CMS platform were released to the public (CVE-2015-7297, CVE-2015-7857, CVE-2015-7858).These CVE’s were discovered by Trustwave SpiderLabs researchers, and full details of the vulnerability can be found in the article that was published: https://www.trustwave.com/Resources/SpiderLabs-Blog/Joomla-SQL-Injection-Vulnerability-Exploit-Results-in-Full-Administrative-Access/
The truth about these vulnerabilities is that they don’t present anything new regarding SQL Injections. This article shows how F5 ASM deals with this kind of zero day attacks.
Joomla is a free and open-source content management system (CMS) for publishing web content. It has been downloaded over 50 million times, and there are over 7,700 free and commercial extensions for it.
According to Wappalyzer, there are over 500,000 different websites using the Joomla Platform.According to Alexa, 25,000 out of the top 1 Million websites use Joomla.
This makes Joomla one of the most popular CMS platforms today, second only to WordPress.
As mentioned previously, there are thousands of community maintained plugins and extensions for Joomla. It’s not uncommon for vulnerabilities to be discovered in those plugins, even on a weekly basis.However, the vulnerabilities mentioned in this article were found in Joomla core platform – this makes the severity of this vulnerability very high since it affects 100% of Joomla installations (only vulnerable versions of course).
The vulnerabilities allows a remote unauthenticated attacker to retrieve sensitive data from within the Joomla database, including active administrator session tokens. This basically allows complete site takeover with very little effort.
Most of the attack attempts that have been seen in the wild (Source: https://blog.sucuri.net/2015/10/joomla-sql-injection-attacks-in-the-wild.html) follow a similar pattern.
This pattern includes sending innocent probe requests prior to sending the actual exploit.
Some examples for these probe requests:
As we can see, the probe requests are varied, but they all have a common goal of discovering whether or not the target website is vulnerable to this attack.The first request is providing the website with an erroneous SQL query, expecting the site to return an SQL error.The second request is similar to the first one, but tries to masquerade itself as a “Googlebot” request.The third request attempts to uncover the actual Joomla version installed on the website.
Note: In the latest ASM version, fake Googlebot requests are blocked using the Bot Detection feature.Those requests are being validated by checking the source IP of the request.
The actual exploitation attack vectors used in this vulnerability were found to be blocked by ASM SQL-Injection attack signatures:
As we can see, the attack vectors use various SQL keywords and an SQL query format, which ASM detects and is able to block.
We recommend installing the latest ASM signature update file, and making sure your policy is protected with the “SQL Injection Signatures” set.
Mark Twain once stated, "In life, we can only be sure of two things: death and taxes." Similarly, in the realm of web security, two undeniable truths emerge: It's not a matter of "if you'll face an attack," but rather "when and how" your website will be exploited.
Various forms of attacks pose potential threats to your Joomla! site, including CSRF, Buffer Overflows, Blind SQL Injection, Denial of Service, and yet-to-be-discovered vulnerabilities. All of these can jeopardize your site's security. When it comes to safeguarding your Joomla! site, it's essential to stay vigilant and consider enlisting the help of managed IT services Chicago for added protection and peace of mind.
Limit Access to the Joomla Admin Backend
Prudent restriction of access to the Joomla admin backend is essential, given its sensitive nature. You can achieve this by implementing IP filtering, and the same can be applied to other critical Joomla directories following these steps:1: Begin by creating a .htaccess file if it's not already present in the directory you intend to safeguard.2: Insert the following code into the .htaccess file:Order Deny, AllowDeny from allAllow from xx.xx.xx.xx3: Replace "xx.xx.xx.xx" with the specific IP address from which you wish to permit access.Consider employing security extensions that offer IP filtering capabilities to restrict access to the Joomla admin backend, along with other features that enhance your Joomla website's security.
As there will forever be a level of risk, the ongoing nature of Joomla security necessitates regular evaluation of potential attack vectors. Website proprietors and administrators must consistently enhance their website security to minimize the likelihood of a breach.Ultimately, we trust that you discover this article pragmatic and beneficial. If you require assistance in fortifying your Joomla website, please feel free to share your inquiries in contact form, and we will gladly provide our assistance.
Joomla! Core is prone to an SQL injection vulnerability because it fails to sufficiently sanitize user-supplied data before using it in an SQL query. Exploiting this issue could allow an attacker to compromise the application, access or modify data, or exploit latent vulnerabilities in the underlying database. Joomla! Core versions ranging from 1.7.0 and up to and including 3.9.15 are vulnerable.
Update to Joomla! Core version 3.9.16 or latest