SQL注入的原理分析

拜拜、爱过 提交于 2019-12-30 19:11:35

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编码】
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!