1.注入漏洞
A:介绍
注入漏洞十分普遍,通常出现在SQL、LDAP(轻量级目录访问协议,Lightweight directory access protocol)、XPATH(xml路径语言)或是NoSQL(非关系型数据库)查询语句中,OS命令,XML解释器,SMTP包头,表达式语句以及ORM查询语句中找到
B:原理
以SQL注入为例子,SQL注入的原理在于攻击者通过构建特殊的输入作为参数传入web应用程序,通过执行SQL语句进而执行攻击者想要的操作。
C:分类
以SQL注入为例子,从原理上来分,可以分为平台层和代码层注入,前者主要是不安全的数据库配置或数据库软件漏洞所致,后者主要是代码层未对用户输入进行验证、过滤和净化所致。
从注入漏洞分类可分为数字型,字符型,搜索型,cookie注入等。。。。
1.数字型:
即注入参数为数字型参数,如id=1,简单测试方案如下:
www.xxxxx.com/test.php?ID=2 '测试页面是否出现异常
www.xxxxx.com/test.php?ID=2 and 1=1测试页面是否和原始数据一样
www.xxxxx.com/test.php?ID=2 and 1=2 返回数据始终为假
2.字符型:
字符型诸如级注入参数为字符型,字符型和数字型最大的区别是字符型往往要处理单引号闭合,数字型不用。
3.cookie注入和post注入主要都是在网络包头字段进行注入(闭合绕过或者其他的),在这方面可以用sqlmap来跑,更新一点SQLMAP的知识。
sqlmap -uz 之后还可以加很多参数,这点需要多多练习。
4.盲注概念及其理解:
盲注说白了就是不会根据你所注入的攻击语句返回你想知道的错误信息,具体可分为两种:
A:布尔盲注:即基于布尔值逻辑真假来返回,只会返回true or false,不会返回你想知道的信息。
B:时间盲注:根据web页面返回的时间差来判断注入的语句是否正确。
C:基于错误盲注:如果利用错误提示信息,对SQL拼接方式做猜测并验证,这种方法称为基于错误信息的SQL盲注。
常用的盲注数据库函数:
Length()函数 返回字符串的长度
Substr()截取字符串
Ascii()返回字符的ascii码
sleep(n):将程序挂起一段时间 n为n秒
if(expr1,expr2,expr3):判断语句 如果第一个语句正确就执行第二个语句如果错误执行第三个语句。
测试实例可参考:https://www.jianshu.com/p/65f05e7cc9574
D:SQL注入的防护措施:
1.客户端控件限制用户输入长度,过滤敏感字符串。
2.服务器检查净化用户输入。
3.不采用动态拼接手段构造查询语句。
4.基于最小权限运行。