科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道Lotus Domino 绕过校验机制远程访问修改数据库

Lotus Domino 绕过校验机制远程访问修改数据库

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

以下内容并不是教你怎么攻击服务器,而是教你怎么防范自己的DOMINO系统。所有因为本文而造成的损失与作者无关。

作者:www.chinaitpower.com 来源:www.chinaitpower.com 2007年9月12日

关键字: 数据库 IBM Domino lotus Office

  • 评论
  • 分享微博
  • 分享邮件

以下内容并不是教你怎么攻击服务器,而是教你怎么防范自己的DOMINO系统。所有因为本文而造成的损失与作者无关。

首先,我们知道DOMINO在可以运行在多个平台下,例如LINUX、UNIX、WINDOWS等,很多情况下在服务器的操作系统中存在着多个用户,而恰好如果某个用户可以访问并能修改在操作系统下的数据库的话,那么DOMINO自身的校验机制将没有任何作用,这一点实际上很容易理解,就如同我们在本地修改数据库的ACL。所以首先第一点、确保你的DOMINO所在的目录只有相关人员可以进行访问。DOMINO系统的安全的大前提是服务器的操作系统的安全。

其次,我们在使用DOMINO的时候,经常会修改一些模版,如DOMCFG.NSF,Mail50.NTF等,这些数据库、模版的缺省DEFAULT的权限就是编辑者的,也就是说:我们可以达到修改模版的目的来修改数据库!说到这里,各位应该心里有数了吧?也就是说,DOMINO自己的用户,即使不是管理员,也可以修改数据库的。

第三、我们来看看NAMES.NSF这个系统配置库。只要你有一个用户名,你会发现,你可以看到服务器的配置信息。也就是说,为什么网上的那些提供测试用户的数据库安全性很低的原因了。至于具体方法,我就不在这里多说了。解决办法,所有的关系的配置的视图,用缺省的页面来显示,假设是people这个视图,我们建一个页面 $$ViewTemplate for (people)来显示视图,在这个页面的ONLOAD事件里面用JS直接关闭就可以了,这样用户将不可以通过WEB来访问视图,也不可以从视图上把用户的ID拆离下来了。

第四、文档删除的权限控制,各位可以检查一下自己的系统,用一个没有删除权限的用户点开文档,在地址栏里通过?deletedocument参数来试试看能不能删除文档

作者:WilliamSha

我第一次破掉人家的服务器

……

直接打开domcfg发现,居然得到了视图。找到表单映射文档使用urlcommand编辑、保存。发现居然ok 。

想到这个服务器肯定配置不专业,开一些系统数据库,names要登陆,adm\password,没有通过,再猜没有通过。

再开其它数据库发现domlog不要登陆,很好。看到很多账号的使用情况。得到很多用户名,终于有一个用户名的password被猜到。

登陆成功,东翻翻西翻翻,留一条记录玩玩。

发现有个表单可以修改密码,有趣。发现这个表单不用输入旧密码。又发现用户在names中个人文档的管理员是adm。看来改密码的后台代理不是以当前用户,而是以管理员的。

可以想象程序的过程:在表单(note级别)上设置字段记录用户名和密码,后台代理找到该用户文档,再用@password(新密码)重设,保存。

很好,看来只要能向后台代理发送伪装的请求即可。也就是把用户名伪装,就ok。查找页面(html级别)源文件发现没有用户名的字段。看来用户名的字段是在notes中隐藏或者计算的。

ok,根据webpage前台优先,只要在改密码表单(html级别)用js新建一个field(怎么建?),能让其名字和记录用户名的notes字段相同,就能骗过后台代理,让它认前台的用户名。这个想法被我自己的程序验证。

介绍怎么在用js改密码表单的(html页面级别不是notes设计级别)。

用桢结构集index,一个桢head放自己的页面page1,另个桢main放该表单pagepsw。page1用js访问psw发现没有权限。原因可能是两个页面不在一个站点。

发现该站点有一个数据库可以上载附件,很好。把我的page1上载。再修改index。发现page1可以用js访问pagepsw。

写创建字段的js代码。
var newInputName=document.forms[0].T1.value
var newInput =parent.frames[1].document.createElement("input")newInput.name =newInputName
newInput.type="text"
newInput.value="adm"
parent.frames[1].document.forms[0].appendChild(newElem)

呵呵,用我的T1再慢慢试用户名的字段名,无非是use、name、username、curname、Remote_User……什么的。反正试成了会有确认信息

哈哈,终于猜到。于是adm密码就由我设了。至此,破解过程结束。总结下来主要是服务器配置不太专业,才有所得逞。

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章