起初看到60度cms审计的文章是在freebuf上,基于对cookie欺骗漏洞的学习,特地搭建了环境来尝试对这套代码进行审计,重点是看看如何产生cookie欺骗漏洞的,新手学代码审计可以看看,大牛绕过~
freebuf上的原文:http://www.freebuf.com/articles/web/149232.html
60度cms下载地址:http://down.chinaz.com/soft/23548.htm
这里讲下搭建环境,起初用server2003搭建的时候出现了个问题,那就是用iis6.0搭建的网站,打开任意网页均是404页面,回头百度了一下,原来发现没有安装asp的组件,因此也就不支持asp网页~遇到这种情况的可以首先查看下自己的文件权限,然后就是自己的iis组件有没有漏装的。。
下面开始代码分析~
既然是cookie欺骗漏洞,我们首先来看后台登录界面怎么写的
1
2
3
4
5
6
7
|
if action=“logout” then
session(“cmsid”) = “”
session(“cmsname”) = “”
response.Cookies(“cmsname”) = “”
response.Cookies(“cmsid”) = “”
end if
ComeUrl = Trim(Request.ServerVariables(“HTTP_REFERER”))
|
这里是在cookie中传入两个参数,一个是账号名,一个是账户id,这里经测试管理员账户admin的id为1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
if dpost=“ok” then
if code <> session(“code”) then
showmsg “验证码错误!”,“login.asp”
end if
set rs = conn.execute(“select * from 60du_Admin where AdminName = ‘”&ReplaceBadChar(username)&“‘ and Password = ‘”&md5(password,32)&“‘”)
if rs.eof then
showmsg “用户名或密码错误!”,“login.asp”
elseif rs(“IsActive”)=1 then
showmsg “你的用户名已被锁定,你不能登陆!请联系管理员。”,“login.asp”
else
session(“cmsid”) = rs(“id”)
session(“cmsname”) = rs(“AdminName”)
response.Cookies(“cmsname”) = rs(“AdminName”)
response.Cookies(“cmsid”) = rs(“id”)
ip=Request.ServerVariables(“REMOTE_ADDR”)
Call conn.execute(“update 60du_Admin set LoginTime='”&Now()&“‘,LoginIP='”&ip&“‘ where AdminName='”&username&“‘”,0)
Call InsertLog(1, 0, UserName, ip, “登录成功”, ComeUrl, “”)
showmsg 0,“index.asp”
end if
end if
|
这里其实就是最普通的后台登录界面,这里可以看到账号和密码都经过了ReplaceBadChar这个函数的过滤,,应该是过滤注入~
同时,我们登录成功可以看到跳转的界面为admin目录下的index.asp
下面来看看index.asp这个文件源代码,如果是cookie欺骗漏洞,那么用户认证的那段代码就应该是基于cookie的~
下面来一探究竟~
1
2
|
<!—#include file=”../inc/config.asp”–>
<!— #include file=”check.asp” –>
|
在文件头部引入了两个asp文件,一个是配置文件,还有一个文件就应该是验证管理员的文件,下面来重点分析check.asp!
1
2
3
4
5
6
7
8
9
10
11
12
13
|
<!—#include file=”../inc/md5.asp”–><%
‘判断用户是否登陆
if session(“cmsname”)=”” and instr(CStr(Request.ServerVariables(“SCRIPT_NAME”)),site_install&AdminPath&”/login.asp”)=0 then
if request.Cookies(“cmsname”)=”” then
response.Redirect(site_install&AdminPath&”/login.asp”)
elseif Session(“admin_id”) =null then
Response.Write(“<script>alert(‘登陆超时!‘);parent.location = ‘“&site_install&AdminPath&”/login.asp‘;</script>“)
else
session(“cmsname“)=request.Cookies(“cmsname“)
session(“cmsid“)=request.Cookies(“cmsid“)
end if
end if
%>
|
可以看到这里就是拿cmsname和cmsid作为验证,因此也就出现了cookie欺骗漏洞,如果我们拿到了管理员的cmsname和cmsid,在后台登录时我们加上这两个参数,就能够作为管理员登录进去~
下面我们来直接访问admin目录下的index.asp,然后利用抓包,将管理员的cookie加上,看看能否直接登录~这里管理员的cmsname为admin,cmsid为1
抓包时添加管理员的cookie参数~
可以看到就可以直接登录进来~
下面我们来继续看看这个cms。。
首先既然进入了后台,看看怎么getshell
在网站参数设置中,可以直接添加asp后缀,然后利用图片上传,,不多说~
这里本来想看看能不能通过写配置文件来getshell,但是配置文件全部会存在一个mdb文件里,然后调用出来。。所以好像不能通过写网站配置来getshell~
下面原本想看看存不存在xss漏洞,翻了一下主页,一下就看到了留言~我们点进去看看,然后再到源码中看看有无过滤~
的确存在留言功能,下面来看看源码book.asp~
1
2
3
|
ip=getip()
conn.execute(“insert into cms_book(cname,ip,content,[check]) values(‘”&ReplaceBadChar(trim(request(“cname”)))&“‘,'”&ip&“‘,'”&ReplaceBadChar(trim(request(“content”)))&“‘,”&bookcheck&“)”)
response.Write “<script>alert(‘发表留言成功!”&okmes&”‘);location.href=‘book.asp’;</script>“
|
这里可以看到我们的ip是无过滤的,不知道有没有注入~
但是这里重点看留言,我们的cname和content都会经过这个ReplaceBadChar函数,下面来看看这个替换函数
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
‘**************************************************
‘函数名:ReplaceBadChar
‘作 用:过滤非法的SQL字符
‘参 数:strChar——–要过滤的字符
‘返回值:过滤后的字符
‘**************************************************
Function ReplaceBadChar(strChar)
If strChar = “” Or IsNull(strChar) Then
ReplaceBadChar = “”
Exit Function
End If
Dim strBadChar, arrBadChar, tempChar, i
strBadChar = “+,’,%,^,&,?,(,),<,>,[,],{,},/,,;,:,” & Chr(34) & “,” & Chr(0) & “,–“
arrBadChar = Split(strBadChar, “,”)
tempChar = strChar
For i = 0 To UBound(arrBadChar)
tempChar = Replace(tempChar, arrBadChar(i), “”)
Next
tempChar = Replace(tempChar, “@@”, “@”)
ReplaceBadChar = tempChar
End Function
|
这里可以看到好像xss不存在,但是这个ip参数没有任何的过滤!
我们进入后台看看留言管理那里会不会显示ip!
这里还没评论,但是我们可以看到的确会显示用户ip,因此想要构造一个存储型的xss漏洞,我们可以利用这个ip参数~
这里的x-forward-for即为传入ip的参数,因此我们构造了一个xss
可以看到成功利用~
下面来找找有没有注入点~
全文基本就一个入口点class.asp?classid=xxx
阅读了一下class.asp源码, 找到程序GET位置
1
2
|
aa.templatecid=getnum(“classid”)
aa.templatepage=getnum(“page”)
|
但是传入classid时会经过一次getnum函数,基本八九不离十这就是个过滤函数
1
2
3
4
5
6
7
8
9
10
11
12
13
|
function getnum(strv)
strc = request(strv)
if isnull(strc) or strc=“” then
exit function
else
if not isnumeric(strc) then
response.write“<center>非法操作导致程序中止!</center>”
response.end
else
getnum=int(strc)
end if
end if
end function
|
会利用isnumeric()来进行判断,,好像gg了。。
最后的话,就是一个数据库文件的位置,如果是默认的应该也算一个漏洞吧。。
http://localhost/data/60ducms1.0.mdb
最后找到了fckeditor,但是好多功能都不能用了,最重要的是会跳向登录界面,,无法利用。。
这次审计就到此结束~如有不当之处,敬请指出!
题目链接:传送门 总的来说,YIT-CTF的图片隐写类不是很难,题目量也不是很大,都是很基础的一些隐写题目。 1.小心心 flag说:把我的小心心给你~~ 先把图片下下来,看图片没什么猫腻。。用winhex查看下图片里是否有隐藏信息 在图片的最后我们发现了隐藏…
请登录后发表评论
注册