Your Ad Here
首页 | 编程语言 | 网站建设 | 游戏天堂 | 冲浪宝典 | 网络安全 | 操作系统 | 软件时空 | 硬件指南 | 病毒相关 | IT 认证
软讯网络 > 网络安全 > 黑客技术 > SQL Injection渗透技术辅助总结之浅谈查询
【标  题】:SQL Injection渗透技术辅助总结之浅谈查询
【关键字】:c,SQL,io,on,In,Injection,查询,SQL,Injection
【来  源】:网络

SQL Injection渗透技术辅助总结之浅谈查询

Your Ad Here   去过我的EvilOctal Weblog的兄弟都知道,在很久以前我的日程中就有这么一条。
总结injection中的union查询

   但是由于课程太忙,一直没时间完成,到了今天 Injection都已经快是明日黄花了。业内各大站点都漏洞也修补的差不多了,这种情势之下我要再写总结injection中的union查询那就要被人砍了...

   我们今天来为红及一时的SQL Injection攻击手法做个辅助总结,总结所有的SQL查询语句。本文章总结的都是以MSSQL为准,文章是为方便广大学习者而写的 大家随便收藏转载 别把作者给撬了就好:)

   查询语句是数据库的核心操作,在过去一年多以来大大小小的SQL Injection攻击事件中,他也占据着不可磨灭的地位。其一般的格式为:
SELECT [ALL|DISTINCT] <目标列表达式>[,<目标列表达式>]...
FROM <表名或者视图名>[,<表名或者视图名>]
[WHERE <条件表达式>]
[GROUP BY <列名1>[HAVING <条件表达式>]]
[ORDER BY <列名2>[ASC|DESC]];
解释一下...以上整个SELECT的意思是
根据WHERE子句的条件表达式从FROM子句指定的基本表或者视图中找出满足条件的元组 再按照SELECT子句中的目标列表达式 选出元组中的属性值形成结果表 如果有GROUP子句 则将结果按照<列名1>的值进行分组 该属性列值相等的元组为一组
如果GROUP组带有HAVING短语 则只有满足指定条件的组才输出 如果有ORDER子句 则结果表达还要按照<列名2>的值升序或者降序排列。
   是不是看着很抽象 没关系我们举例子来说 假设邪恶八进制文章系统的数据库是如下情况
用户表:EST_User(uid,name,pwd,group)
     uid是文章系统工作人员的用户号;name是文章系统工作人员的用户名;pwd是对应用户名的密码列;group是文章系统中所属组
文章表:EST_Art(aid,aname,abody,atips,uid)
     aid是文章在录入时候的编号;aname是存放文章题目的列;abody是用来存放文章正文的列;atips是文章所属于的分类

现在我们用它来做说明告诉大家如何使用查询语句 不过时间有限 大家通过例子来举一反三好了

单表查询
一 选择表中的若干列查询
1 查询指定列 查询全体工作人员的用户名和所在组
SELECT name, group FROM EST_User;
2 查询全部列 查询全体工作人员的详细记录
SELECT * FORM EST_User;
上面那句我们经常在一些源代码中看见 其实就是等价于SELECT uid, name, pwd, group FROM EST_User;
二 选择表中的若干元组
本来我们是简单的总结一下而已 这个我是不想讲它的 可惜可惜却想到有一些时候还真离不开它的一些用法 我也郁闷 大家来看看吧
1 查询满足条件的元组
这里我们主要讲比较大小和确定范围...
(1)比较大小
我们举个小例子 看这条语句 SELECT name, uid FROM EST_User WHERE uid<10; 它的意思是查询所有用户号小于10的文章系统工作人员的用户名以及用户号 当然 你使用 SELECT name, uid FROM EST_User WHERE NOT uid>=10;也可以
(2)确定范围
让我们来查询文章系统用户数据表中 用户号在5到10(包括5和10)之间的用户名 用户号和组 通过构造如下语句就可以了
SELECT name, uid, group FROM EST_User WHERE uid BETWEEN 5 AND 10;
那我们怎么表示不在5到10之间呢?呵呵 只要使用NOT BETWEEN就可以了 这里冰血封情不详细说了...
(3)多重条件
逻辑运算符AND和OR可以用来连接多个查询条件 另外AND的优先级是高于OR的 但是你可以使用括号来改变这种优先
我们举个例子...我们要查询斑竹组中所有用户号在10以下的用户的用户名 那么我们应该如何构造这个语句呢 呵呵 我自己写的都晕 够麻烦的...构造如下
SELECT name FROM EST_User WHERE group='Moderators' AND uid<10;关于OR的各位老大你就自己多摸索 ...

