什么是SQL注入?
SQL注入就是将恶意的SQL命令注入到后台数据库引擎执行的攻击,通过在Web表单中输入恶意的SQL语句得到一个存在安全漏洞的网站上的数据库,而不是按照设计者意图去执行SQL语句,从而进一步得到相应的数据信息。简而言之就是说攻击者用一些恶意的SQL语句进入到不严谨的数据库中进行操作。SQL注入攻击是一直是最受欢迎的Web应用程序漏洞攻击之一。
原理
在POST/GET
表单、输入域名或URL
的查询字符串中插入恶意的SQL命令,从而绕过PHP等脚本的不严谨导致的漏洞,与数据库进行交互,最终使WEB服务器执行恶意命令的过程。
步骤
1、判断交互方式
在进行SQL注入时,我们需要知道是客户端使用什么方式与服务器进行交互的,一般是使用:get
,post
1、寻找注入点,进行猜测注入,打破构造
通过SQL语句进行测试注入,找出网页的语言漏洞,个人感觉这是最关键的一步。
若不执行,说明注入是失败
若报错,说明语句可能有效
若执行语句并返回预计值,说明注入成功
常见的闭合有:''
,""
,()
,('')
,("")
,[]
,{}
2、注入成功后,使用SQL语句进行数据库信息采集
这一步就是需要熟悉SQL语句,从而查询数据库的基本信息
比如:寻找显示数据多少,数据库名称,数据库的表,数据库的列等等
判断列数:
select 语句 order by+预计的列数(可以使用二分法)--这个原来的意思是用来对列数的数据进行排列的,但是当输入的数字超出列数时就会报错
查询所有数据库名:
show databases; --不在注入时候用一般用下面两个
#或者
select schema_name from information_schema.schemata
#或者
select distinct table_schema from information_schema.columns
#或者
select distinct table_schema from information_schema.tables
查询所有列名:
select distinct column_name from information_schema.columns
查询所有表名:
select distinct table_name from information_schema.columns
#或者
select distinct table_name from information_schema.tables
常见函数:
select system_user()--系统用户名
select user()--用户名
select current_user()--当前用户名
select session_user()--连接数据库用的用户名
select database()--数据库名
select version()--mysql数据库版本
select load_file(路径)--mysql读取本地文件的函数
select @@datadir--数据库路径
select @@basedir--mysql安装路径
select @@version_compile_os--操作系统
注意:如果感觉内容过少可以使用group_concat(搜索的值),就是将行和列互换,–+中的+表示空格
3、当得到数据库信息后,我们就可以继续收集用户名和密码
这里就需要依靠第二步所使用到的信息进行查询了。当拿到管理员的用户名和密码后,就是基本无敌了。
4、在对网页搜索表单填写,从而进入WEB服务器里面,进行任意操作
知道用户名和密码后,就得要进入数据库,那么我们就需要知道在网页的哪里去输入用户名和密码,从而进入数据库。