雷驰系统总结
注:本文主要总结雷池三个版本的几个漏洞并简单说下拿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来欺骗登陆,其实这个也可以的,小弟不知道怎么构造,还望高手指点)
好了加密算法就到这里了