分析时间:2008-7-7 14:38-18:00
漏洞发布:Awolf(小C)
影响版本:QCDN_NEWS Version 4.13其他版本未看
漏洞文件: UserReg.asp
注:使用本文章进行做非法行为与作者本人无关
最近给公司找整站系统,朋友推荐这套系统,我就顺便分析了.发现的”洞”不少,足以颠覆这个系统了.
一.注册过滤不严格
在文件userreg.asp这个文件中:代码从第4~117行,这里给出部分代码:
[Copy to clipboard] [ - ]CODE:
if Request("RegSetp") = 2 then
if Trim(Request.Form("username")) = "" then
Errmsg = "<li>请输入用户名。"
FoundErr = true
else
username = Qcdn.checkStr(Trim(Request.Form("username")))
………………省略了部分类似代码……………………….
if rs.eof and rs.bof then
Sql="Insertinto article_User(username,[password],email,question,answer,qq,msn,male,birth,bloodtype,realname,country,province,city,phone,[address],postcode,job,edu,school,Intime)values('"& username &"','"& password &"','"& e_mail &"','"& question &"','"& answer &"','"& qq &"','"& msn &"',"& male &",'"& birth &"','"& bloodtype &"','"& realname &"','"& country &"','"& province &"','"& city &"','"& phone &"','"& address &"',"& postcode &",'"& job &"','"& edu &"','"& school &"',Now())"
conn.execute(sql)
显然这里直接从注册表单中获得用户名,只是简单的用qcdn.checkstr()函数来过滤,走继续跟踪到common.asp,看看他是怎么过滤的,代码如下:
Public function checkStr(str)
if isnull(str) then
checkStr = ""
exit function
end if
checkStr=replace(str,"'","''") '看到了没有,只把单引号过滤成双引号
end function
其他的内容比如密码框等都是这样简单过滤,那么就可以直接插入变形的一句话了马(只要没有单引号就可以),相信你也知道该怎么做了。看我插入效果

其次,看看数据库,也是asp的,那么提交成功就ok了。Shell就这样得到了。
二.前台注册后台跨站
其实这个应该和上面的内容差不多,不一样的是,我们注册的是跨站代码的用户,都知道他只过滤单引号,那么我们语句可以这样写
<script>alert(/Awolf Test XSS/)</script>
这样就可以注册成功了,然后到后台看看.成功了:

在看看后台数据库备份可以仿照黑X2008年第二期旭方的<<新云跨站漏洞的利用>>一文介绍的方法,我想就够完美了,这里就不废话了…两种方法可以得到webshell.
还没有读完....继续ing...可能还会补上!
官方最新版本,似乎N年没有更新了,也不知道怎么通知官方了,希望各位朋友不要利用本章做违法事情.否则后果自负!
高手过。。