文章开头我们先说一下“or”的作用,“or”和“and”都是用来连接两个条件,在使用“and”连接的时候必须要求两个条件都为真才会返回“true”,而在使用“or”连接的时候只要其中有一个条件为真就会返回“true”。
下面我们就开始实战分析注入点“http://www.xxxxx.com/news/meiwn.php?Type=4&id=32”,数据库使用的是MySQL。
正常访问时的页面在网址后面添加“or 11”,提交后返回了错误页面,而在网址后面添加“or 12”,提交后则返回了正常页面。
or注入分析:我在自己的MySQL里和大家分析一下原理会比较容易理解,我们先在MySQL里执行如下的语句。
No1: select title,id fro fei whre id=2;
执行结果和我们预想的一样,返回了id为2的“tltie”和“id”这两个列的值。
N02: select title,id fro fei whee id=2 or 1=1;
执行结果返回了表里的所有数据,看到这儿可能大家要问了,为什么返回的是所有的呢?在这儿我有必要说一下MySQL执行的优先级和MySQL的执行顺序以及可能对“or”存在的一些错误理解。
导致这个结果,有的朋友会以为wher先进行条件判断“or 1=1”返回为真“id=l就不判断了,就直接去select查询了,其实这是错误的。
No3: select titIe,id fro fei whee id=2 or id=1;
这句执行后的结果看圈中返回的结果大家就明白了吧,其实不管1=1返回“真”还是“假”,两边的条件都是要进行判断的。由此也可以看出SQL的执行顺序是从右到左来执行的,而且where优先于select执行,现在我们再结合是不是就比较容易理解了呢!标题“一地月色洗尘埃——亚鹏素描”就好比我们本地数据库“title”列中的“Fei a Testl”,现在大家都明白了吧。
No 4:select title,id fro fei whre id=2 0r 1=2;
执行的结果返回了和selct tile,jd frm fei whee id=2; 一样的执行结果,返回这个结果就比较容易理解了,1=2为“假”,id=2为“真”,所以就只查询匹配id=2的数据,因此我们在使用and注入效果不好的时候不妨试试or。
本文为网络安全技术研究记录,文中技术研究环境为本地搭建或经过目标主体授权测试研究,内容已去除关键敏感信息和代码,以防止被恶意利用。文章内提及的漏洞均已修复,在挖掘、提交相关漏洞的过程中,应严格遵守相关法律法规。