分享

注入篇1,高手飘过

 杨贵妃妃 2016-03-09
一:SQL注入简介 SQL注入想必大家都接触过,说难也不难说易也不易,在B/S模式普及的情况下,由于程序员的技术兼人品问题
有很多的程序员在编写程序代码的时候,没有对用户输入信息的合法性进行很好的判断,这样就使得程序的安全性出现问题,用户
可以提交一些类似于数据库查询的代码,通过程序反馈的结果分析出某些他想得知的数据,这种方法就是SQL注入法。

二:SQL注入语句判断 菜菜们在进行SQL注入之前步先把IE菜单=>工具=>Internet选项=>高级=>显示友好 HTTP 错误信息前面的勾去掉。
否则,不论服务器返回什么错误,IE都只显示为HTTP 500服务器错误,不能获得更多的提示信息。
一定要先这样做,免的有些菜菜自己出了问题说我教程烂。。。
通常我们在入侵一个网站前,要先检查这个网站是否存在注入点,我们可以在网站主页上面随便找个链连进行注入检测,最常用的方法就是在链连后面加个单引号’
一般服务器会返回类似下面的错误提示: Microsoft JET Database Engine 错误 '80040e14' 字符串的语法错误 在查询表达式 'ID=XX'' 中。 /showdetail.asp,行X

我们从这个错误提示能得到这几种信息:
1.网站使用的是Access数据库,通过JET引擎连接数据库,而不是通过ODBC。
2. 程序没有判断客户端提交的数据是否符合程序要求。 3. 该SQL语句所查询的表中有一名为ID的字段。
这样我们就是从客户端提交特殊的代码,从而收集程序及服务器的信息,从而获取你想到得到的资料。这个其实也就是SQL注入入侵的基本原理。。。

相信关于这个方法很多菜菜都不陌生,有的是从书上看过有的是别人教的,但这种方法测试的结果并步准确不一定每台服务器的IIS都返回具体错误提示给客户端,
如果程序中加了cint(参数)之类语句的话SQL注入是不会成功的,但服务器同样会报错,一般会提示:“处理 URL 时服务器上出错。请和系统管理员联络。” 这类的话。。。
还有部分对SQL注入有一点了解的程序员(就是那种不是特别SB的程序员),会对单引号进行过滤,如果你用单引号测试,是测不到注入点的但要是他认为这样就安全了

那就给我们菜菜留下了发挥的空间,所以我们说他们是“不是特别SB的程序员”比SB好一点 那么对于这种情况,我们菜菜应该怎么做呢?

下面我要给大家讲的就是传说中的AND1=1测试法 o(∩_∩)o...哈哈 很无语吧!

下面是具体的操作方法,我们在链接地址后面分别加上;;and 1=1和;;and 1=2然后在于原页面进行对比 原页面当然是可以正确显示的,汗。。。废话!

;;and 1=1一般也是可以正常显示,内容和原页面大致一样。。。又是废话

;;and 1=2提示BOF或EOF(程序没做任何判断时)、或提示找不到记录(判断了rs.eof时)、或显示内容为空(程序加了on error resume next)

这样不可以注入就比较容易判断了,不可以注入就比较容易判断了,;;and 1=1正常显示,;;and 1=2一般都会有程序定义的错误提示,或提示类型转换时出错。

这样只是传入参数是数字型的时候用的判断方法,实际应用的时候会有字符型和搜索型参数。

三:数据库类型的判断及注入方法 不同的数据库的函数要用到不同的注入方法,我们在注入之前还要判断一下数据库的类型。
一般ASP最常搭配的数据库是Access和SQLServer,在中国大部分网站都是这两种类型的数据库。 SQLServer有一些系统变量
如果服务器IIS提示没关闭,并且SQLServer返回错误提示的话,那可以直接从出错信息获取,方法如下:

我们在链接地址后面加上 ;;and user>0 我们知道,user是SQLServer的一个内置变量,它的值是当前连接的用户名,类型为nvarchar。

拿一个nvarchar的值跟int的数0比较,系统会先试图将nvarchar的值转成int型,当然,转的过程中肯定会出错

SQLServer的出错提示是:将nvarchar值 ”abc” 转换数据类型为 int 的列时发生语法错误,那么abc正是变量user的值,这样我们就可以拿到了数据库的用户名
o(∩_∩)o...很方便吧?

下面顺便讲讲SA用户,很多菜菜都听说过SA权限,我给大家具体讲一讲看看
大家自己看看 SQLServer的用户sa是个等同Adminstrators权限的角色,拿到了sa权限就肯定可以拿到主机的Administrator了。

上面的方法可以很方便的测试出是否是用sa登录,要注意的是:如果是sa登录,提示是将”dbo”转换成int的列发生错误,而不是”sa”。

但是如果服务器IIS不允许返回错误提示,那怎么判断数据库类型呢?

那我们可以从Access和SQLServer和区别入手,Access和SQLServer都有自己的系统表,比如存放数据库中所有对象的表,
Access是在系统表[msysobjects]中,但在Web环境下读该表会提示“没有权限” SQLServer是在表[sysobjects]中,在Web环境下可正常读取。

我们在确认可以注入的情况下,使用下面的语句进行判断: ;;and (select count(*) from sysobjects)>0和 ;;and (select count(*) from msysobjects)>0 对这两个页面进行对比
如果数据库是SQLServer,那么第一个网址的页面与原页面大致相同;第二个网址,由于找不到表msysobjects,会提示出错,就算程序有容错处理,页面也与原页面完全不同。

如果数据库用的是Access,那么第一个网址的页面与原页面完全不同;第二个网址,则视乎数据库设置是否允许读该系统表,一般来说是不允许的,所以与原网址也是完全不同。

一般来说,用第一句就可以得知系统所用的数据库类型,第二个网址只作为开启IIS错误提示时的验证。

在 《注入篇①》中我详细介绍了SQL注入点的测试以及具体的数据库类型的判断方法在

      《注入篇②》中我会给大家介绍SQL注入的一般方法,手工猜解表段,SQL常用注入函数和在注入中遇到的一些小问题的解决方法

    这期的课程就到这里了,下一课再见。。。                                          

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多