SQL注入本质
谈到SQL注入前我们先谈谈什么是注入
注入攻击的本质,是把用户输入的数据当做代码执行。
这里有两个关键条件:
第一个是用户能够控制输入
第二个是原本程序要执行的代码,拼接了用户输入的数据然后进行执行
那么什么是SQL注入,就是针对SQL语句的注入,也可以理解为用户输入的数据当做SQL语句的代码执行了
SQL注入是1998年一名叫做rfp的黑客发表的一篇文章所进入大众视线的
显错注入靶场的做法
判断注入点
最古老的方法:and1=1页面正常
and1=2页面不正常
最简单的方法:页面后面加',看是否报错
如果是数字型传参,可以尝试-1
例如:
http://www.xxx.com/new.php?id=1 页面显示id=1的新闻
http://www.xxx.com/new.php?id=2-1 页面显示id=1的新闻
and 1=1 and 1=2被拦截的可能性太高了
可以尝试 and -1=-1 and -1=-1 或者直接or sleep(5)
select *from news where id=1 and 1=2
'' // ""
只有and被当做SQL语句执行的时候才会
and 和 (两个条件都满足)
or 或 (两个条件只需要满足一个)
显错注入-联合查询(Mysql数据)的基本流程
显错注入-联合查询
是否存在注入点
猜解字段数
联合查询寻找输出点
然后去系统自带库查询表名,字段名
查询我们需要的字段的值
注入攻击通常需要闭合前面的符号,才能让后面的数值以命令执行,而不是字符串。
双引号注释 :"select *from 'news' where 'id'=".$_REQUEST["id"].";"
单引号注释:select * from 'news' where 'id' = 1;
order by 1 (排序)
group_concat //将多行数据合并一行输出,以逗号分隔
union select 将两条数据同时输出
limit 0,1[从第一行数据取一个]
limit 1,1[从第二行数据取一个]
库名,表名,字段名
database()查询当前库名
系统自带库:information_schema
系统自带表:columns
查库名:select * from information_schema.tables where table_schema='maoshe'
查表名:select*from information_schema.columns where table_schema = 'maoshe' and table_name ='admin'
URL编码:20%(空格)
%27(单引号)
%23(#,用于注释)
%22(双引号)
注释建议用--+ -- qwe
#仅仅用于mysql
html有个东西叫锚点,%23 【#URL编码】
来源:CSDN
作者:zmrbaisha
链接:https://blog.csdn.net/qq_36045214/article/details/103769663