教你怎样学会SQL注 入

时间:2022-05-06 22:17:35 其他范文 收藏本文 下载本文

教你怎样学会SQL注 入((共8篇))由网友“用堂”投稿提供,下面是小编为大家准备的教你怎样学会SQL注 入,欢迎阅读借鉴。

教你怎样学会SQL注 入

篇1:教你怎样学会SQL注 入

SQL注/入攻击是 对数据库进行攻击的常用手段之一,随着B/S模式应用开发的发展,使用这种模式编写应用程序的程序员也越来越多。但是由于程序员的水平及经验也参差不齐,相当大一部分程序员在编写代码的时候,没有对用户输入数据的合法性进行判断,使应用程序存在安全隐患。用户可以提交一段数据库查询代码,根据程序返回的结果,获得某些他想得知的数据,这就是所谓的SQL Injection,即SQL注/入。SQL注/入是从正常的WWW端口访问,而且表面看起来跟一般的Web页面访问没什么区别,所以目前市面的防火墙都不会对SQL注/入发出警报,如果管理员没查看IIS日志的习惯,可能被入侵很长时间都不会发觉。但是,SQL注/入的手法相当灵活,在注/入的时候会碰到很多意外的情况,需要构造巧妙的SQL语句,从而成功获取想要的数据。

SQL注/入攻击的总体思路

·发现SQL注/入位置;

·判断后台数据库类型;

·确定XP_CMDSHELL可执行情况

·发现WEB虚拟目录

·上传ASP木马;

·得到管理员权限;

SQL注/入攻击的步骤

一、SQL注/入漏洞的判断

一般来说,SQL注/入一般存在于形如:HTTP://xxx.xxx.xxx/abc.asp?id=XX等带有参数的ASP动态网页中,有时一个动态网页中可能只有一个参数,有时可能有N个参数,有时是整型参数,有时是字符串型参数,不能一概而论。总之只要是带有参数的动态网页且此网页访问了数据库,那么就有可能存在SQL注/入。如果ASP程序员没有安全意识,不进行必要的字符过滤,存在SQL注/入的可能性就非常大。

为了全面了解动态网页回答的信息,首选请调整IE的配置。把IE菜单-工具-Internet选项-高级-显示友好HTTP错误信息前面的勾去掉。

为了把问题说明清楚,以下以HTTP://xxx.xxx.xxx/abc.asp?p=YY为例进行分析,YY可能是整型,也有可能是字符串。

1、整型参数的判断

当输入的参数YY为整型时,通常abc.asp中SQL语句原貌大致如下:

select * from 表名 where 字段=YY,所以可以用以下步骤测试SQL注/入是否存在。

①HTTP://xxx.xxx.xxx/abc.asp?p=YY’(附加一个单引号),此时abc.ASP中的SQL语句变成了

select * from 表名 where 字段=YY’,abc.asp运行异常;

②HTTP://xxx.xxx.xxx/abc.asp?p=YY and 1=1, abc.asp运行正常,而且与HTTP://xxx.xxx.xxx/abc.asp?p=YY运行结果相同;

③HTTP://xxx.xxx.xxx/abc.asp?p=YY and 1=2, abc.asp运行异常;

如果以上三步全面满足,abc.asp中一定存在SQL注/入漏洞。

2、字符串型参数的判断

当输入的参数YY为字符串时,通常abc.asp中SQL语句原貌大致如下:

select * from 表名 where 字段='YY',所以可以用以下步骤测试SQL注/入是否存在。

①HTTP://xxx.xxx.xxx/abc.asp?p=YY’(附加一个单引号),此时abc.ASP中的SQL语句变成了

select * from 表名 where 字段=YY’,abc.asp运行异常;

②HTTP://xxx.xxx.xxx/abc.asp?p=YY&nb ... 39;1'='1', abc.asp运行正常,而且与HTTP://xxx.xxx.xxx/abc.asp?p=YY运行结果相同;

③HTTP://xxx.xxx.xxx/abc.asp?p=YY&nb ... 39;1'='2', abc.asp运行异常;

如果以上三步全面满足,abc.asp中一定存在SQL注/入漏洞,

