MSSQL注射攻击是最为复杂的数据库攻击技术,由于该数据库功能十分强大,存储过程以及函数语句十分丰富,这些灵活的语句造就了新颖独特的攻击思路。
MSSQL反弹注入
明明是SQL的注射点却无法进行注射,注射工具猜解的速度异常缓慢,错误提示信息关闭,无法返回注射结果等,这些都是在注射攻击中常常遇到的问题。为了解决以上这些疑难杂症,比较好的解决方法就是使用反弹注射技术,而反弹注射技术则需要依靠opendatasource函数支持
反弹注入:利用SQL语句,让目标的数据库来访问你的数据库,然后插入数据
让目标机器来访问攻击者所准备的数据库,且插入信息【远程连接数据库】
所以得有一个数据库
我们前面说到,MSSQL注人一反弹注入实际就是把查询出来的数据发送到我们的MSSQL服务器上,那么我们需要自己的MSSQL数据库和一个公网IP,香港云可以免费申请一个虚拟空间,然后虚拟空间中开启MSSQL然后直接使用,可以免去MSSOL安装环境并且不需要特意购置云服务器来获取一个公网IP。
http://www.webweb.com/
随便拿个邮箱然后注册就行
匿名邮箱也可以:http://24mail.chacuo.net/
登入进去后选择数据库管理的SQL Server管理创建数据库
这里在插一句MSSQL显错注入的注意事项
首先猜字段
然后联合查询,记住要写UNION ALL
然后猜输出点要使用NULL去填充
注释只有–+ (不要想着#)
sysobjects查询系统表(xtype='U‘)
syscolumns字段(id= )指定sysobjects库中表名对应id
下面展示的靶场可以显错注入也可以反弹注入
insert into 插入语句
连接通道.数据库.dbo.表
表与表之间插入数据可以一瞬间带走所有数据,字段数必须相同
Insert into很明显是插入语句然后出现了个opendatasource.
opendatasource为了方便理解,可以看理解为‘使用opendatasource函数将当前数据库查询的结果发送到另一数据
库服务器中。
语法:
OPENDATASOURCE(provider_ name,init string)
provider name
注册为用于访问数据源的OLE DB提供程序的PROGID的名称
MSSQL的名称为SQLOLEDB
init_ string
连接字符串
连接地址、端口、用户名、密码、数据库名
server=连接地址,端口;uid=用户名;pwd=密码;database=数据库名称
连接上服务器后选定数据表…把后面语句的查询结果插入到那个表里面
突然发现自己没有连接库的工具,这里就附上上课的一张截图吧,语句该这么写,然后连上数据库查看就行
下面那个SQL Server控制台应该可以演示
这里我们连接一下
先创建一个temp表。
开靶场,这里我选择一步到位了,后面的查询语句想必都很熟悉了就不一一演示了。
还是出了点小问题,没有连接器在香港云的控制台操作有点迷,但思路就是这样
靶场提示flag在admin表里,进去查。
这里通过报错注入拿到了flag
反弹注入就按着上面的思路来就行,可能是我数据库信息在opendatasource函数里面填写的有问题,导致连接没成功。
未完待续…