利用sql报错帮助进行sql注入

我们可以利用sql报错帮助进行sql注入,这里以sql server 为例:

sql查询时,若用group by子句时,该子句中的字段必须跟select 条件中的字段(非聚合函数)完全匹配,如果是select * ,那就必须将该表中所有列名都包含在group by 中;若少了哪个,就会报错,报错中会提示如下;

选择列表中的列 ‘列名‘无效,因为该列没有包含在聚合函数或 GROUP BY 子句中。

这个提示的列名是按该表中的顺序来的,这时我们可以利用这点进行sql注入中枚举所有列的工作;

先使用 select * from 表名, having 1=1

这时报错中提示的便是第一个列名,

然后 select * from 表名, group by 第一个列名

这时报错中提示的便是第二个列名,

以此类推,便枚举出所有列

类似的,同过报错提示,还可以知道许多信息,比如,查询条件中与列名实际类型不符合时,会有类型转换失败提示,如:

select * from Class
where name=3

会提示:在将 nvarchar 值 ‘高数‘ 转换成数据类型 int 时失败。

这样我们就能知道 name 列的第一行内容;

等等。

当然,数据库的报错一般情况下不会直接显示在应用界面,出现在应用界面的提示完全由程序决定;(ps:想必这也是会有错误页面的原因)!

时间: 2024-08-09 01:17:01

利用sql报错帮助进行sql注入的相关文章

mysql 更新sql报错:You can't specify target table 'wms_cabinet_form' for update in FROM clause

数据库里面有两个字段的位置不对,要把他们对调换下.因为没有数据库写的权限,需要用sql语句来实现.原来以为简单的 update table a set a.字段a=(select b字段 from table  where id=?) ,set a.字段b=(select a字段 from table where id=?) where id=? ,结果报了 这个问题 You can't specify target table 'wms_cabinet_form' for update in

转 sqlplus执行sql报错:ORA-01756:

1.sqlplus执行sql报错:ORA-01756: quoted string not properly terminated   分类: 技术 在SQLPLUS中执行SQL文件时发生错误:ORA-01756: quoted string not properly terminated 但是SQL其实是没有问题的,找了很多原因,发现可能是由于使用TOAD导出SQL insert语句,编码集的问题导致的. 首先在.bash_profile文件中添加环境变量指定编码集: export NLS_L

mysql - sql报错You can't specify target table 'table_name' for update in FROM clause

今天写了个更新数据库表的语句,本意是根据某个条件,筛选出该表某些数据之后,对这些数据进行删除操作,如下 delete from t_person where id in (select id from t_person where name = "hello"); 然而却报错: You can't specify target table 't_person' for update in FROM clause 以下这篇博客( https://blog.csdn.net/qq_2967

python3 UnicodeEncodeError错误,cx_oracle模块执行sql报错:UnicodeEncodeError: 'ascii' codec can't encode characters in position

问题描述: 写了一个执行sql的模块,引用了cx_oracle,在windows机器上完美运行,移植到Centos上就会报错, UnicodeEncodeError: 'ascii' codec can't encode characters in position 检查过程: 代码编码为utf-8,print编码为utf-8,文件编码为utf-8,服务器编码为utf-8,各种正常 定位代码报错位置,开始怀疑是sql执行成功,返回值有中文报错,但是后来通过观察,是传入sql,并没有执行成功,执行

mysql插入报错:java.sql.SQLException: Incorrect string value: '\xE6\x9D\xAD\xE5\xB7\x9E...' for column 'address' at row 1

界面报错: 日志报错: java.sql.SQLException: Incorrect string value: '\xE6\x9D\xAD\xE5\xB7\x9E...' for column 'address' at row 1 at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:129) ~[mysql-connector-java-8.0.17.jar:8.0.17] at com.mys

SQL报错注入结合sqli lab和百度杯CTF VId

0x00 背景 学习记录一下报错型的注入,经各方整理和自己总结形成. 所有的注入原理都是一样,即用户输入被拼接执行.但后台数据库执行语句产生错误并回显到页面时即可能存在报错注入. 0x01概念 报错型注入的利用大概有以下3种方式: 1:?id=2' and (select 1 from (select count(*),concat( floor(rand(0)*2),(select (select (查询语句)) from information_schema.tables limit 0,1

i春秋——“百度杯”CTF比赛 十月场——Vld(Vulcan Logic Dumper 、php opcode、sql 报错注入)

打开题目看到提示 "do you know Vulcan Logic Dumper?" ,再查看源码看到"<!-- index.php.txt ?>",访问后发现一堆看不懂的东西 这肯定就是所谓的Vulcan Logic Dumper了,先了解下相关概念 PHP内核-Zend引擎:http://www.php.cn/php-weizijiaocheng-355597.html PHP中的opcode:https://blog.csdn.net/weiyu

SQL报错注入的十余种注入方式

报错注入原理: 由于rand和group+by的冲突,即rand()是不可以作为order by的条件字段,同理也不可以为group by的条件字段. floor(rand(0)*2) 获取不确定又重复的值造成mysql的错误 floor:向下取整,只保留整数部分,rand(0) -> 0~1 本地环境搭建数据库测试注入姿势: mysql> create database sqli; mysql> create table user ( id int(11) not null auto_

SQL报错注入总结

1.Floor()报错注入 关于Floor报错注入原理可以看http://blog.51cto.com/wt7315/1891458 获取数据库 select count(*),(concat(0x3a,database(),0x3a,floor(rand()*2))) name from information_schema.tables group by name; 获取表名 select count(*),concat(0x3a,0x3a,(select table_name from i