3、特殊情况的处理

有时ASP程序员会在程序员过滤掉单引号等字符,以防止SQL注/入。此时可以用以下几种方法试一试。

①大小定混合法:由于VBS并不区分大小写,而程序员在过滤时通常要么全部过滤大写字符串,要么全部过滤小写字符串,而大小写混合往往会被忽视。如用SelecT代替select,SELECT等;

②UNICODE法:在IIS中,以UNICODE字符集实现国际化,我们完全可以IE中输入的字符串化成UNICODE字符串进行输入。如+ =%2B,空格=%20 等;URLEncode信息参见附件一;

③ASCII码法:可以把输入的部分或全部字符全部用ASCII码代替,如U=chr(85),a=chr(97)等,ASCII信息参见附件二;

二、分析数据库服务器类型

一般来说,ACCESS与SQL-SERVER是最常用的数据库服务器,尽管它们都支持T-SQL标准,但还有不同之处,而且不同的数据库有不同的攻击方法,必须要区别对待。

1、 利用数据库服务器的系统变量进行区分

SQL-SERVER有user,db_name等系统变量,利用这些系统值不仅可以判断SQL-SERVER,而且还可以得到大量有用信息。如:

① HTTP://xxx.xxx.xxx/abc.asp?p=YY and user>0 不仅可以判断是否是SQL-SERVER,而还可以得到当前连接到数据库的用户名

②HTTP://xxx.xxx.xxx/abc.asp?p=YY&n ... db_name()>0 不仅可以判断是否是SQL-SERVER,而还可以得到当前正在使用的数据库名;

2、利用系统表

ACCESS的系统表是msysobjects,且在WEB环境下没有访问权限,而SQL-SERVER的系统表是sysobjects,在WEB环境下有访问权限。对于以下两条语句:

①HTTP://xxx.xxx.xxx/abc.asp?p=YY and (select count(*) from sysobjects)>0

②HTTP://xxx.xxx.xxx/abc.asp?p=YY and (select count(*) from msysobjects)>0

若数据库是SQL-SERVE,则第一条,abc.asp一定运行正常,第二条则异常;若是ACCESS则两条都会异常。

3、 MSSQL三个关键系统表

sysdatabases系统表:Microsoft SQL Server 上的每个数据库在表中占一行。最初安装 SQL Server 时,sysdatabases 包含 master、model、msdb、mssqlweb 和 tempdb 数据库的项。该表只存储在 master 数据库中。 这个表保存在master数据库中,这个表中保存的是什么信息呢?这个非常重要。他是 保存了所有的库名,以及库的ID和一些相关信息。

这里我把对于我们有用的字段名称和相关说明给大家列出来。name //表示库的名字。

dbid //表示库的ID,dbid从1到5是系统的。分别是:master、model、msdb、mssqlweb、tempdb 这五个库。用select * from master.dbo.sysdatabases 就可以查询出所有的库名。

Sysobjects:SQL-SERVER的每个数据库内都有此系统表,它存放该数据库内创建的所有对象,如约束、默认值、日志、规则、存储过程等,每个对象在表中占一行。

syscolumns:每个表和视图中的每列在表中占一行,存储过程中的每个参数在表中也占一行。该表位于每个数据库中。主要字段有:

name ,id, colid :分别是字段名称,表ID号,字段ID号,其中的 ID 是 刚上我们用sysobjects得到的表的ID号。

用: select * from ChouYFD.dbo.syscolumns where id=123456789 得到ChouYFD这个库中,表的ID是123456789中的所有字段列表。

三、确定XP_CMDSHELL可执行情况

篇2:教你学会怎样升级到SQL Anywhere10(10)

升级QAnywhere

欲升级QAnywhere应用,您可升级统一数据库、应用和客户端消息存储,

要升级统一数据库,请参看前述文档。

请认真阅读新版本的新功能与行为变更以升级您的应用。

升级QAnywhere 消息存储

1、部署QAnywhere文件。

2、升级消息存储:

使用-su 或-sur选项来启动QAnywhere代理。

升级UltraLite