嵌套查询
在SQL中 一个SELECT-FROM-SELECT语句叫一个查询块 而将一个查询块嵌套在另外一个查询块的WHERE子句或者是HAVING短语的条件中的查询称之为嵌套查询 其实对Injection还是有点用的 所以这里也说说他吧...
比如:
SELECT name
FROM EST_User
WHERE uid IN
  SELECT uid
  FROM EST_Art
  WHERE aid='8';
这样我们分开了看 首先 SELECT name FROM EST_User WHERE uid=''; 这句 意思就是查询EST_User表中uid列值等于某个指定值的那个用户的名字
而 SELECT uid FROM EST_Art WHERE aid='8'; 的意思就是说查询EST_Art表中aid等于8的那个文章的提交者的uid 把这个uid在发给上级查询 这样就完成了嵌套查询的过程...
一 带有EXISTS谓词的字查询
其实本类中也有好几种 但是为什么我只说EXISTS呢?因为它用的是比较多的 杂志上有相当一部分的GGDD使用injection的时候挺喜欢用它的 其实不是偶说 什么查询不查询 只要把数据库学好了 想怎么查怎么查 你看看lcx大哥多牛x呀?就得象他学习...又开始拍马P了-_-|||

EXISTS代表存在量词E(其实不是E 那个标志是个反过来的E 但是现在暂时找不到 就用个赝品替代了) 带有EXISTS谓词的字查询不返回任何数据 只产生逻辑真假值true或者是false
看见没有 这就是注入分子热忠于它的原因...
查询所有发过atips文章属性为Tech的工作人员姓名
SELECT name FROM EST_User WHERE EXISTS (SELECT * FROM EST_Art WHERE uid=EST_User.uid AND atips='Tech');
使用存在量词EXISTS后 如果内层查询结果非空 则外层WHERE子句返回真值 否则返回假值 而由EXISTS引出的子查询目标列的表达式一般都用* 因为此查询只返回真假 那么用了列名没什么意义...

集合查询
  最后,咱们说说传说中的union查询,其实集合查询也不只union一个 但是我们这里只说union 为什么?Hacking用的多呀
例子来咯
假如我们要查询斑竹组的用户和用户号不大于8的用户 那么我们这里查询的就是这个的并集了 如何构造语句
SELECT * FROM EST_User WHERE group='Moderators' UNION SELECT * FROM EST_User WHERE uid<=8;
看来也不是很难么 具体就要看大家在实际中如何运用了...
开启终端的最简单方法全攻略:【上一篇】
SQL-injection in Invision Power Board 2.x:【下一篇】
【相关文章】
  • 当SA遇到XP_CMDSHELL时
  • 利用Radmin和科迈内网二级试用域名远程控制局域网的计算机
  • 记录-achilles
  • 最快速登录WIN2K TELNET 服务
  • MYSQL用户root密码为弱口令又一攻击方法
  • 从SA到RADMIN的简单攻陷主机思路
  • 入侵LINUX实例
  • 一个asp 的sqlcmd
  • 实现Windows, Unix, Linux多系统并存(1)
  • 一句话技巧(to be continue)
  • 【随机文章】
  • 请升级Oracle中的外部表
  • 黑客初步:黑客入侵五个常用手段
  • “关于数据库的简单入侵”的简单防范
  • H.264开源解码器评测
  • 简单的使用.NET对称加密的例子
  • mplayer编译心得
  • 四类设计人员
  • Microsoft Windows 2000 Server FSO 安全隐患解决办法
  • 别让MsgBox中断了一些Background的处理作业
  • st32271W,st34573w,st39175lw,st34520w,st318436lw,st
  • 【相关评论】
    没有相关评论
    【发表评论】
    姓名:
    邮件:
    随机码*
    评论*
          
    |  首 页  |  版权声明  |  联系我们   |  网站地图  |
    CopyRight © 2004-2007 bbb软讯网络 All Rigths Reserved.