SQL--筹备常识 && union联结注入
本文章仅为网络安全爱好者的学习笔记,咱们应该用这些常识晋升平安技能,独特保护网络空间的平安,请读者肯定要恪守法律法规,咱们有一套残缺的网络安全法和刑法。
1.筹备常识
sql注入罕用函数
这是笔者看i春秋相干课程时所做的总结笔记
sql注入流程
结尾两张图片列出的是在sql注入中常常用的的一些函数,当前这些函数会呈现在很多数据库安全攻防场景中,尽管目前有许许多多的自动化注入工具,但咱们还是要理解最根本的手工注入,以便为了了解SQL注入的原理,从而对其进行平安剖析和加固
2.注入流程
咱们能够把注入流程分为这几个阶段:
- 1.判断是否有注入(其实就是判断后盾的校验严格与否)第一因素
1)可控参数的扭转是否能影响页面显示后果
2)输出的SQL语句是否能报错-能通过数据库的报错,看到数据库的一些语句痕迹
例如:Select username, password from user where id = ?’
输出一个单引号’:如果是整型或者id被单引号包裹着的会报错,如果是双引号可能就不会
3) 输出的SQL语句是否不报错-咱们的语句可能在后盾被胜利的拼接,闭合
个别的验证:
1.单引号’ 2.and 1 = 1 3.and 1 = 2
证实以后的id是与数据库交互的,可能存在sql注入破绽(这个建设在以后环境没有防护软件;如果没有软件,那么就能够确定以后页面存在注入破绽)。
- 2.判断注入的类型
- 3.语句是否可能被歹意批改
- 4.咱们的邪恶语句能不能被胜利执行
- 5.获取咱们想要的数据
数据库-->表-->字段-->值
3.union联结注入
UNION操作符用于合并两个或多个SELECT语句的后果集。
留神,UNION 外部的SELECT语句必须领有雷同数量的列。列也必须领有类似的数据类型。同时,每条SELECT语句中的列的程序必须雷同。
默认状况,UNION 操作符选取不同的值。如果容许反复的值,请应用UNION ALL。
SELECT column_name(s) FROM table_name1UNIONSELECT column_name(s) FROM table_name2
union注入利用的前提:
页面上必须要有显示位
上面我将把union注入详解介绍一下,还是和下面说的注入流程一样,只是加了一点细节
1:判断是注入类型。(因为单双引号或没有会影响到闭合)
判断是否用'做字符串引号
url:.../?id=1'and 1=1 --+
如果出错代表没有闭合胜利,阐明可能没有用' ,还可能用了"
--+是正文符,也能够用#和%23
2:判断查问列数(如上所说要用union,这相当于个性)
这个时候就要用到order by命令
order by 函数 是对mysql中查问的后果依照指定字段名排序,也能够指定字段的栏位来排序。
第一个查问字段为1,第二个为2,二分法来判断列数。
比方:url:.../?id=1'order by 3 --+ //判断是否有3列失常,那就有三列或三列以上持续:url:.../?id=1'order by 4 --+ 判断是否有4列如果报错:unknown column ‘4’ in ‘order clause’阐明它输入的内容所在的数据库只有3列
3:判断查问显示位
这里了解会有点奇怪,对于初学者来说
比方 union select 1,2,3,4...from xxx
这里的数字其实就是占地位,后面判断了有几列,你这里就要占几个地位,并且这里的数字会被你要查问的字段代替,在回显中相应的地位就会变成你要的数据。比方你要是把2替换成database(),查问胜利的话会在回显中显示你以后所在的数据库名称。这里的占位其实花了我很长时间来了解,过后也没怎么了解,当初终于了解了555。
4:顺次获取数据库名,表名,字段名
就像我在第一篇外面说到的查问语句
url:.../?id=-1' union select 1,database(),3 --+
5:查问字段的数据
url:.../?id=-1' union select 1,(select group_concat(password) from security.users),3 --+
老手的话能够自行搭建靶场,这里举荐几个不错的入门靶场DVWA,
sqli-labs,值得本人在虚拟机下面搭建,而后本人进行试验。这篇文章我会后续批改一下,把我做的试验截图放上去。
这是我的上一篇文章,感兴趣的能够康康~
我的网安之路---数据库-SQL注入篇(1):
https://segmentfault.com/a/1190000023725342
下一篇文章我将会整顿sql盲注相干常识~敬请期待!
如果文章有任何忽略或谬误,请您斧正!蟹蟹!