当升级较早版本的UltraLite 时,您必须考虑需要的数据库和应用代码升级路径。

与已有软件兼容

·UltraLite 10 运行时与UltraLite 10 引擎不能与较早版本的UltraLite数据库文件与应用代码工作

·UltraLite 10将不支持从客户端应用至除UltraLite版本10 之外的其他UltraLite版本数据库连接

·在Sybase Central 中提供了以下管理较早版本的数据库和客户端应用功能:

o 完整管理版本10数据库。不能管理较早版本的数据库。

o 仅能连接至版本5、6、7、8 或9的数据库来升级数据库文件格式,

o 能通过移植C++ API 向导为版本7、8 或9的C/C++应用源文件升级。

如果您的计算机上有多个版本的SQL Anywhere,您必须注意UltraLite实用工具的系统路径。

升级UltraLite数据库

如欲升级更早版本的UltraLite数据库,需要您:

·同步数据

·断开所有应用和管理工具

·将数据库拷贝至计算机

注意:

在升级前,您不能用UltraLite 10 管理工具连接早期版本的数据库。

数据库升级的特殊考虑

·UltraLite模式现在不以单独的.usm文件存在,而成为了数据库的一部分。这意味着如不连接到数据库,则不能创建一个新的数据库。应用必须部署一个初始化的数据库或使用新的CreateDatabase功能编程创建一个数据库。

·文件格式在版本10 中也得到了统一。这意味着绝大多数平台能共享同一个数据库,不再需要Unicode字符。

如果需要使用您的排序方式中不包含的字符,您需要将数据库编码为UTF-8。

Windows CE和桌面数据库

如果您从以上两个平台升级,而且不需要Unicode字符,则不需要UTF-8 编码数据库。

UTF-8 编码可能造成数据库不必要的膨胀。

·在新创建的版本10数据库中,无论数据库大小写敏感与否,所有的密码都是大小写敏感的。所以,用户名、密码等在数据库升级时可能不被保留。您必须添加用户名、密码到UltraLite 10数据库中。DBA的缺省新密码为sql。

篇3:教你学会怎样升级到SQL Anywhere10(11)

UltraLite数据库升级路径

因为可使用多种不同的方法创建UltraLite数据库,所以升级过程也可能相应不同,下表列出了要升级数据库的方法。

如果需要升级较早版本的:

· 模式文件(.usm)

·数据库文件(.udb)

· Palm OS数据库记录(.pdb)

使用此工具:

升级数据库向导或卸载旧版数据库工具(ulunloadold)与加载数据库工具(ulload)

如果需要升级较早版本的:

从SQL Anywhere数据库映射的UltraLite数据库(确保您已升级了SQL Anywhere数据库)

使用此工具:

抽取数据库向导或初始化数据库(ulinit)

UltraLite数据库升级工具

可使用升级数据库向导或升级旧版数据库实用工具升级已有的UltraLite数据库或模式。

· 如果您希望一步一步完成并从中得到有关选项和属性的帮助,请选择向导工具。

· 如果您有以下的需求,请选择实用工具:

o 仅需要将命名表升级至新数据库中

o 需要执行批处理流程

在Sybase Central中将已有的UltraLite数据库升级到版本10

1、请认真阅读升级中的重要事项

2、通过选择“开始”>“程序”>“SQL Anywhere 10”>“Sybase Central”来启动Sybase Central

3、通过选择“工具”>“UltraLite”>“升级数据库”来升级数据库,

出现升级数据库向导。在继续之前,确保您已经确定:

源。您可选择数据库或模式文件之一为源。

升级数据库的输出。您可选择:

i. 新UltraLite数据库。选择此选项来创建一个数据库并连接。

ii. 已有UltraLite数据库。选择此选项通过SQL Anywhere参照数据库来改变某些数据库属性或排序方式。确保所选择的字符集和排序方式适合于已有的UltraLite数据库和其内部模式。

4、选择合适的选项来升级源:

旧版数据库。浏览选择UltraLite数据库(*.udb 或*.pdb)。

旧版模式文件。浏览选择UltraLite 模式文件(*.usm)。

5、连接您选择的文件然后点击“下一步”。

