写在前面:
  现在的网络,脚本入侵十分的流行,而脚本注入漏洞更是风靡黑客界。不管是老鸟还是新起步的小菜,都会为它那巨大的威力和灵活多变的招式所着迷。正是因为注入攻击的流行,使的市面上的注入工具层出不穷。比较出名的有小竹的NBSI、教主的HDSI和啊D的注入工具等等。这大大方便的小菜们掌握注入漏洞。可是,工具是死的,注入的手法却是活的,能否根据实际情况灵活地构造SQL注入语句,得到自己想要的信息,是高手与小菜的根本区别。只用工具,而不去管它的原理,是不可能得到提高的,当然,在遇到一些特殊情况的时候,那些只会用工具的小菜们也只能放弃了。所以学会手工注入自己构造SQL注入语句是一个黑客爱好者必上的一堂课。
  恶补基础:
  要想学会手工注入,有一个名词是不得不提的,那就是数据库系统。
  1。简介
  数据库系统分为数据库和数据库管理系统!数据库是存放数据的地方,数据库管理系统则是
管理数据库的软件!数据库中数据的存储节构叫数据模型!有四种常见的数据模型,分别是层次模型、网状模型、关系模型和面向对象模型。其中关系数据模型是最主要的数据模型,ACCESS、MSSQL、ORACLE等都是关系模型数据库系统。其中以ACCESS、MSSQL数据库系统最为常见!这些都是理论的知识,希望大家理解。
  2。基本概念
  表:表是一个关系数据库的基本组成元素!它按行与列组合排列成相关信息。通常行称为记录,列称为域。每个域称为一个字段!每一条记录都由多个字段组成。每个字段的名字叫做字段名,每个字段的值叫估字段值。表中的每一行即每一条记录都拥有想同的结构。如图1。
  图1中的这张表里有14行,即14条记录。有4列,即4个字段,4个字段的名字分别叫:job_id(下面对应的1、2、3等都是这个字段的值,后面三个字段的值举一反三!) 、job_ desc、 min_lvl、max_lvl。因为本文不是专讲数据库知识的,所以这里只讲一些最重要的概念,有兴趣的朋友可以自己去查看数据库的有关资料!
  3。注入的条件
  只有调用数据库的动态页面才有可有存在注入漏洞,动态页面包括asp php jsp cgi等。本文只讲对ASP页面的注入。那什么是调用数据库的页面呢?比如这样的形势:
  asp?id= php?id= 这样的样子的都是调用数据库的页面。"?"后面加的id的名字叫变量,注意这个变量是可以随便换的,"="号后面的值名字叫参数!这个参数也是可以变的!大家的思路一定要灵活,要学会举一反三,不要太死板。
  4。注入漏洞的原理分析:
  程序对用户提交的变量没有进行有效的过滤,就直接带入查询语句中,这样,我们就可以提交具有数据查询功能的语句,加入到程序将要提交的信息中去,再根据服务器返回的信息来判断数据库里的内容!光这样说大家可能不太好理解,不要紧,接着往下看。
  有关的基础已经讲完了 下面开始实战练习部分。
  实战部分
  如果是刚刚接触注入的新手朋友,我们要做的第一步就是,用鼠标右键点击桌面上的IE图标,再点属性,然后再点“高级”,然后往下拉滚动条,到“显示
  友好HTTP错误信息”,把前面的勾去掉,再点“确定”,这样做是为了让我们得到更多的服务器返回的信息。
  第一部分:ACCESS数据库手工注入
  1。判断是否存在注入漏洞:
  这个相信大家都应该知道! 就是在一个调用数据库的网址后面加上分别加上 and 1=1和 and 1=2 ,如果加入and 1=1返回正常(就是和原来没有加 and 1=1时页面样子的一样),而加入 and 1=2返回错误(和原来没有加 and 1=2时页面的样子不一样),就可以证明这个页面存在注入漏洞。比如:
  /a.asp?id=7,这个网页,我们在后面加上 and 1=1(两个空格,and前面一个,and和1=1之间一个!),网址就变成了
  /a.asp?id=7 and 1=1,用IE打开这个网页,返回正常!再尝试在后面加上and 1=2,网址就变成了
  /a.asp?id=7 and 1=2,同样用IE打开这个网页,返回错误!这就说明这个网页/a.asp?id=7存在注入漏洞,是一个注入点!(存在注入漏洞的网页叫注入点!)可是,并不是所有的页面都可以这样判断,有的页面不管你加入 and 1=1 还是 and 1=2,返回的都是错误的页面,难道这样的页面就没有注入漏洞吗?不一定!比如这个页面:/b.asp?id=ade7, 不管我们在后面上的是and 1=1还是and 1=2,它都返回错误的页面!这个时候我们就要尝试用另一种方法来测试漏洞了,这种方法可以说是and 1=1和and 1=2的变种方法。原来的网址是这样的:/b.asp?id=ade7,现在我们把它变成这个样子:[url]/b.asp?id=ade7'[/url] and '1'='1 ,用IE打开它,看看返回正不正常!如果正常,那就可以接着用这个地址来进一步测试漏洞是否存在(如果返回不正常那这个页面就很有可能不存在注入漏洞!):[url]/b.asp?id=ade7'[/url] and '1'='2 ,用IE打开这个网址,如果返回错误的话,那这个网址/b.asp?id=1就存在注入漏洞!
