zoukankan      html  css  js  c++  java
  • 雷驰系统总结

    注:本文主要总结雷池三个版本的几个漏洞并简单说下拿shell,善于总结进步才快。呵呵,本文献给和我一样的小菜,高手掠过!初学asp,有错请提出~谢谢!
    一、’or’=’or’漏洞
    1.漏洞分析
    漏洞文件当然在后台验证文件上,/admin/CHKLOGIN.ASP中,见代码4-7行:
    dim rs
    admin1=request("admin") ‘没有任何过滤
    password1=request("password") ‘没有任何过滤
    set rs=server.CreateObject("ADODB.RecordSet")
    rs.open "select * from admin where admin=" & admin1 & " and password="&encrypt(password1)&"",conn,1

    ‘encrypt()函数加密密码

    明显直接获取输入的用户名和密码,根本没有过滤检查。那么我们就可以构造进行注入,其实只要不为空,让sql查询语句成立就可以了。相信这个大家都懂,不废话。
    2.简单利用
    其实这个漏洞一直存在与雷池新闻系统的V1.0 V2.0 V 3.0版本,但是在V3.0这个版本当中,加入了火狐的防注入系统所以没有办法成功注射,会被拦截的!
    那么面对3.0以下的版本就可以这样进后台。
    二、暴库漏洞
    造成漏洞原因:没有判断访问权限
    直接访问admin/adminconn.inc,就可以爆出数据地址了,这个可以看看数据库是不是asp或者asa(后面有用)

    三、cookie注入漏洞
    雷池新闻系统的2.0增强版本(2.0没有加)开始就加入了防注入系统,但是经过分析知道在SQL通用防注入系统3.0版 火狐技术联盟存在cookie注入漏洞,看下漏洞代码,在/sql/Neeao_SqlIn.Asp文件中:
    --------POST部份------------------
    If Request.Form<>"" Then
    For Each Fy_Post In Request.Form
    For Fy_Xh=0 To Ubound(Fy_Inf)
    If Instr(LCase(Request.Form(Fy_Post)),Fy_Inf(Fy_Xh))<>0 Then
    If WriteSql=True Then
    killSqlconn.Execute("insert into SqlIn(Sqlin_IP,SqlIn_Web,SqlIn_FS,SqlIn_CS,SqlIn_SJ) values("&Request.ServerVariables("REMOTE_ADDR")&","&Request.ServerVariables("URL")&",POST,"&Fy_Post&","&replace(Request.Form(Fy_Post),"","")&")")
    killSqlconn.close
    Set killSqlconn = Nothing
    End If
    Response.Write "<script type="text/javascript">// <![CDATA[
    alert(系统提示: 请不要在参数中包含非法字符尝试注入! );
    // ]]></script>"
    Response.Write "非法操作!你已被系统记录做了如下非法操作↓
    "
    Response.Write "操作IP:"&Request.ServerVariables("REMOTE_ADDR")&"
    "
    Response.Write "操作时间:"&Now&"
    "
    Response.Write "操作页面:"&Request.ServerVariables("URL")&"
    "
    Response.Write "提交方式:POST
    "
    Response.Write "提交参数:"&Fy_Post&"
    "
    Response.Write "提交数据:"&Request.Form(Fy_Post)

    <p style="text-align: left;">Response.End
    End If
    Next
    Next
    End If
    ----------------------------------</p>
    <p style="text-align: left;">--------GET部份-------------------
    If Request.QueryString<>"" Then
    For Each Fy_Get In Request.QueryString
    For Fy_Xh=0 To Ubound(Fy_Inf)
    If Instr(LCase(Request.QueryString(Fy_Get)),Fy_Inf(Fy_Xh))<>0 Then
    If WriteSql=True Then
    killSqlconn.Execute("insert into SqlIn(Sqlin_IP,SqlIn_Web,SqlIn_FS,SqlIn_CS,SqlIn_SJ) values("&Request.ServerVariables("REMOTE_ADDR")&","&Request.ServerVariables("URL")&",GET,"&Fy_Get&","&replace(Request.QueryString(Fy_Get),"","")&")")
    killSqlconn.close
    Set killSqlconn = Nothing
    End If
    Response.Write "<script type="text/javascript">// <![CDATA[
    alert(系统提示: 请不要在参数中包含非法字符尝试注入! );
    // ]]></script>"
    Response.Write "非法操作!你已被系统记录做了如下非法操作↓
    "
    Response.Write "操作IP:"&Request.ServerVariables("REMOTE_ADDR")&"
    "
    Response.Write "操作时间:"&Now&"
    "
    Response.Write "操作页面:"&Request.ServerVariables("URL")&"
    "
    Response.Write "提交方式:GET
    "
    Response.Write "提交参数:"&Fy_Get&"
    "
    Response.Write "提交数据:"&Request.QueryString(Fy_Get)
    Response.End
    End If
    Next
    Next

    End If
    显然明显文件只对GET和POST提交方式进行检测合法性。网页文件在接受处理方式的时候一般是POST或GET两种方式。比如Request.form 或Request.QueryString。而防注入程序3.0是限制,这两种方式提交。却没有限制Request.cookie的方式。也就是说,只要 我们构造Request.cookie语句进行注入就可以成功注入了。

    又分析了/owens.asp文件,代码如下:
    <!--#include file="conn.asp"--> <% owen=request("owen") owen1=request("owen1") owen2=request("owen2") n=request("n") if n="" then n=100 end if%>


    <p style="text-align: left;"><%</p>
    <p style="text-align: left;">if owen1<>"" and owen2<>"" then
    sql="select * from NEWS where BigClassName="& owen1 &" and SmallClassName="& owen2 &" order by id desc"
    set rs=conn.execute(sql)
    do while not rs.eof

    %>

    很多朋友一看到这个就说有存在注射了,不过确实存在注射。但是看到这行我们又到conn.asp(连接数据库文件),代码如下:
    <% dim conn,connstr on error resume next c+server.mappath("data/nxnews.mdb")+";DefaultDir=;DRIVER={Microsoft Access Driver (*.mdb)};" Set conn=Server.CreateObject("ADODB.CONNECTION") conn.open connstr %>

    <!--#Include File="sql/Neeao_SqlIn.Asp"-->
    看到最后一行没有,把neeao写的那个通用防注入系统给包含进来了,也就是说,只要涉及到数据库查询的都要进行“防注入”过滤处理。那么我们就无法顺利注射了。
    那么我们只能通过cookie注射了,我们可以采用javascript cookie来进行注射,构造出语句,俺比较懒,直接用GreenBrower 的jscookie插件来进行注入,比较简单。

    首先构造好注射语句,打开数据库发现有11个字段,可以构造这样的语句来进行注射:

    -1 union select 1,admin,password,4,5,6,7,8,9,10,11 from admin

    其中的-1是让他不成立就执行我们后面的联合查询语句。好了,原理分析完成了。
    2.利用方法:
    随便打开一个新闻页面,比如http://59.77.72.12/leichi3.0/onews.asp?id=42,我们提交http: //59.77.72.12/leichi3.0/onews.asp?id=42‘(注意这个的单引号不是英文的,是中文的,英文的被过滤了)就出现了 “数据错误提示”,说明确实存在注射,如图:

    那么我们用greenbrower来进行注射,去掉url后面的id即:http://59.77.72.12/leichi3.0/onews.asp,同样出现了错误如图2,如图3:

    直接注射了,看成功了,返回onews。Asp,出现了,管理员密码和站好出来了,如图4:

    用户名Admin 密码bfpms,这个加密算法很简单,见下面分析。
    三、密码加密问题
    雷池新闻系统的加密过于简单,可以直接手算,但是要记得ASCII码,这里我写了一个辅 助工具(下载地址:http://bbs.awolf07.cn/attachment.php?aid=46),直接破解,我们看看他是怎么加密的吧, 看encrypt()函数加密密码,上面有提到,我们找下它,看看怎么写的,在文件/admin/adminiconn.inc文件中,
    function decrypt(dcode)
    dim texts
    dim i
    for i=1 to len(dcode)
    texts=texts & chr(asc(mid(dcode,i,2))-i)
    next
    decrypt=texts
    end function
    function encrypt(ecode)
    Dim texts
    dim i
    for i=1 to len(ecode)
    texts=texts & chr(asc(mid(ecode,i,2))+i)
    next
    encrypt = texts
    end function
    %>


    加密程序encrypt,解密程序decrypt,这里我简单说下它的加密原理:密文中字母所对应的ascii码减去字母在密文中所处的位数其结果 为原密码的所对应的ASCII码 例如:admin加密后为bfpms。很简单的加密方法,确切的说是做了简单的变换。有兴趣的朋友可以自己手动转换,这里我给大家做好了,省得去查 ASCII表。雷池加密方法是非MD5加密。
    这个算是一个软肋吧,因为如果是md5的话,即使你得到md5散列,但是如果密码比较强大,那么就不一样可以破解了(当然有人会说可以通过cookie来欺骗登陆,其实这个也可以的,小弟不知道怎么构造,还望高手指点)
    好了加密算法就到这里了

    勿做伸手党,勤思考,总能成就一番事业。
  • 相关阅读:
    学习hadoop
    贵在坚持
    保护好自己的毕业论文
    博客园与CSDN的选择
    Matlab中的“prod”函数
    js实现HashMap()
    js常用正则表达式
    苹果手机使用替代onkeyup的方法
    keydown
    ArrayAndString(数组和字符串)
  • 原文地址:https://www.cnblogs.com/X-caiji/p/11203525.html
Copyright © 2011-2022 走看看