6、选择目的输出:

新数据库。必须创建一个新数据库文件然后设置需要的属性。请按照向导的指示步骤完成。

使用已经连接的数据库。可从提供的列表中选择一个已连接的数据库。

使用还未连接的已有的数据库。点击数据库,打开连接对话框并连接到已有的UltraLite数据库。

7、按照向导指示可选择相关的输出地址。

8、点击结束以升级数据库。

9、如果升级前的UltraLite数据库拥有用户,如果您在新创建的数据库中没有发现他们,请记住务必添加。

篇4:教你学会怎样升级到SQL Anywhere10(15)

UltraLite应用代码升级工具

您可使用C++ API 移植向导来帮助移植通过ulgen 生成的C/C++源代码,向导帮助鉴别在版本10 标准中不再支持的嵌入式SQL。如果您不能完成移植过程,您可停止并将修改过的SQL 语句保存在一个*.uag文件中。

如果这是您第一次使用该向导,表和语句将源于SQL Anywhere参照数据库。在后续的迭代过程中,您可使用保存的*.uag文件替代。

在Sybase Central 中移植UltraLite C/C++ API

1、请认真阅读软件升级中的重要事项。

2、确保您已经升级已有SQL Anywhere数据库并根据UltraLite的使用情况来准备它。如果需要升级发布,请确保在重建UltraLite数据库之前完成。

3、确保您已升级UltraLite数据库。否则您需要从SQL Anywhere参照数据库中抽取UltraLite数据库。

4、通过“开始”>“程序”>“SQL Anywhere 10”>“Sybase Central”启动Sybase Central。

5、选择“工具”>“UltraLite”>“移植C++应用”来移植C/C++应用API。

6、在源SQL 语句页面上,选择被读取的语句和表。

如果这是您第一次运行该向导,选择并连接到参照SQL Anywhere数据库。

否则,你可以通过选择读取先前输出文件向导打开之前创建并修改过的*.uag文件。

7、根据您选择的代码,按照向导的指示进行并验证所有SQL 语句。无效的语句会在语句名字

旁有红X。

为了修正无效的SQL 语句:

a. 选择一个无效的语句,

b. 在文本框内修正语句。

c. 点击验证所有SQL 语句。

如果语句被验证有效,会在列表的末端出现并在语句名旁出现绿色的对勾。可随时点击取消将改变保存至.uag文件并推出向导。

升级SQL Remote

如果从版本6或者更新的版本升级已有的SQL Remote安装,你必须先升级每个数据库服务器然后再升级其消息代理(dbremote)。可以用任何顺序升级消息代理。

·升级数据库。必须通过卸载和加载数据库来升级数据库格式。无需同时升级所有的数据库。

·软件升级可逐点进行。旧版消息代理可与版本10的消息代理交换消息。

·可分开升级消息代理和数据库服务器。可在升级消息代理前升级数据库服务器。但是,鉴于性能因素,我们建议您同时升级消息代理。

·升级Adaptive Server Enterprise 统一数据库。SQL Remote 不再支持ASE 统一数据库。

如需与ASE数据库同步,您需要使用MobiLink。

从版本5的SQL Remote安装升级

SQL Remote的安装包括一个统一数据库和许多远程数据库,每个远程数据库上都有一个消息代理。

在每个站点,消息代理负责发送和接收消息。消息以SQL 语句的形式存在,数据库服务器负责真正执行SQL 语句。

以下是升级SQL Remote的需求:

·升级数据库。通过卸载和加载来升级数据库文件格式。

·软件升级可逐点进行。版本5的消息代理可与版本10的消息代理交换消息,条件是只要压缩数据库选项被设置为-1。不必同时进行升级。

·可分开升级消息代理和数据库服务器。消息代理是嵌入式SQL应用。因此,数据库服务器能在消息代理升级前升级,只要使用了兼容库。但是,鉴于性能因素,我们建议您同时升级消息代理。

篇5:教你学会怎样升级到SQL Anywhere10(13)

在命令行中从SQL Anywhere参照数据库初始化/抽取UltraLite数据库

