遭遇数据库分离

软件作者:凋凌玫瑰[N.C.P.H]
信息来源:邪恶八进制信息安全团队(www.eviloctal.com)

此文已发表在<黑客防线>第十二期,另外还有两篇渗透我们学院的就不发了.目前很多朋友在渗透的过程中遇到数据库分离的情况,因此发出来分享一下,写得很基础,高手略过.

前言:在我们入侵的过程中,很多人会遇到这种情况,拿到一个sa权限或是db_owner权限的注入点,但是数据库和web数据是两台分离的服务器,也就是没有在同一台服务器上。有些是sa权限的注入点,我们当然可以直接执行命令,开了3389,但这时候有人直接用网址的ip去连接,怎么连接不上呢?明明用户是建好了的。有的遇到一个db_owner权限的注入点,想通过差异备份得webshell,可找了半天找不到目录,这是为什么呢?
总结:
带着疑问步入今天的话题,我们常常遭遇web和数据库服务器数据分离的情况,这种情况大至有以下以种:
1. Sa权限的注入点,可以执行命令,但连接不上netstat –an列出来的端口。
2. Sa权限的注入点,不能执行命令,但可以列目录。
3. db_owner权限的注入点,可以列目录。
4. db_owner权限的注入点,不能列目录。
针对上面的问题,我们大致说一下应对的方法,然后结合一个实例进行说明具体的拿服务器权限的过程。
像这种数据库与web分离的情况下,首先我们尽可能的拿到数据库服务器的权限,因为我们一般是通过找到网站的注入点着手的。如果是sa权限的注入点,可以执行命令,不能连接所开放的端口,这种情况下就是服务器处于内网之中,通过一个内网ip与web文件相连接,我们需要通过内网转发来登录数据库服务器。这中间涉及到down.vbs下载lcx.exe,上传注册表文件开3389等细节不详说了。
如果是sa权限的注入点,不能执行命令,我们可以试试nbsi中的oacreate来执行,或是能列目录找数据库服务器上是否存在web来首先得到一个webshell再进一步提权。
对于db_owner权限的注入点,这种权限比较低,可以试一下db_owner低权限执行命令,或是列下数据库服务器上是否存在web服务,先得到一个webshell进一步提权,剩下的就只有原始的猜解表段和字段,通过找主站后台来进一步突破了。
实例
下面的例子是帮朋友血印拿一个美国排名比较靠前的一个华人站点总结出来的,有必要写出来与大家分享。我们先看一下大致情况如图:
1

从上图中我们可以看到,这是一个主站的页面,还有很多分站,如“游戏中心”、“交友”、“聊天室”等。主站是整合的dvbbs7.1 sql版的,常规漏洞是没有的,有一个blog是oblog的,血印叫我帮拿这个站的时候就说他在网上搜了一下,oblog存在多个漏洞,如“读本地任意文件漏洞”、“导出日志注入漏洞”,他希望从这里着手。
我便在网上搜了一下这两个漏洞的相关信息,既然已找到入口,先从这里去试试看。先看了一下user_help.asp?file=conn.ASP读网站的conn.asp,这里要注意的是代码里过滤了asp,所以把conn.asp的asp后缀改为大写的,最好用firefox,是读到一些信息,如下图:
2

这里可以获得一些有用信息:'Dim SqlDatabaseName,SqlPassword,SqlUsername,SqlLocalName SqlDatabaseName = "sqlbbs" SqlPassword = "860755" SqlUsername = "sa" SqlLocalName = "192.168.1.1",可以得知mssql的帐号和密码,可是很明显mssql只对内开放的,是一个内网ip。先将这个信息收集起来,找找它的数据库服务器看是否支持外网连接。
分析了一下主站,telnet ip 1433 还有3389等端口,和想像的一样,主站只开了80端口,那么这里我们可以猜测到数据库和服务器应该是分离的,并只在内网支持连接。其实这样的大站不用想也应该是这样设置的。
那么我们怎么找到哪一台是数据库服务器呢?朋友血印也在一起搞,他扫了一下这个网段,没有开1433的服务器,这就增加了难度,难道1433真的不能对外连接,那么这个读出来的mssql帐号和密码对我们没有什么用处了,就算社会工程学一下都很难。
还有一个oblog的注入,但这个注入有点恼火,因为是一个user_logzip_file.asp文件里面的如下语句没有做过滤:
sdate=request("selecty")&"-"&request("selectm")&"-"&request("selectd")
edate=request("selectey")&"-"&request("selectem")&"-"&request("selected")
只得手动提交参数给这个文件,但这个文件里又有一个<!–#include file="user_chkpass.asp"–>头文件作了如下判断:
ComeUrl=lcase(trim(request.ServerVariables("HTTP_REFERER")))
if ComeUrl="" then
response.write "<br><p align=center><font color='red'>对不起,为了系统安全,不允许直接输入地址访问本系统的后台管理页面。</font></p>"
看来ie是没办法的了,只有上firfox,利用插件截取表单和提交表单了。如图:
3

但导出来的txt文本都是一般用户的垃圾信息,管理员的字段改了,还过滤了一些字符。本来想暴管理员的密码出来,可现在字段又被改了,更恼火的是字符被过滤得差不多,搞了半天也没有弄到啥。
可现在一想,就算拿到管理员密码又有什么用?密码虽和dvbbs论坛的密码可能是用的一个库,但应该是md5加密的,如果不是用的一个库,那么进了 oblog拿webshell也不容易,更何况这个注入点还被过滤了字符。这么大的站不能困死在这一个地方,到其它地方看看,还有那么多的分站没有分析。
想完便到分站上去转了转,可一圈下来还是无奈,分站全是生成的静态页面,看样子分站的程序都是自己写的,查看了静态页面的源代码,是用的asp,试了几个链接也没有用。也许是习惯问题吧,试试google来查找注入了,既然是自己写的程序,难免会出一点差错,其实这里还有一个经验问题,在遇到大站都是静态页面的话通过google来查找注入点是很有效的。
根据我的习惯,打开啊d,这时候当然用软件来检测最快了,输入google.com 点高级,先择每页显示100条,再按google语法输入“site:xxxx.us asp”,site:后面不要跟www,因为还要搜索它二级域名的注入点,所以直接跟xxxx.us,运气不错,在第一页中就搜出来一个注入点,仅有的一个注入点,好难得,还是game.xxx.us域名上的。还好,是 db_owner权限,还可以列目录,真幸运,如图:
4

这就是我们常常在入侵过程中要寻找的突破点,这就是一个典型的突破点。
通过差异备份获得一句话马,再上传大马,还好权限不是设得很严,再加上上面装了个serv-u,直接用serv-u加个用户试试,居然提权成功,我在想这个管理员应该是中国的,里面还在卖游戏点卡,郁闷。
3389是开开的,为了安全起见,我从先关掉韩国的vpn,因为我的习惯一般在拿站的时候上vpn的,好处多多,速度也要快不少。然后登上台湾的3389肉机,再在肉机上连接数据库服务器的3389上去看看。如图:
5

上图是在台湾3389上面登到美国服务器上的,有点乱,我们打开mssql企业管理器,清楚的看到sqlbbs这个库,我们想到什么了,dvbbs数据库就在这个服务器上,很幸运,看了一下设置情况果然是内网连接的。对于dvbbs我们国内的朋友搞多了就知道,只要拿到管理员密码就很好搞了。但打开数据库 dv_admin表里面的密码是md5加密的,我索性把这个密码记下来,再改成自己的md5加密的密码,速战速决嘛。
现在我们向主站进攻,直接登录管理员帐号,做个mdb附加的asp马,再改成.jpg的,上传上去,接下来就是备分了,写了一个本地提交备分的。

<form action="http://www.xxxx.us/admin/data.asp?action=RestoreData&act=Restore" method="post">
<p>upload:<input name="Dbpath" type="text" size="80"></p>
<p>copy to:<input name="backpath" type="text" size="80"></p>
<p><input type="submit" value="send"></p>
</form>
在这里还出现了一点小小的插曲,路径我填的upfiles/xxxx.gif可老是出现不是有效的数据库,最后研究了半天,原来管理员把上传的目录改成了upimages,真够郁闷,折腾了一下终于备份成功,如图:
6

接下来当然要做就做完了,同样,里面又是装的个serv-u,做事就做到底吧,上传个2003.reg开个3389,还好2003的服务器不用重启,给一个3389给血印同志就玩工了。
7

尾声:
血印同志看到我给他一个完整的3389服务器感激不尽,一直问我咋个进去的,其实很简单,我们在入侵的过程中寻找突破口很重要,要懂得放弃,在一个有破绽的地方久久没办法突破就想其它的办法。黑客技术是经验和思维的积累,其实很多情况下都没有什么高深复杂的技术,它需要我们的耐心和技巧。欢迎广大黑客爱好者来http://www.ncph.net 交流,我的网名叫玫瑰。

相关日志

发表评论