原因:
首先从语言分类来介绍吧(有点难理解,多读几遍)
语言分为两类:分为解释型语言 and 编译型语言。
解释性语言是一种在运行时由一个 “运行组件” 解释语言代码并执行其中包含的指令语言(应该挺好理解吧,说的更白话点就是边运行边执行)。
编译型语言是代码在 *生成时 *,转换为机器指令,然后在 运行时 直接由使用该语言的计算机执行这些命令。也就是说在运行编译型语言的时候直接双击打开不需要重新编译,(把他想象成C语言,用coldblock,写出来的推箱子游戏)与解释型语言的不同就是编译型语言是一次性完成,只运行即可。
问题来了!!!!在解释型语言中,如果程序与用户进行交互。用户可以构造***特殊的输入***来拼接到程序中执行,从而使得程序依据用户输入然后执行有可能存在恶意行为的代码。
例如:在与用户交互的程序中,用户的输入拼接到SQL语句中,执行了与原定计划不同的行为,从而产生了SQL注入漏洞。
因为用户输入的内容可以使SQL语句中的关键字,以及符合SQL语句结构的语句,所以SQL产生的两个前提:1:用户必须可以输入并且输入内容是用户可以控制的。2: 输入之后,输入内容不在程序中执行或者拼接到SQL语句中那么就不会产生任何危害,那么这时候第二点的前提,也就是说我们输入的内容必须跟数据库产生交互,一定会拼接到SQL语句中并且执行,且没有防护措施就产生了SQL注入漏洞。
案例:假如企业家用的的某个员工签到程序存在SQL漏洞,需要输入员工ID(账号)跟 老板给的每天系统自动生成的进行密码签到(每个人的不一样),那么员工的账号跟密码就是一个数据库,登录位置与数据库进行交互,这时候ID跟密码需要拼接到SQL语句中执行,这时候进行探测,程序是否过滤筛选了输入内容,比如过滤一些漏洞使得SQL注入无法继续执行
如图:
select*from admian where username =‘ID’ and pussword = ‘每天各自领的密码’
翻译过来就是用户名必须等于密码才能执行下一步。
这时候,员工张三发现SQL漏洞,不去公司领密码,直接签到。他直接在员工ID那一栏输 ’ or 1=1-- (–后头有个空格)
SQL:语句:select * from admian where username =’ ’ or 1=1-- ’ and pussword = ‘每天各自领的密码’
其中or 1=1 永远为真, --注后的内容不在执行,因此SQL语句执行会返回admin表中的所有内容。
平时张三在ID栏目输入“zhangsan”密码“*******”每天都不一样,这时候张三在ID栏输入"zahngsan’ or 1=1 – "密码随便输也就直接登录签到了。这就成功的绕过了系统用户名与密码的检测,只需要一个已知的ID就能签到。
’ or 1=1-- 就这个玩意也可以当成万能密码,百度一下还有一堆
1."or “a”="a
2. ')or(‘a’=‘a
3. or 1=1–
4. ‘or 1=1–
5. a’or’ 1=1–
6. "or 1=1–
7. ‘or’a’=‘a
8. “or”="a’=‘a
9. ‘or’’=’
10. ‘or’=‘or’
11. 1 or ‘1’=‘1’=1
12. 1 or ‘1’=‘1’ or 1=1
13. 'OR 1=1%00
14. "or 1=1%00
15. 'xor
扯的有点远了,下面说靶场搭建吧,就是下个东西,打开个网址,用别人写好的开始SQL漏洞闯关刷副本。网上也有不少详细的博客,搭建步骤就不多说了,说一下我遇到的问题吧
1:画圈的两个打开
2:PHP的版本用5.4.45
3:解压到WWW目录下边之后打开网址:http://127.0.01/sqli-labs-master
得到如图
点击画圈的,得到如下图就完事了
算了简单说一下搭建步骤吧
需要的工具:PHPstudy,任意压缩软件,跟sublime
第一步,下载PHP版本5.4.45
第二部,下载个安装包:sqli-labs-master点击下载
第三部,解压,放到phpstudy_pro>www>
目录下,如图
最后打开网站:http://127.0.01/sqli-labs-master
结束
pps:后续更新Python跟java的编译环境和下载方法以及攻防世界新手教程(题能刷,写博客码子是真的费时间,有当初在某中文网写网文那味了),间断更新SQL注入(别问,问就是没学完)