1、请认真阅读软件升级中的重要事项,

2、确保系统路径中UltraLite版本10的实用工具在之前版本的实用工具前。

3、确保您已经升级已有SQL Anywhere数据库并根据UltraLite的使用情况来准备它。如果需要升级发布,请确保在重建UltraLite数据库之前完成。

4、开启一个命令行终端并运行初始化数据库实用工具(ulinit)以抽取UltraLite数据库。请使用以下语句:

ulinit -a “SAconnection-string”

-c “ULconnection-string”

-n pubname [ options

确保您已经:

· 提供了SQL Anywhere 参照数据库和新UltraLite数据库的连接字符串。

· 命名的发布包含了UltraLite数据库需要的表。如需要抽取所有的表,请使用-n*。

其他选项请按需决定。

之前版本的UltraLite 应用必须使用版本10的API 重生成。这些API 在底层做了重大提升,需要您首先更改代码,然后重新生成应用。

在开始之前,请务必确保您已经认真阅读了UltraLite 新功能以确认需要如何修改您所使用的API。

将UltraLite 应用的代码移植至版本10

特殊应用升级考虑

· 需要更新连接代码。对于大多数的API 来说,您可能需要使用连接参数控件。只有

UltraLite for AppForge 需要您使用新控件。例如,在UltraLite for MobileVB版本9.x的项目中,ULDatabaseManager *WithParms 方法中携带的ULConnectionParms 对象不再被支持了。您必须重写代码,使用ULConnectionParms.ToString方法来替代。

连接参数控件方便地组合了一系列的连接参数,

UltraLite运行时则将组合的参数转换为字符串。除了UltraLite for AppForge API之外的其他API,您仍能使用连接对象。虽然如此,连接参数控件提供了更好的诊断连接字符串的错误。请参看UltraLite 文档来了解详细信息。

· UltraLite 模式现在已经被集成至数据库表中,不再是单独的.usm 文件。这意味着您不能使用该文件在设备上创建数据库。新的数据库创建函数/方法已被加入。但是,该方法可能增加应用的大小。为了避免应用膨胀,请现在桌面上使用管理工具创建数据库然后再将其部署至应用中。

· 在本版本中,UltraLite 总是让验证生效并最多支持到4个用户ID和密码。但是,如果不需要在数据库中保留验证,则不要创建或提供用户ID和密码。如果没有提供用户名和密码,则UltraLite 缺省提供UID=DBA、PWD=sql。

·版本10的UltraLite for AppForge 组件替代了之前版本的UltraLite for MobileVB。您在同一台机器上不能使用多个版本的组件。否则,AppForge不能编译VB项目并产生以下错

误:

“Error importing ulmvbctl9.dll. Unable to load”

因此,您必须卸载9.x版本的组件。

另外,如果用户在其设备上有9.x UltraLite的UltraLite for Mobile VB 客户端,则必须先卸载然后再安装使用版本10的UltraLite for AppForge 客户端。

· 如果有多个嵌入SQL 文件,必须继续逐个使用SQL 与处理(sqlpp)生成C/C++源文件。

UltraLite数据库现在直接支持嵌入式SQL。

· 对Unicode的支持与原来的版本不同。版本10数据库使用UTF-8编码方式来为多字节字符编码。这样,您不再需要为运行在非Unicode运行时环境的Unicode数据库而计划。

篇6:教你学会怎样升级到SQL Anywhere10(12)

在命令行中升级已有UltraLite数据库至版本10

1、请认真阅读升级中的重要事项

2、确保系统路径中UltraLite 版本10的实用工具比较早版本的UltraLite实用工具在前

3、打开命令行终端,并使用以下命令运行卸载旧版数据库工具(ulunloadold)来创建一个XML的中间文件:

ulunloadold -c “connection-string” [ options ] xml-file

确保您已经:

o 命名了ulunloadold实用工具将要创建的XML文件

o 在连接串(connection-string)中使用DBF 或模式文件,依靠您想要升级旧版UltraLite数据库(*.udb 或*.pdb)或旧版UltraLite模式文件(*.usm),

可自己确定其他参数。

4、执行加载XML数据库实用工具(ulload)将XML加入新的或已有的UltraLite数据库中。

如果欲将XML加载至一个新数据库中,-c 连接串选项设置为新数据库的连接参数(例如,UID和PWD 等)。

根据您是否改变字符集和属性来设置-o 扩展选项(例如,将大小写敏感数据库变为大小写不敏感数据库)。

例如,升级名为dbschema8.usm的UltraLite 8.x模式文件至一个名为db.udb的已有UltraLite 版本10数据库中,XML中间文件的名为dbschema.xml。命令如下:

ulunloadold -c schema_file=

dbschema8.usm dbschema.xml

ulload -c DBF=db.udb dbschema.xml

初始化/抽取工具

可使用抽取工具向导或初始化数据库实用工具(ulinit)从版本10的SQL Anywhere数据库中抽取出UltraLite数据库,

提醒:

将参照数据库的属性设置为UltraLite 需要的属性。生成的UltraLite数据库同SQL Anywhere参照数据库的属性一致。通过在参照数据库中设置这些选项,你也能控制UltraLite数据库的行为。

·如果您想在向导下逐步进行,并希望得到相关属性和选项的帮助,请选择向导工具。

·如有以下需求,请选择实用工具:

只需要在新数据库中升级命名表需要实施批量过程

在Sybase Central中从SQL Anywhere 参照数据库中初始化/抽取UltraLite数据库

1、请认真阅读软件升级中的重要事项。

2、确保您已经升级已有SQL Anywhere数据库并根据UltraLite的使用情况来准备它。如果需要升级发布,请确保在重建UltraLite数据库之前完成。

3、通过“开始”>“程序”>“SQL Anywhere 10”>“Sybase Central”启动Sybase Central。

4、通过选择“工具”>“UltraLite”>“抽取数据库”来从SQL Anywhere数据库中抽取UltraLite数据库。

5、遵循向导步骤完成初始化/抽取。

篇7:教你飞速学会手工注入

现在的 界,手工脚本入侵十分的流行,不管是老鸟还是新起步的小菜,都会为它那巨大的威力和灵活多变的招式所着迷!

正是因为注入攻击的流行,使的市面上的注入工具层出不穷!比较出名的有小竹的NBSI、教主的HDSI和啊D的注入工具等等!这大大方便的小菜们掌握注入漏洞!可是,工具是死的,注入的手法却是活的,能否根据实际情况灵活地构造SQL注入语句,得到自己想要的信息,是[被屏蔽的不受欢迎关键词]高shou 与小菜的根本区别!只用工具,而不去管它的原理,是不可能得到提高的,当然,在遇到一些特殊情况的时候,那些只会用工具的小菜们也只能放弃了!所以学会手工注入自己构造SQL注入语句是一个 爱好者必上的一堂课!我希望这篇文章能够给那些还不会手工注入的朋友一点启发!帮助大家早日摆脱工具,早日踏入 [被屏蔽的不受欢迎关键词]高shou的行列!

恶补基础:

要想学会手工注入,有一个名词是不得不提的,那就是数据库系统!

1。简介

数据库系统分为数据库和数据库管理系统!数据库是存放数据的地方,数据库管理系统则是管理数据库的软件!数据库中数据的存储节构叫数据模型!有四种常见的数据模型,分别是层次模型、网状模型、关系模型和面向对象模型。其中关系数据模型是最主要的数据模型,ACCESS、MSSQL、ORACLE等都是关系模型数据库系统。其中以ACCESS、MSSQL数据库系统最为常见!这些都是理论的知识,希望大家理解!

2。基本概念

表:表是一个关系数据库的基本组成元素!它按行与列组合排列成相关信息。通常行称为记录,列称为域。每个域称为一个字段!每一条记录都由多个字段组成。每个字段的名字叫做字段名,每个字段的值叫估字段值。表中的每一行即每一条记录都拥有想同的结构!

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时页面的样子不一样),就可以证明这个页面存在注入漏洞。比如:

