专注于互联网--专注于架构

最新标签
网站地图
文章索引
Rss订阅

首页 »网站安全 » sql注入:SQL查询结果集对注入的影响及利用 »正文

sql注入:SQL查询结果集对注入的影响及利用

来源: 发布时间:星期日, 2009年9月6日 浏览:61次 评论:0
  对于注入而言提示是极其重要所谓提示是指和正确页面区别结果反馈高手是很重视这个这对于注入点精准判断至关重要本问讨论下有关几类和他产生原理希望对读者有所帮助

  提示主要有逻辑和语法以及脚本运行 3类

  :逻辑

  简单例子是1=1 1=2这两个1=1和1=2页面区别原理是什么?以$sql = "select * from s where id=$_GET[id]"为例

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

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

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

  归根到底都是结果集区别造成灵活掌握是关键这并非单纯经验问题

   2:语法

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

   3:运行不用说了典型就是利用mysql注入benchmark让脚本运行超时得到物理路径以及利用超时来获得区别表征进行盲注入

   4:逻辑和语法结合

  当表征极不明显时候利用类似f这样进行正确和否区分有时候会成救命稻草语法和逻辑表征大多数情况都会有区别

  f(1=1,1,'no')这个会产生结果1 注意是数字f(1=2,1,'no')这个会产生'no' 是那么

  id=1 and 1=f(1=1,1'no')正确是必然成立而id=1 and 1=f(1=2,1,'no')会类型区别发生语法不过可惜是似乎支持f数据库不多呵呵

  现在讲结果集在注入中利用原理

  :从'or''='开始

  这是学习SQL注入初级课程登陆漏洞我简略从SQL结果集上分析

  $sql = "select top 1 * from admin where username='$username' and password=md5('$password')";

  显而易见'or''='加入使SQL语句返回了条记录这才使验证通过

   2:再看现在验证中SQL

  $sql = "select top 1 * from admin where username='$username'";

  结果集不为空才根据抽取记录集中密码值和用户提交密码MD5值进行比对来进行验证这样你突然发现'or''='计策失败鸟但是后台明明有注入这就是验证思路方法造成跟进这个验证过程'or''='确产生了个结果集(admin表中行记录)但是遗憾后来密码比对没法通过验证无法成功

  思路很简单网上有案例我重在原理利用union来产生想要结果集比如'and(1=2)union select top 1 username,'1234
0

相关文章

读者评论

发表评论

  • 昵称:
  • 内容: