危险漫步博客
新鲜的“黑客思维”就是从全新的角度看待黑客技术,从更高的层面去思考;专注于黑客精神及技术交流分享的独立博客。
文章2306 浏览20581541

记一次“另类”的入侵检测

某日在家闲着无事正好一个朋友给我了一个企业站点,说想拿下这个站,但是没有思路,让我帮忙看一下能不能拿下。反正没事做,于是我就帮忙看了看。

打开网站,先看一下大致情况。

是一个小型企业站点,一般情况下这样的站点都是用asp语言编写的。闲话不说,下面开始我们的检测,首先先找注入点,把网址复制到啊D中,看看能不能找到注入点出来,稍等一会,啊D检测完成,没有找到任何的注入点。

其他工具也就不测试了,要是那么轻松可以注入,朋友也不会找到我,呵呵。接下来,我在在IE中随便打开一个带参数的链接,习惯性的在参数后面随便加了几个字母,回车,返回的结果提示”错误操作”,看来这个链接的参数只允许是数字,那么注入可能就不存在了。继续在网站上面溜达,突然在首页发现一处搜索框。

在搜索框中输入“1”,点击搜索,返回结果,是有正常的搜索结果的,继续输入“1”,返回以下结果,程序提示:


嘿嘿,不光报错了,而且把语句也给爆出来了。

根据代码可以判断出该网站通过Jet连接引擎,用的是Access数据库。各位看官到这里,应该可以猜到我是用搜索型注入来拿下这个站的,但是其实没有那么简单。为了注入起来方便,这时我们可以尝试抓包来构造Url,这里我喜欢在页面搜索的地方来单击鼠标右键,查看源文件,在源文件中搜索“action”来到表单的位置。

这就是我们提交搜索参数的表单了,我们根据它来构造Url,接在把地址复制到浏览器中回车访问,返回的结果和我们通过搜索框提交参数“1”得到的结果是一样的,OK,Url构造成功,下面正式开始我们的注入。大家知道,搜索型注入可以说是字符型注入的一种特殊形式,由于要考虑到符号闭合的问题,我们可以通过语句1%'and 1=1 and %'='和1%'and 1=2 and'%'='(注意:这里的开头的数字1不是固定的,是你自己搜索的参数)来判断存不存在注入点,我们在构造的url后面输入第一句测试语句。

提示的是”没有产品”,不对啊,应该是返回正常才对啊,继续提交第二句测试语句,还是返回”没有产品”,很奇怪。为了找到原因,我们直接提交,让他报错,这里可以把语句看的很清楚了:


我们提交的%'并没有和SQL字符串语句中的'%闭合,而是被过滤了,关键查询语句变成了'%1'%',当然就不能返回正常的查询结果了。到这里我突然想到了一个方法:把%用url编码处理下,好,打开小葵字符转换器,在”要转的”框里输入%,点击”给我转”,得到%的url编码是%25,接着把测试语句中的%用%25来替换掉,继续提交语句,结果返回正常。

接着我们再提交,返回”没有产品”,第一次和第二次返回结果不同,证明网站存在注入点。接下来就是猜账号和密码了,由于测试不能Union联合查询,那么我们只能用ASCII逐字解码法了。

接下来就是猜账号和密码了,由于测试不能Union联合查询,那么我们只能用ASCII逐字解码法了。

首先,我们猜测下管理员表段,提交语句,返回结果为。

继续提交常用的几个表名如:adnin、manage等来进行测试,发现都是不存在的,入侵再次碰壁,Access的数据库,不像SQLserver的注入手段那么灵活,如果猜不出密码,这个注入点就没有什么价值了,难道就这样放弃?不,我们继续看,测试了一些常见目录,我们来到管理后台,用万能密码和常见的弱口令测试下,均不能正常登陆,习惯性的,右键查看下源文件,搜索”admin",来到一处代码。

大家发现了什么?呵呵,没错,是“venshop_adminname”和“venshop_admi_npass”,如果没错的话,这应该就是管理员表段中的记录管理员账号和密码的字段了,可以看出他是自定义了表名前缀,那么我们就可以大胆的猜测管理员表段应该也有“venshop_”这样的表名前缀了!OK,接着提交语句,根据回执判断得到管理员的表名就是venshop_admin,接下来,用语句and exists(select venshop_adminname from venshop_admin)来判断出venshop_admin表下是存在venshop_adminname和venshop_adnunpass这两个字段的!继续提交and (select top 1 len(列名)from表名)>N这样的语句,来判断字段的长度。

如果返回正常,就说明管理员表段中第一行管理员账号字段长度是大于4的,我们再通过提交来判断该字段长度是不是小于7。使用上述语句来判断字段的范围,从而不断缩小字段的长度最终确定具体长度,当我们得到字段长度以后,我们就要猜字段中每一位具体的数值了! 

这时要用到语句and (select top 1 asc(mid(venshop_adminname,1,1))from venshop_admin)>n,这条语句就是判断第一列venshop_adminname字段中第一个数值是不是大于N(n是N的ASCII码,N可以通过n用小葵字符转换出来),同理,我们要判断第二个数值就可以通过语句and (select top 1 asc(mid(venshop_adminname,2,1)from venshop_admin)>n,依次类推,我们可以一个一个的猜出具体的管理账号和密码。经过和朋友一起分工合作,半个小时候终于成功得到管理员的账号:zxdz,密码是MD5加密后的密文:50E5F6C7110420E9249E6BB68DA020AD在cmd5在线解密上面反查,是一条收费记录,最后查询结果为12zxdz12。

成功得到账号密码后直奔后台,一眼看到了上传,选择了一个Asp小马,点击上传,立刻弹出框框提示。

这里直接就弹出提示,说明很有可能是本地验证上传的,这里为了查看的方便,我用opera浏览器来登录后台,在上传处查看源文件,发现这里的上传页面是用一个框架来显示的,用opera浏览器,我们可以在新标签中打开这个框架。

细心的朋友们,可以发现这里的地址栏url中有这样的一串:uploadfile.asp?exts=jpg|jpeg|png|gif|bmp|swf&path=pic,这里难道可以通过直接修改参数来达到上传asp文件的目的?我们试试看修改参数,把jpg改成asp,回车访问,然后选择一个asp文件,点击上传,结果不出所料成功的绕过了弹框限制!

难道就这样上传成功了?非也,前面测试时正常上传jpg文件会返回上传后文件的文件名,但这里却没有返回,说明很有可能没有上传成功,即使成功了,没有文件名我们也是找不到Webshell的。看来这个上传在服务器端应该也是有验证的。那换种思路,正常上传的时候jpg文件会保存在根目录的pic文件夹下(上传成功后查看源文件就可以知道),正好那串url中有这样一个参数:&path=pic,那我们把它更改它为:&path=pic.asp,那么文件会不会就被上传到pic.asp文件夹下呢?经过测试,这样也是行不通的,没有建立文件夹的权限,返回。

试了半天上传是没有什么希望了,入侵再次受阻,后台所有栏目都看了一遍,基本也没有能利用的地方了。很郁闷,后来静下心来,因为遇事不能急,终于成功的拿到shell。原来,后台是存在数据库备份页面的!我们直接在后台,看不到任何数据库备份的页面或者链接等信息,但是我们只要登陆后台后,直接访问地址,就可以来到页面,哈哈。到这里,大家就知道怎么拿shell了吧,接上传jpg格式小马,再通过备份数据库还原小马格式,最终成功获取猎物,至此,本次入侵告一段落。