另外,究竟写入‘防SQL注入脚本’维护的数据库有什么用呢?在过滤引擎Neeao_SqlIn.Asp的最后一段定义了若浏览任何加载引擎脚本的页面时会检索数据内是否存在存在攻击者的IP地址,若‘存在’则直接输出警告信息:
| 以下是引用片段: Dim Sqlin_IP,rsKill_IP,Kill_IPsql Sqlin_IP=Request.ServerVariables("REMOTE_ADDR") Kill_IPsql="select Sqlin_IP from SqlIn where Sqlin_IP='"&Sqlin_IP&"' and kill_ip=true" Set rsKill_IP=killSqlconn.execute(Kill_IPsql) If Not(rsKill_IP.eof or rsKill_IP.bof) Then Response.write "<Script Language=JavaScript>alert('SQL通用防注入系统提示你↓\n\n你的Ip已经被本系统自动锁定!\n\n如想访问本站请和管理员联系!\n\nHttp://Www.wrsky.Com \n\n系统版本:V3.0(ASP)\n\nBy:Neeao');</Script>" Response.End End If rsKill_IP.close |
如果您发现再登陆不了了,就是已经进‘黑名单’了,赶紧加/换个PROXY浏览吧。
再看看POST的怎么样。首先确认一下缺陷,浏览:
http://127.0.0.1/admin.asp
输入帐号、密码均为:
‘ or ‘’=’
直接登陆没问题(确认缺陷存在)。开始测试时我把:
<!--#Include File="Neeao_SqlIn.Asp"-->
放入admin.asp的最后,结果报警信息照出、黑名单照进,但却等直接浏览注入后登陆的页面。究竟怎么回事???后来看了一下,其实是和脚本的构成有关,看看修改后的admin.asp的内容:
| 以下是引用片段: <!--#include file="config.asp"--> <!--#include file="conn.asp"--> <!--#include file="error.asp"--> <!--#include file="lib/nav.asp"--> <!--#include file="lib/incjs.asp"--> <!--#include file="lib/adminmenu.asp"--> <!--#include file="lib/admin_body.asp"--> <!--#include file="lib/adminfoot.asp"--> <title><%=webname%>-管理登录</title> <% dim founderr,errmsg founderr=false errmsg="" call admin_nav() call admin_body() call adminendpage() %> |
<!--#Include File="Neeao_SqlIn.Asp"-->
分析一下登陆流程,首先在admin.asp中登陆部分是嵌套在lib/admin_body.asp中,登陆的部分为:
| 以下是引用片段: <form name="form1" method="post" action="admin.asp?action=adminlogin"> <tr> <td height="24" align="center" background="images/bg3.gif" class="diaryhead"> <font color="#333333">管理员登陆(如果您不是管理员请勿登录)</font></td> </tr> <tr> <td bgcolor="#F5F5F5" class="chinese" align="center">用户名 <input type="text" name="adminname" class="textarea" size="20"> 密码 <input type="password" name="adminpwd" class="textarea" size="20"> <input type="submit" name="Submit" value="登录" class="button"> </td> </tr> </form> |
一旦把数据POST到admin.asp时,admin.asp将执行lib/admin_body.asp中的admin_body()函数作认证查询,因此一个标准的绕过GET认证(输入’ or ‘’=’)为:
http://127.0.0.1/admin.asp?action=adminlogin&adminname=%27+or+%27%27%3D%27&adminpwd=%27+or+%27%27%3D%27&Submit=%B5%C7%C2%BC
这里adminname与adminpwd字段都肯定有Fy_Inf中过滤的内容,通过警告提示我们可以确认引擎脚本Neeao_SqlIn.Asp是处于工作状态的,但因为它在:
| 以下是引用片段: <% dim founderr,errmsg founderr=false errmsg="" call admin_nav() call admin_body() call adminendpage() %> |
| 网站登陆接口的攻与防 | 09-04 | |
| 联众游戏大厅GlobalLink glItemC | 09-04 | |
| php代码不开源下的一种漏洞检测思 | 08-25 | |
| 一段有注射漏洞的asp代码 | 08-03 | |
| 浅析BlogEz安全性 | 07-26 | |
| PHP168 CMS的一次新异漏洞分析 | 07-20 | |
| BBSXP多个注入点漏洞 | 07-11 | |
| PHPWind-附件文件名跨站脚本漏洞 | 06-26 | |
| CGI漏洞精典汇总 | 06-18 | |
| 动易新补丁加旧组件的BUG | 06-18 | |
| apache文件名解析缺陷漏洞利用 | 06-18 | |
| 新云网站管理系统UpdateUserToda | 06-09 | |