前几天一个朋友让我帮他检测一下他网站程序的安全,为了不让我的面子掉一地只有硬着头皮帮他检测啦!
拿到他的源程序之后就开始我的检测之路啦!
首先我在网站的onews.asp里发现注入漏洞,代码如下:
<%owen=request("id")%> <style type="text/css"> .content { font-size: 11pt; } td{word-break:break-all} </style> <SCRIPT language=JavaScript> var currentpos,timer; function initialize() { timer=setInterval("scrollwindow()",50); } function sc(){ clearInterval(timer); } function scrollwindow() { currentpos=document.body.scrollTop; window.scroll(0,++currentpos); if (currentpos != document.body.scrollTop) sc(); } document.onmousedown=sc document.ondblclick=initialize </SCRIPT> <% Set rsnews=Server.CreateObject("ADODB.RecordSet") sql="update news set hits=hits+1 where id="&cstr(request("id")) conn.execute sql sql="select * from news where id="&owen rsnews.Open sql,conn,1,1 title=rsnews("title") if rsnews.eof and rsnews.bof then response.Write("数据库出错") else %>
上面的id直接传递给了owen,而owen又跳转到sql查询语句里,那这样就形成了注入
这样我就可以对它进行注入了。。
http://127.0.0.1/onews.asp?id=19 and 1=1
就在注入的时候它反回了防注入的提示,看来我是小看这小子啦!!提示如下:
非法操作!你的入侵记录我已经交给警方了你入侵吧↓
操作IP:127.0.0.1
操作时间:2013-1-22 12:11:05
操作页面:/onews.asp
提交方式:GET
提交参数:id
提交数据:19 and 1=1
如果是一般新手看到这里应该就放弃注入啦,但源程序已在我手里分析它的代码还是可以的,嘿嘿。。
在onews.asp源代码的头部我看到
<!--#include file="conn.asp"-->
这个conn.asp大家都应该知道是什么吧,我也不多说.
conn.asp源代码如下:
<!-- #include file="sql.asp" --> <% dim conn,connstr on error resume next connstr="DBQ="+server.mappath("data/nxnews.mdb")+";DefaultDir=;DRIVER={Microsoft Access Driver (*.mdb)};" Set conn=Server.CreateObject("ADODB.CONNECTION") conn.open connstr %>
在conn.asp文件的头部看到<!-- #include file="sql.asp" -->一看文件名就知道是防注入的东东。。
asp.asp源代码如下:
<% Dim Fy_Post,Fy_Get,Fy_In,Fy_Inf,Fy_Xh,Fy_db,Fy_dbstr Fy_In = "’’’’防;防and防exec防insert防select防delete防update防count防*防%防chr 防mid防master防truncate防char防declare防<防>防=防|防-防_" Fy_Inf = split(Fy_In,"防") 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 Response.Write "<Script Language=JavaScript>alert(’’’’udb311友情提示↓请不要 在参数中包含非法字符尝试注入攻击本站,你的入侵记录我已经交给警方了你入侵吧’’’’ );</Script>" Response.Write "非法操作!你的入侵记录我已经交给警方了你入侵吧↓<br>" Response.Write "操作IP:"&Request.ServerVariables("REMOTE_ADDR")&"<br>" Response.Write "操作时间:"&Now&"<br>" Response.Write "操作页面:"&Request.ServerVariables("URL")&"<br>" Response.Write "提交方式:POST<br>" Response.Write "提交参数:"&Fy_Post&"<br>" Response.Write "提交数据:"&Request.Form(Fy_Post) Response.End End If Next Next End If 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 Response.Write "<Script Language=JavaScript>alert(’’’’安全提醒↓请不要在参数 中包含非法字符尝试注入攻击,谢谢!’’’’);</Script>" Response.Write "非法操作!你的入侵记录我已经交给警方了你入侵吧↓<br>" Response.Write "操作IP:"&Request.ServerVariables("REMOTE_ADDR")&"<br>" Response.Write "操作时间:"&Now&"<br>" Response.Write "操作页面:"&Request.ServerVariables("URL")&"<br>" Response.Write "提交方式:GET<br>" Response.Write "提交参数:"&Fy_Get&"<br>" Response.Write "提交数据:"&Request.QueryString(Fy_Get) Response.End End If Next Next End If %>
在这段代码中我们可以看到两个重要的信息
Instr(LCase(Request.Form(Fy_Post))
从这句中我们可以知道它是对post提交进行了过滤
Instr(LCase(Request.QueryString(Fy_Get))
而这一句是对 get提交进行了过滤。。
分析到这里大家都应该想到了一个问题,它只是对POST和GET提交进行了过滤,那cookies提交呢。。。
这说明过滤不全。COOKIES注入大家都应该知道怎么利用吧!后面就不多写了
网站只分析了一下半,后面等再分析出什么问题再写出来吧!!
本人小菜如果有什么不足之处还请大牛们指出。。
转自:http://zone.wooyun.org/content/2450
相关内容:
突破 Sql 防注入过滤程序继续注入的一点方法、经验、技巧总结
留言评论(旧系统):