对于注入而言
![](/icons/17415dou.gif)
![](/icons/17415cuowu.gif)
提示是极其重要
![](/icons/17415dou2.gif)
所谓
![](/icons/17415cuowu.gif)
提示是指和正确页面区别
![](/icons/17415de.gif)
结果反馈
![](/icons/17415dou.gif)
高手是很重视这个
![](/icons/17415yi.gif)
点
![](/icons/17415de.gif)
![](/icons/17415dou.gif)
这对于注入点
![](/icons/17415de.gif)
精准判断至关重要
![](/icons/17415dou2.gif)
本问讨论下有关几类
![](/icons/17415cuowu.gif)
和他产生
![](/icons/17415de.gif)
原理
![](/icons/17415dou.gif)
希望对读者有所帮助
![](/icons/17415cuowu.gif)
提示主要有逻辑
![](/icons/17415cuowu.gif)
和语法
![](/icons/17415cuowu.gif)
以及脚本运行
![](/icons/17415cuowu.gif)
3类
![](/icons/17415yi.gif)
:逻辑
![](/icons/17415cuowu.gif)
简单
![](/icons/17415de.gif)
例子是1=1 1=2这两个
![](/icons/17415dou.gif)
1=1和1=2页面区别
![](/icons/17415de.gif)
原理是什么?以$sql = "select * from
![](/icons/17415new.gif)
s where id=$_GET[id]"为例
![](/icons/17415dou2.gif)
select * from
![](/icons/17415new.gif)
s where id=1 and 1=2产生
![](/icons/17415de.gif)
结果集为NULL
![](/icons/17415dou.gif)
然后
![](/icons/17415chengxu.gif)
取值得时候
![](/icons/17415dou.gif)
就会去出空值
![](/icons/17415dou.gif)
无法显示
![](/icons/17415dou2.gif)
当然有
![](/icons/17415de.gif)
![](/icons/17415chengxu.gif)
发现SQL执行结果集为空
![](/icons/17415dou.gif)
就立即跳转
![](/icons/17415dou.gif)
效果就不显鸟
![](/icons/17415dou2.gif)
值得注意
![](/icons/17415de.gif)
是
![](/icons/17415dou.gif)
有
![](/icons/17415de.gif)
如Oracle Postgresql
![](/icons/17415de.gif)
数据库在结果集为空情况下会再页面上表现
![](/icons/17415zifu.gif)
型null字样
![](/icons/17415dou.gif)
这算是个特点
![](/icons/17415dou2.gif)
如果使用or条件
![](/icons/17415dou.gif)
比如
select * from
![](/icons/17415new.gif)
s where id=1 or 1=1
和and 1=2得结果正好相反
![](/icons/17415dou.gif)
他
![](/icons/17415de.gif)
结果集十分庞大
![](/icons/17415dou2.gif)
如果SQL语句如此
![](/icons/17415dou.gif)
再加上
![](/icons/17415chengxu.gif)
是循环读取结果集(
![](/icons/17415yi.gif)
些编程上
![](/icons/17415de.gif)
陋习)那么会取出所有结果
![](/icons/17415dou.gif)
结果可能运行很慢
![](/icons/17415dou.gif)
在数据量巨大
![](/icons/17415de.gif)
oracle上容易出现
![](/icons/17415dou2.gif)
这个例子会出现什么呢
![](/icons/17415dou.gif)
![](/icons/17415yi.gif)
般
![](/icons/17415chengxu.gif)
取出结果集中
![](/icons/17415de.gif)
第
![](/icons/17415yi.gif)
条结果
![](/icons/17415dou.gif)
那么很可能已经不是id=1
![](/icons/17415de.gif)
那条新闻了
![](/icons/17415dou.gif)
这就是由些小菜奇怪有时候or 1=1页面会发生变化
![](/icons/17415de.gif)
原因
![](/icons/17415dou2.gif)
归根到底
![](/icons/17415dou.gif)
都是结果集区别造成
![](/icons/17415de.gif)
![](/icons/17415dou.gif)
灵活掌握是关键
![](/icons/17415dou.gif)
这并非单纯
![](/icons/17415de.gif)
经验问题
![](/icons/17415dou2.gif)
2:语法
![](/icons/17415cuowu.gif)
语法
![](/icons/17415cuowu.gif)
时比较熟悉
![](/icons/17415de.gif)
![](/icons/17415dou.gif)
比如对于SQL Server,PgSQL,Sybase
![](/icons/17415de.gif)
注入
![](/icons/17415cuowu.gif)
提示都很重要
![](/icons/17415dou.gif)
![](/icons/17415yinwei.gif)
利用它
![](/icons/17415de.gif)
特性来获取信息很快速
![](/icons/17415dou2.gif)
语法
![](/icons/17415cuowu.gif)
造成
![](/icons/17415de.gif)
结果可能是SQL
![](/icons/17415cuowu.gif)
而中断脚本执行
![](/icons/17415dou.gif)
但是脚本或服务器设置屏蔽
![](/icons/17415cuowu.gif)
![](/icons/17415de.gif)
情况下
![](/icons/17415dou.gif)
![](/icons/17415chengxu.gif)
得到继续执行
![](/icons/17415dou.gif)
但是结果集不存在
![](/icons/17415dou.gif)
连NULL都算不上
![](/icons/17415dou.gif)
反馈给攻击者
![](/icons/17415de.gif)
很可能就是结果集为空
![](/icons/17415de.gif)
情况
![](/icons/17415dou.gif)
其实这是脚本
![](/icons/17415de.gif)
处理结果
![](/icons/17415dou2.gif)
当然Oracle PgSQL表现null
![](/icons/17415dou2.gif)
3:运行
![](/icons/17415cuowu.gif)
不用说了
![](/icons/17415dou.gif)
典型
![](/icons/17415de.gif)
就是利用mysql注入benchmark让脚本运行超时得到物理路径
![](/icons/17415dou.gif)
以及利用超时来获得区别
![](/icons/17415de.gif)
表征进行盲注入
![](/icons/17415dou2.gif)
4:逻辑
![](/icons/17415cuowu.gif)
和语法
![](/icons/17415cuowu.gif)
![](/icons/17415de.gif)
结合
![](/icons/17415dou2.gif)
当表征极不明显
![](/icons/17415de.gif)
时候
![](/icons/17415dou.gif)
利用类似
![](/icons/17415if.gif)
f这样
![](/icons/17415de.gif)
![](/icons/17415hanshu.gif)
进行正确和否
![](/icons/17415de.gif)
区分有时候会成救命稻草
![](/icons/17415dou2.gif)
![](/icons/17415yinwei.gif)
语法
![](/icons/17415cuowu.gif)
和逻辑
![](/icons/17415cuowu.gif)
![](/icons/17415de.gif)
表征大多数情况都会有区别
![](/icons/17415if.gif)
f(1=1,1,'no')这个会产生结果1 注意是数字
![](/icons/17415dou.gif)
而
![](/icons/17415if.gif)
f(1=2,1,'no')这个会产生'no' 是
![](/icons/17415zifu.gif)
![](/icons/17415dou2.gif)
那么
id=1 and 1=
![](/icons/17415if.gif)
f(1=1,1'no')正确是必然成立
![](/icons/17415de.gif)
![](/icons/17415dou.gif)
而id=1 and 1=
![](/icons/17415if.gif)
f(1=2,1,'no')会
![](/icons/17415yinwei.gif)
类型区别发生语法
![](/icons/17415cuowu.gif)
![](/icons/17415dou2.gif)
不过可惜
![](/icons/17415de.gif)
是似乎支持
![](/icons/17415if.gif)
f
![](/icons/17415hanshu.gif)
![](/icons/17415de.gif)
数据库不多
![](/icons/17415dou.gif)
呵呵
![](/icons/17415dou2.gif)
现在讲结果集在注入中
![](/icons/17415de.gif)
利用原理
![](/icons/17415yi.gif)
:从'or''='开始
这是学习SQL注入
![](/icons/17415de.gif)
初级课程
![](/icons/17415dou.gif)
登陆漏洞
![](/icons/17415dou2.gif)
我简略从SQL结果集上分析
![](/icons/17415dou2.gif)
$sql = "select top 1 * from admin where username='$username' and password=md5('$password')";
显而易见
![](/icons/17415dou.gif)
'or''='
![](/icons/17415de.gif)
加入使SQL语句返回了
![](/icons/17415yi.gif)
条记录
![](/icons/17415dou.gif)
这才使验证通过
![](/icons/17415dou2.gif)
2:再看现在
![](/icons/17415de.gif)
验证中
![](/icons/17415de.gif)
SQL
$sql = "select top 1 * from admin where username='$username'";
结果集不为空才根据抽取
![](/icons/17415de.gif)
记录集中
![](/icons/17415de.gif)
密码值和用户提交
![](/icons/17415de.gif)
密码MD5值进行比对来进行验证
![](/icons/17415dou2.gif)
这样
![](/icons/17415dou.gif)
你突然发现'or''='
![](/icons/17415de.gif)
计策失败鸟
![](/icons/17415dou.gif)
但是后台明明有注入
![](/icons/17415dou.gif)
这就是验证思路方法造成
![](/icons/17415de.gif)
![](/icons/17415dou2.gif)
跟进这个验证过程
![](/icons/17415dou.gif)
'or''='
![](/icons/17415de.gif)
确产生了
![](/icons/17415yi.gif)
个结果集(admin表中
![](/icons/17415de.gif)
第
![](/icons/17415yi.gif)
行记录)但是遗憾
![](/icons/17415de.gif)
事
![](/icons/17415dou.gif)
后来
![](/icons/17415de.gif)
密码比对没法通过
![](/icons/17415dou.gif)
验证无法成功
![](/icons/17415dou2.gif)
思路很简单
![](/icons/17415dou.gif)
网上有案例
![](/icons/17415dou.gif)
我重在原理
![](/icons/17415dou.gif)
利用union来产生想要
![](/icons/17415de.gif)
结果集
![](/icons/17415dou2.gif)
比如'and(1=2)union select top 1 username,'1234