www.xxx.com/a.asp?id=7,这个网页,我们在后面加上 and 1=1(两个空格,and前面一个,and和1=1之间一个!),网址就变成了

www.xxx.com/a.asp?id=7 and 1=1,用IE打开这个网页,返回正常!再尝试在后面加上and 1=2,网址就变成了

www.xxx.com/a.asp?id=7 and 1=2,同样用IE打开这个网页,返回错误!这就说明这个网页www.xxx.com/a.asp?id=7存在注入漏洞,是一个注入点!(存在注入漏洞的网页叫注入点!)  可是,并不是所有的页面都可以这样判断,有的页面不管你加入 and 1=1 还是 and 1=2,返回的都是错误的页面,难道这样的页面就没有注入漏洞吗?不一定!比如这个页面:www.xxxxxx.com/b.asp?id=ade7, 不管我们在后面上的是and 1=1还是and 1=2,它都返回错误的页面!这个时候我们就要尝试用另一种方法来测试漏洞了,这种方法可以说是and 1=1和and 1=2的变种方法。原来的网址是这样的:www.xxxxxx.com/b.asp?id=ade7,现在我们把它变成这个样子:www.xxxxxx.com/b.asp?id=ade7' and '1'='1 ,用IE打开它,看看返回正不正常!如果正常,那就可以接着用这个地址来进一步测试漏洞是否存在(如果返回不正常那这个页面就很有可能不存在注入漏洞!):www.xxxxxx.com/b.asp?id=ade7' and '1'='2 ,用IE打开这个网址,如果返回错误的话,那这个网址www.xxxxxx.com/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。在注入点后直接加上单引号。有的时候我们可以根据服务器报错的信息来判断它用的是什么数据库。通过这个错误信息我们可以看出来这个注入点所连接的数据库的类型是ACCESS,为什么呢,仔细看!它说的是Microsoft JET Database Engine e` '80040e14' ,说明是通过JET引擎连接数据库,而不是ODBC!如果是用JET方法连接的话就说明用的是ACCESS数据库,如果是ODBC的话就说明数据库是 MSSQL!这个记住就行了。其实还有详细的错误信息,它直接把数据库的类型告诉你了!因为我没有找到这样的注入点,这里就截不了图了。大家遇的  B。在注入点后加上(注意,你先确定了它是注入点后再加,不是注入点你加了也没用!): ;--(一个分号,两个横线!)比如这个网址

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

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

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

C。用以上方法都判断不出来的话,那可以用这一招!利用ACCESS和MSSQL数据库的差异来进行判断!要用到两个查询语句!同样,如果注入点是www.xxxxxxxx.com/article/as.asp?id=875,那我们在后面加上 and exists (select count(*) from sysobjects),那么地址就变成了

www.xxxxxxxx.com/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)。就成了

www.xxxxxxxx.com/article/as.asp?id=875 and exists (select count(*) from msysobjects),按刚才理解MSSQL数据库的方法去理解这条语句!这里要注意,提交这个语句是不会返回正常页面的!就算是ACCESS数据库也不会返回正常的页面!因为默认情况下,我们是没有权限查询这个表里的数据的!不过WEB会提示我们 “记录无法读取;'msysobjects'没有读取权限”!如果返回的是这个错误信息的话,那就证明是ACCESS数据库了!!简单地来说就是两条查询语句:

and exists (select count(*) from sysobjects)

and exists (select count(*) from msysobjects)

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

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

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

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

A。猜表!

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

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

B。猜列!

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

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

C。检测记录数

用到的语句:and (select count(*) from 猜到的表名)>X (X是个数字)。在注入点后加上这句话,并不停地变换X这个数字,直到猜到准确的记录数为止!比如www.xxxxxxxx.com/article/as.asp?id=875 and (select count(*) from admin)>2 ,这个句子是猜admin表里有几条记录的,也就是有几个管理员(因为一个管理员对应一条记录嘛!)。如果返回正常,说明admin这张表里的记录数大于 2。这个时候我们把2改成别的大一点的数!比如5,如果返回错误,说明管理员的个数在2和5之间,2和5之间的整数是3和4,这个时候我们变换语句为www.xxxxxxxx.com/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的变换方法上面的一样!

篇8:教你学会怎样升级到SQL Anywhere 10(2)

使用实用工具

如果您的电脑上安装了多个版本的SQL Anywhere,在您使用实用工具时必须注意您的系统路径,因为安装会将最新安装版本的可执行目录追加至您的系统路径中,可能您安装了新版本的软件,但不经意地使用着老版本的实用工具。

有5个途径可确保您使用版本10的实用工具:

·修改系统路径以便SQL Anywhere 10 可执行目录在任何其他版本的可执行路径之前。

·在命令行下切换至SQL Anywhere 10的可执行目录。

·在运行实用工具时指定完整的路径名。

·可创建脚本更改您的环境,以便使用正确版本的实用工具。

·卸载旧版软件。

快速升级

以下步骤总结了升级至SQL Anywhere 10的主要步骤:

若使用命令行来升级数据库:

1、备份数据库。例如:dbbackup -c “DBF=mydb.db;UID=DBA;PWD=sql” old-db-backup-dir (注意,确保您使用的是正确版本的备份工具)。

2、如果需要,请整理磁盘碎片。磁盘碎片容易导致数据库性能下降。

3、关闭所有SQL Anywhere 和Adaptive Server Anywhere数据库服务器因为版本10的卸载实用工具不能针对正在运行的数据库。例如:

dbstop -c

“DBF=mydb.db;UID=DBA;PWD=sql”,

4、卸载旧版数据库并加载至一个新的版本10数据库。例如:

dbunload -c

“DBF=mydb.db;UID=DBA;PWD=sql”

-an mydb10.db -o dbunload_log_mydb.txt。

5、关闭新数据库并执行备份。例如:

dbstop -c “DBF=mydb10.db;UID=DBA;PWD=sql”

dbbackup -c “DBF=mydb10.db;UID=DBA;PWD=sql” new-db-backup-dir

升级中的重要事项:

在升级前,请务必注意您应用中的以下事项,它不仅实用于升级SQL Anywhere:

·查看行为变更。阅读文档,确定版本10的行为变更不会影响到您的应用。如果有一定影响,也请相应升级您的应用。参看SQL Anywhere 文档之SQL Anywhere的改变和升级。

·测试应用。在真正投入生产环境前,必须完整地测试应用。

·使用正确版本的实用工具。如前所述,您必须使用正确版本的使用工具。

·验证并备份数据库。为已有软件的数据库进行验证并备份。另外,在数据库升级期间不能进行恢复,在升级后立即备份数据库能确保数据库的良好可恢复性。

·升级前同步。若欲升级的数据库是同步环境的一部分,例如UltraLite数据库或在MobiLink 安装中的SQL Anywhere远程数据库,必须在升级前成功执行同步。

·测试升级过程。请在真正升级前仔细测试升级过程。

因为SQL Anywhere 实际用在许多不同配置下的环境中,所以我们不能保证升级指南能确保所有的数据库成功升级。

深入浅出的意思是什么

ideacms文章管理系统漏洞及修复

网店优化论文

NFS服务器安全的解析和解决

手把手教你写好个人简历

常用工具( 入侵工具)

web前端开发实训总结

三大措施设置数据库安全 保障网站安全运营

有关后门的知识详解 武林安全网

大学生计算机专业职业规划书

教你怎样学会SQL注 入
《教你怎样学会SQL注 入.doc》
将本文的Word文档下载到电脑,方便收藏和打印
推荐度:
点击下载文档

【教你怎样学会SQL注 入(共8篇)】相关文章:

闪存博客SQL注入脚本安全2023-09-01

教你开家婴儿用品超市2022-08-04

Cookies欺骗的艺术2023-09-24

计算机专业大学职业生涯规划书2023-02-25

waf绕过:mysql注入waf绕过技巧脚本安全2023-04-04

KMCT分页控件与存储过程分页完美结合存储过程分页篇2022-12-24

Geeklog SECauthenticate函数SQL注入漏洞2022-12-16

利用instr函数防止SQL注入攻击2022-04-29

3389新思路 SQL渗透的一些技术2022-09-09

securytas.ro sql 注入2022-05-07

点击下载本文文档