热门关键字:   网站安全  黑客攻防  安全漏洞  系统安全  网络安全
站外
广告
域名申请虚拟主机 信息安全 域名注册 云主机 网络安全技术 企业网络安全 站外
广告
文字广告位招租 文字广告位招租 文字广告位招租 文字广告位招租 云安全

SDCMS 漏洞分析 0day

发布时间:2010-05-16 09:04文章来源:未知文章作者:黑白前线 点击次数:
摘要:发布日期:2010-05.16 发布作者:Amxking 影响版本:未知 官方地址:http://www.sdcms.cn/ 漏洞描述: 看下面的代码,我们开始慢慢分析: (注: 这种方法是在管理员允许评论的时候,才能利用的,不过,一般管理员都会允许评论吧) 在/plug/comment.asp中 subsave_...
  1. 发布日期:2010-05.16 
  2. 发布作者:Amxking 
  3. 影响版本: 未知
  4. 官方地址: http://www.sdcms.cn/ 
  5. 漏洞描述: 
  6. 看下面的代码,我们开始慢慢分析:

    (注: 这种方法是在管理员允许评论的时候,才能利用的,不过,一般管理员都会允许评论吧)

    在/plug/comment.asp中

     
     

    1. sub save_comment  
    2.   ……  
    3. username=sdcms_f.HTMLEncode(username)  
    4. content=sdcms_f.contentEncode(content)  
    5. ip=sdcms_f.getip ‘请看这里,这里得到用户的IP.  
    6. set rs=server.CreateObject("adodb.recordset")  
    7. sql="select username,content,ip,infoid,ispass from sd_comment" 
    8. rs.open sql,conn,1,3  
    9. rs.addnew  
    10. rs(0)=left(username,10)  
    11. rs(1)=content  
    12. rs(2)=ip //没有任何过滤, 直接插到了数据库中.  
    13. rs(3)=id  
    14. if sdcms_comment_ispass=1 then  
    15. msg_contents=",请等待审核" 
    16. rs(4)=0  
    17. else  
    18. rs(4)=1  
    19. end if  
    20. rs.update  
    21. ……  
    22. end sub  
    下面我们看下getip的实现吧,

    在/inc/function.asp中

     

    1. Public Function getip  
    2.  
    3. ip=request.ServerVariables("HTTP_X_FORWARDED_FOR")  
    4.  
    5. if ip="" then ip=Request.ServerVariables("REMOTE_ADDR")  
    6.  
    7. getip=ip  
    8.  
    9. End function  

    看到这里,大家都知道问题的存在了吧.作者通过” HTTP_X_FORWARDED_FOR”这个字段来得到IP的值,而我们知道,这个字段在数据包中是可以伪造的.

    我们可以伪造数据包,将”HTTP_X_FORWARDED_FOR”的值, 改成一句话木马提交, 这样, 就直接将一句话木马插进数据库里去了. 如果我们知道数据库的位置,并且数据库的后缀名是asp的,那么就直接可以利用了.

    但可惜,这个CMS的数据库的名称未知,在安装的时候, 由如下代码生成12个随机字符构成, 加上后缀名还是mdb的, 所以我们要插入一句话, 也没法利用的.

    /install/index.asp中

     

    Function get_something  

    1. Randomize  
    2. Do While Len(pass)<12 '随机密码位数  
    3. num1=CStr(Chr((57-48)*rnd+48)) '0~9  
    4. num2=CStr(Chr((90-65)*rnd+65)) 'A~Z  
    5. num3=CStr(Chr((122-97)*rnd+97)) 'a~z  
    6. passpass=pass&num1&num2&num3  
    7. loop  
    8. get_something=pass 
    9. end function  

     


    我们考虑用另外一种方式来达到入侵的目的.

    看如下代码:

    /admin/sdcms_comment.asp

     
     

    1. sub main  
    2.  
    3. echo "<form name=""add"" action=""?"" method=""post"" onSubmit=""return confirm('确定要执行选定的操作吗?');"">"  
    4.  
    5. page=request.querystring("page")  
    6.  
    7. if page="" or not isnumeric(page) then  
    8.  
    9. page=1 
    10.  
    11. end if  
    12.  
    13. pages =20 
    14.  
    15. set rs=server.CreateObject("adodb.recordset")  
    16.  
    17. if request("classid")<>0 then tj=" where infoid="&request("classid")&"" ‘这里还有一个注入漏洞,虽然上面用classid=sdcms.Requestint(classid)来得到其整数值,但放在sql中查询的时候,并没有用classid来查询,而是直接用request(“classid”)来查询,作者在防注入的时候,没有对其值进行过滤, 所以可以注入, 但这个注入的前提是有管理员权限, 所以,我们就不讨论了.  
    18.  
    19. sql="select id,username," 
    20.  
    21. if Is_sql=0 then  
    22.  
    23. sqlsql=sql&"(iif(ispass=1,'已审','未审'))"  
    24.  
    25. else  
    26.  
    27. sqlsql=sql&"(case ispass when 1 then '已审'else'未审' end)"  
    28.  
    29. end if  
    30.  
    31. sqlsql=sql&",ip,adddate,content,ispass,infoid from "&sd_table&" "&tj&" order by ispass,id desc"  
    32.  
    33. ‘作者用sql语句直接查出IP的值来,并用如下代码显示在了页面上,没有经过任何过滤.  
    34.  
    35. <td class="title_bg" style="text-align:left"><span style="float:right"><%if rs(6)=0 then%><a href="?action=pass&id=<%=rs(0)%>&t=1&classid=<%=classid%>">通过验证</a><%else%><a href="?action=pass&id=<%=rs(0)%>&t=0&classid=<%=classid%>">取消验证</a><%end if%> <a href="?action=del&id=<%=rs(0)%>&classid=<%=classid%>" onclick='return confirm("真的要删除?不可恢复!");'>删除</a></span><input name="id" type="checkbox" onClick="unselectall()" value="<%=rs(0)%>"> <%=rs(1)%> 发表于:<%=rs(4)%> IP:<%=rs(3)%></td> 
    36.  

    标签分类: SQL注入 注入漏洞 脚本漏洞 网站0day

    上一篇:Press Release Script SQL Injection Vulnerability
    下一篇:CompactCMS 1.4.0 (tiny_mce) Remote File Upload