sql软件长什么样
  A。数字型参数注入点分析
  这时肯定有朋友要问了,为什么用一开始那种and 1=1 and 1=2不行呢!呵呵,先不要急,先看看这两个存在注入漏洞的页面有什么不一样?
  (你不要告诉偶第二个网址比第一个网址多了几个X),相信大家已经看到了,第二个网址后跟的参数是ade7,是字符!而第一个网址后跟的参数是7,是数字!就是因为这里,才引起了测试漏洞的语句的不同!学过数据库的朋友们应该知道,在查询中,字符型的值,是要用单引号包起来的,也就是这个样子'字符型数据'。这里假设第一个注入页面所对应的查询语句是这样的(凡是调用数据库的页面都会有一条或者几条对应的查询语句,用来对数据库里的内容进行查询!)
  :select * from 表名 where id=7。这是原来的那条查询语句,这条语句是正确的,可以在数据库中查询出相应的内容!可是如果我们在网址后面加上了 and 1=1,那这条查询语句就会变成select * from 表名 where id=7 and 1=1(这下知道了注入漏洞原理分析那里讲的变量没有过滤的意思了吧!),这里有必要说一些数据库的有关知识,这条语句里,and是逻辑运算符!(这个记住就行了),用中文翻译过来就是“和”的意思!在高中的数学里讲过,用“和”来连接的两个句子,必须都是真的,不然整个句子就不是真的!比如:苹果和大象都是水果。这
句话就是错的,苹果是水果,可是大象不是!这下大家应该可以理解“用“和”来连接的两个句子,必须都是真的,不然整个句子就不是真的”这句话了吧。如果换成苹果和梨都是水果,那这句话就是对的。知道了and的用处后,再回来看select * from 表名 where id=7 and 1=1这个句子,and 前面的select * from 表名 where id=7肯定是对的,(为什么呢,如果这条查询语句都不对,那这个注入页而就有问题了!所以and前面的那个句子一定是对的!)。再看and后面,1=1,不用我说了吧,也是对的(难道一不等于一吗?)根据刚才说的and用处,现在我们可以判定select * from 表名 where id=7 and 1=1这条查询语句,仍然是对的!所以它还是可以正确地从数据库里查询出信息,返回给我们!
  举一反三,那这个句子:select * from 表名 where id=7 and 1=2,肯定是不对的了,那这条查询语句就不能正确地从数据库里查询出信息,所以我们就会看到一个错误的页面! 以上是注入点参数是int(整数型)时的分析。
B。字符型参数注入点分析
  和刚才一样,我们先来看第二个字符型注入页面里的查询语句,比如是这个select * from 表 where id='ade7'(为什么加引号?看前面吧!)。原来的查询语句是这个样子的,如果我们
还按照数字型参数的那种测试漏洞的方法的话,语句就会变成这样:select * from 表 where id='ade7 and 1=1'和
  select * from 表 where id='ade7 and 1=2' ,因为程序会自动查询引号里的内容,如果我们按前面这两个语句这样提交的话,程序就会查询id值为ade7 and 1=1和ade7 and 1=2的记录,这样是查不到结果的(你可不要告诉我数据库里正好有两个记录的id就是ade7 and 1=1 和and 1=2)。这里可能有朋友要问了,为什么不是查询id为'ade7,然后and 1='1呢?好,我现在回答你们,就算可以查询id值为'ade7的记录,那这个句子也是错的,1怎么会等于'1呢?对吧?更何况程序是不可能查询'ade7的,更准备的说是数据库中不可能有一个字段的值是'ade7,因为这个字符串少一个引号,如果直接把这个字符串存入数据库的话,程序会报错的!怎么样?明白了吧?现在再说用 ' and '1'='1和' and '1'='2来测试的的原理!同样是这个查询语句:
  select * from 表 where id='ade7',如果我们在网址后面加了' and '1'='1,那这个查询语句就会变成
  select * from 表 where id='ade7' and '1'='1'(这里最外面的那一层引号是程序自动加上的),
变成这个样子!这个语句对不对呢?我们分析一下。如果我们提交个语句,那程序就会自动查询id值是ade7的记录!因为这个记录是存在的(不存在的话那就是这个网页有问题了!),然and后面跟的'1'='1'是正确的,所以这个语句是正确的!如果我们把' and '1'='1换成' and '1'='2,那语句就成了select * from 表 where id='ade7' and '1'='2',只看后面我们就可以知道这个语句对不对了!'1'怎么可能等于'2'呢?是吧?好了,字符型参数的注入点的原理就介绍到这里!
  2。数据库类型的判断

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。