sql注入原理

information——schema库(MySQL>=5.0才有)
select 字段,字段 from 数据库.数据表
在不知道数据库名表名列名的情况下
select schema_name from information_schema.schemata 查找到所有数据库名;lyb
select table_name from information_schema.tables where tables_schema = "lyb"
查看lyb所有表;user message
select columns_name from information_schema.columns where table_schema = "lyb" and table_name = "user"
查看lyb中user表中的所有列
select username,password from lyb.user 查看lyb中user表中username,password信息
schemata表
字段:schema_name
查看数据库名称
select schema_name from information_schema.schemata
相当于 show databases;
tables表
字段:table_schema
table_name
查看lyb所有表
select table_name from information_schema.tables where table_shcema ='lyb'
columns表
字段:table_schema
table_name
column_name
查看lyb数据库user表的所有列名
select column_name from infotmation_schema.columns where
table_schema = 'lyb' and table_name = 'user';
原理:
用户在可控参数中注入sql语法,破坏原有的sql结构,
达到编写程序时意料之外结果的攻击行为
原因
1,程序编写者在处理应用程序和数据库交互式,
使用字符串拼接的方式构造sql语句
2,未对用户可控参数进行足够的过滤便将参数内容拼接进入到sql查询语句中
哪里可能催在sql注入
任何从客户端可控且传递到服务器的变量都有可能存在sql注入
三种注释
”-- “
/* /
/
! */

  • %2b
    “ %22
%23 ' %27
空格 %20
--+ 注释 + 在url中会被当成空格
/*/ 可以代替空格
/
! */ 内敛注释
常用函数
【sql注入原理】select user() 查看当前数据库用户

sql注入原理
文章图片
图片.png
select database是() 当前连接数据库名称
sql注入原理
文章图片
图片.png
select version() 查看当前数据库版本号
sql注入原理
文章图片
图片.png
select @@datadir; 查看当前数据库存放路径
如果是集成化环境搭建的环境 ,可以看到是用的是什么集成化环境
sql注入原理
文章图片
图片.png
select @@version_complie_os 查看当前使用的操作系统
sql注入原理
文章图片
图片.png
连接字符串的函数
concat() 无分隔符

sql注入原理
文章图片
图片.png
concat_ws() 有分隔符的
sql注入原理
文章图片
图片.png
group_concat()以逗号为分隔符查询结果为一行

sql注入原理
文章图片
图片.png

    推荐阅读