这是0xThrL的GD师傅在学习SQL注入时候写的笔记 ,也是希望可以帮助到大家,有什么问题希望各位师傅可以指出。
前言
一、SQL注入的本质
Sql 注入攻击是攻击者通过将恶意的Sql 查询或添加语句插入到应用的输入参数中,后台 Sql 服务器上解析执行进行的攻击,说大白话就是用户输入的数据被当做SQL代码执行,但是前提是你可以自由输入。跟哪个语言的站没有关系
二、基础
1.怎么检测SQL注入
闭合(传入引号、让传入的引号和原本的引号配对、注释掉后面的引号)
经典方法
and 1=1 正确 and 1=2 错误 select *from news where id=1 and 1=1 =>如果被当做代码执行 返回正常 select *from news where id='1 and 1=1' => 如果没被当做代码 返回错误
字符串:1 and 1=1
如果数据库的字段是数字类型:强转 这是有可能会遇到的情况
所以说我们需要进行佐证:
佐证:select *from news where id=1 and 1=2 => 错误
注:了解一下就行 只要是有防护的站80%都会拦截 因为这个方法太老了哈哈哈
数字运算符法
select*from news where id=2-1
如果返回了1的值 那就是存在sql注入
+ - * / 都可以
但是有一点需要注意
GET会把+理解为空格 所以使用+就需要URL编码 %2b
2.注入思路
先假设 -> 去验证 -> 根据结果
->情况1:继续往下走
->情况2::你是错的
一直去测
单引号 >= ' 1=1 -- qwe
双引号
单引号加括号
正常情况下的闭合 => ' " ') ")
核心:如何通过SQL注入获取数据库信息(联合查询法)
union 联合查询(把两条SQL语句一起去执行)
A语句 union B语句 要注意的是这个union有一个隐形条件A语句和B语句字段相同才能使用database(); //查询库名
库、表、字段
字段相同=>B语句输出多少字段是我们可以控制
怎么知道A语句的输出究竟有字段 order by
order by 3 没数据 order by 2 有数据 => 2个字段 union select 1,2
排序(正常情况下开发一般只会输出第一条数据)
怎么判断哪里也有一个用数字判断的方法我没写,各位师傅自己去学吧哈哈
总结
以上就是GD师傅今天要跟大家分享学习SQL注入的笔记,如果文章有问题希望师傅们指出。