SQL查询结果集对防注入的影响解析

一:逻辑错误

  错误提示主要有逻辑错误和语法错误以及脚本运行错误三类。

   
对于注入而言,错误提示是极其重要。所谓错误提示是指和正确页面不同的结果反馈,高手是很重视这个一点的,这对于注入点的精准判断至关重要。本问讨论下关于几类错误和他产生的原理,希望对读者有所帮助。

简单的例子是1=1 1=2这两个,1=1与1=2页面不同的原理是什么?以$sql = select
* from news where id=$_GET[id]为例。

一:逻辑错误

    错误提示主要有逻辑错误和语法错误以及脚本运行错误三类。

select *永利官网ylg客户端, from news where id=1 and
1=2产生的结果集为NULL,然后程序取值得时候,就会去出空值,无法显示。当然有的程序发现SQL执行结果集为空,就立即跳转,效果就不显鸟。值得注意的是,有的如Oracle
Postgresql的数据库在结果集为空情况下会再页面上表现字符型null字样,这算是个特点。如果使用or条件,比如

简单的例子是1=1 1=2这两个,1=1与1=2页面不同的原理是什么?以$sql =
“select * from news where id=$_GET[id]”为例。

    一:逻辑错误

select * from news where id=1 or 1=1

select * from news where id=1 and
1=2产生的结果集为NULL,然后程序取值得时候,就会去出空值,无法显示。当然有的程序发现SQL执行结果集为空,就立即跳转,效果就不显鸟。值得注意的是,有的如Oracle
Postgresql的数据库在结果集为空情况下会再页面上表现字符型null字样,这算是个特点。如果使用or条件,比如

    简单的例子是1=1 1=2这两个,1=1与1=2页面不同的原理是什么?以$sql =
“select * from news where id=$_GET[id]”为例。

和and
1=2得结果正好相反,他的结果集十分庞大。如果SQL语句如此,再加上程序是循环读取结果集(一些编程上的陋习)那么会取出所有结果,结果可能运行很慢,在数据量巨大的Oracle上容易出现。这个例子会出现什么呢,一般程序取出结果集中的第一条结果,那么很可能已经不是id=1的那条新闻了,这就是由些小菜奇怪有时候or
1=1页面会发生变化的原因。

select * from news where id=1 or 1=1

    select * from news where id=1 and
1=2产生的结果集为NULL,然后程序取值得时候,就会去出空值,无法显示。当然有的程序发现SQL执行结果集为空,就立即跳转,效果就不显鸟。值得注
意的是,有的如Oracle Postgresql的数据库在结果集为空情况下会再页面上表现字符型null字样,这算是个特点。如果使用or条件,比如

归根到底,都是结果集不同造成的,灵活掌握是关键,这并非单纯的经验问题。

和and
1=2得结果正好相反,他的结果集十分庞大。如果SQL语句如此,再加上程序是循环读取结果集(一些编程上的陋习)那么会取出所有结果,结果可能运行很慢,在数据量巨大的Oracle上容易出现。这个例子会出现什么呢,一般程序取出结果集中的第一条结果,那么很可能已经不是id=1的那条新闻了,这就是由些小菜奇怪有时候or
1=1页面会发生变化的原因。

    select * from news where id=1 or 1=1

二:语法错误

归根到底,都是结果集不同造成的,灵活掌握是关键,这并非单纯的经验问题。

    和and
1=2得结果正好相反,他的结果集十分庞大。如果SQL语句如此,再加上程序是循环读取结果集(一些编程上的陋习)那么会取出所有结果,结果可能运行很慢,在数据量巨大的oracle上容易出现。这个例子会出现什么呢,一般程序取出结果集中的第一条结果,那么很可能已经不是id=1的那条新闻了,这就是由些小菜奇怪有时候or
1=1页面会发生变化的原因。

语法错误时比较熟悉的,比如对于sql
server,PgSQL,Sybase的注入错误提示都很重要,因为利用它的特性来获取信息很快速。语法错误造成的结果可能是SQL错误而中断脚本执行,但是脚本或服务器设置屏蔽错误的情况下,程序得到继续执行,但是结果集不存在,连NULL都算不上,反馈给攻击者的很可能就是结果集为空的情况,其实这是脚本的处理结果。当然Oracle
PgSQL表现null。

二:语法错误

   
归根到底,都是结果集不同造成的,灵活掌握是关键,这并非单纯的经验问题。

三:运行错误不用说了,典型的就是利用MySQL注入benchmark让脚本运行超时得到物理路径,以及利用超时来获得不同的表征进行盲注入。

语法错误时比较熟悉的,比如对于sql
server,PgSQL,Sybase的注入错误提示都很重要,因为利用它的特性来获取信息很快速。语法错误造成的结果可能是SQL错误而中断脚本执行,但是脚本或服务器设置屏蔽错误的情况下,程序得到继续执行,但是结果集不存在,连NULL都算不上,反馈给攻击者的很可能就是结果集为空的情况,其实这是脚本的处理结果。当然Oracle
PgSQL表现null。

    二:语法错误

发表评论

电子邮件地址不会被公开。 必填项已用*标注