SQL入门——摘自SQL注入攻击与防御

SQL查询由一条或多条SQL语句构成,这些语句是数据库服务器能够有效执行的指令。操作数据库或执行SQL注入时最长碰到的SQL语句是SELECT,INSERT,UPDATE,CRATE,UNION SELECT和DELETE.
1.SELECT语句
SQL命令以分号“;”结束执行,不区分大小写

 
SELECT * FROM tblUsers;   返回tbusers表中的所有数据。星号(*)是个通配符,它指示数据库服务器返回所有数据。
SELECT username FROM tblUsers;   返回tbusers表中所有行为username的列:
SELECT * FROM tblUsers WHERE username = 'admin' AND password = 'letmein'; 返回所有username列的值为admin且password列的值为letmein的行。
SELECT * INTO hackerTable FROM tblUsers;    复制tblusers的所有数据到hackerTable上
2.UNION运算符
可以使用UNION运算符来合并两条或多条SELECT语句的结果集。参与UNION运算的所有SELECT语句必须返回相同的列数,并且对应列的数据类型必须相互兼容。
 
查询分别来自tblUsers表和tblAdmins表的username列和password列合并到一起:
SELECT username,password FROM tblUsers UNION SELECT username,password FROM tblAdmins;
UNION SELECT 会自动比较每条SELECT返回的值并只返回不重复的值。全部返回:
SELECT username,password FROM tblUsers UNION ALL SELECT username,password FROM tblAdmins;
3.INSERT语句
 
INSERT INTO tblUsers VALUES(1,'Jhon Smith',3);   向tblUsers表中插入数据(1,’John Smith‘,3)
INSERT INTO tblUsers(id,username,password) VALUES(1,'Jhon Smith',3); 定向列插入数据。有效防止数值插入错误列中。
4.UPDATE语句
UPDATE用于修改数据库表中已经存在的数据。
 
 update shoppinglist3  set wupin=0 where goods=2; 修改shoppinglist3表中goods列值是2的wupin列值为0.
注:UPDATE语句都应包含一个WHERE子句,应指出应该更新哪些行。如果省略了WHERE子句,那么所有行都会受到影响。

5.DELETE语句
DELETE语句用于从表中删除行。
 
DELETE shoppinglist3 WHERE goods = 2; 删除shopping list3表中goods为2的行。
注:DELETE语句后都应包含WHERE子句,应指出删除哪些行。如果省略where语句,那么所有行都会被删除。

Tips:
危险的SQL注入
检测SQL注入漏洞最常见的一种方法是插入条件子句并观察应用行为中的差异。
 
SELECT story FROM news WHERE id=19
SELECT story FROM news WHERE id=19 OR 1=1
SELECT story FROM news WHERE id=19 OR 1=2
经过修改的第二条查询返回数据库中所有的story列,因为1始终等于1.
从攻击的角度来看,易受攻击的应用会针对修改后的查询做出不同的响应,这表明存在SQL注入漏洞。

6.DROP语句
DROP语句用于删除数据库对象,比如表、视图、索引。
 
DROP TABLE shoppinglist2; 删除shoppinglist2表
7.CREATE TABLE语句
 
CREATE TABLE shoppinglist(item int,name varchar(100)); 创建一个shoppinglist表,包含(item,name)两个列。
CREATE TABLE shoppinglist2 as SELECT * FROM orders; 创建一个表由orders表填充
8.ALTER TABLE语句
ALTER TABLE语句用于添加、删除、修改现有表格中的列。
 
 alter table shoppinglist2 add tips varchar(100);   向shoppinglist2表添加tips列
 alter table shoppinglist2 drop column tips; 删除shoppinglist2表中tips列
 alter table shoppinglist2 alter column cost varchar(50); 修改cost列数据类型(未实现,不清楚原因?)
9.GROUP BY语句
 
SELECT CUSTOMER,SUM(COST) FROM ORDERS WHERE CUSTOMER='A' GROUP BY CUSTOMER; 对customer A的所有消费求和。
10.ORDER BY 子句
ORDER BY 子句用于对SELECT 语句的查询结果按特定列进行排序,它接受一个列名或数字做强制参数。添加ASC或DESC关键字将结果分别按升序或降序排列。
 
SELECT product FROM shoppinglist2 ORDER BY ASC;对product列进行升序排列
11.限制结果集
执行SQL注入攻击时,通常需要限制注入查询(例如,通过错误信息提取数据)返回的行数。
各数据库平台略有不同,以MySQL为例。
 
SELECT * FROM shoppinglist LIMIT 1,1;选择第一行
SELECT * FROM shoppinglist LIMIT 5,1;选择第五行














  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
作 者:(美)克拉克 著,黄晓磊,李化 译 SQL注入是Internet上最危险、最有名的安全漏洞之一,本书是目前唯一一本专门致力于讲解SQL威胁的图书。本书作者均是专门研究SQL注入的安全专家,他们集众家之长,对应用程序的基本编码和升级维护进行全面跟踪,详细讲解可能引发SQL注入的行为以及攻击者的利用要素,并结合长期实践经验提出了相应的解决方案。针对SQL注入隐蔽性极强的特点,本书重点讲解了SQL注入的排查方法和可以借助的工具,总结了常见的利用SQL漏洞的方法。另外,本书还专门从代码层和系统层的角度介绍了避免SQL注入的各种策略和需要考虑的问题。   本书主要内容   SQL注入一直长期存在,但最近有所增强。本书包含所有与SQL注入攻击相关的、当前已知的信息,凝聚了由本书作者组成的、无私奉献的SQL注入专家团队的所有深刻见解。   什么是SQL注入?理解它是什么以及它的基本原理   查找、确认和自动发现SQL注入   查找代码中SQL注入时的提示和技巧   使用SQL注入创建利用   通过设计来避免由SQL攻击所带来的危险 目录: 第1章 什么是SQL注入  1.1 概述  1.2 理解Web应用的工作原理   1.2.1 一种简单的应用架构   1.2.2 一种较复杂的架构  1.3 理解SQL注入  1.4 理解SQL注入的产生过程   1.4.1 构造动态字符串   1.4.2 不安全的数据库配置  1.5 本章小结  1.6 快速解决方案  1.7 常见问题解答 第2章 SQL注入测试  2.1 概述  2.2 寻找SQL注入   2.2.1 借助推理进行测试   2.2.2 数据库错误   2.2.3 应用响应   2.2.4 SQL盲注  2.3 确认SQL注入   2.3.1 区分数字和字符串   2.3.2 内联SQL注入   2.3.3 终止式SQL注入   2.3.4 时间延迟  2.4 自动寻找SQL注入  2.5 本章小结  2.6 快速解决方案  2.7 常见问题解答 第3章 复查代码中的SQL注入  3.1 概述  3.2 复查源代码中的SQL注入   3.2.1 危险的编码行为   3.2.2 危险的函数   3.2.3 跟踪数据   3.2.4 复查PL/SQL和T-SQL代码  3.3 自动复查源代码第1章 什么是SQL注入   3.3.1 YASCA   3.3.2 Pixy   3.3.3 AppCodeScan   3.3.4 LAPSE   3.3.5 SWAAT   3.3.6 Microsoft SQL注入源代码分析器   3.3.7 CAT.NET   3.3.8 商业源代码复查工具   3.3.9 Ounce   3.3.10 Fortify源代码分析器   3.3.11 CodeSecure  3.4 本章小结  3.5 快速解决方案  3.6 常见问题解答 第4章 利用SQL注入  4.1 概述  4.2 理解常见的利用技术  4.3 识别数据库   4.3.1 非盲跟踪   4.3.2 盲跟踪  4.4 使用UINON语句提取数据   4.4.1 匹配列   4.4.2 匹配数据类型  4.5 使用条件语句   4.5.1 方法1:基于时间   4.5.2 方法2:基于错误   4.5.3 方法3:基于内容   4.5.4 处理字符串   4.5.5 扩展攻击   4.5.6 利用SQL注入错误   4.5.7 Oracle中的错误消息  4.6 枚举数据库模式   4.6.1 SQL Server   4.6.2 MySQL   4.6.3 Oracle  4.7 提升权限   4.7.1 SQL Server   4.7.2 Oracle  4.8 窃取哈希口令   4.8.1 SQL Server   4.8.2 MySQL   4.8.3 Oracle  4.9 带外通信   4.9.1 E-mail   4.9.2 HTTP/DNS   4.9.3 文件系统  4.10 自动利用SQL注入   4.10.1 Sqlmap   4.10.2 Bobcat   4.10.3 BSQL   4.10.4 其他工具  4.11 本章小结  4.12 快速解决方案  4.13 常见问题解答 第5章 SQL盲注利用  5.1 概述  5.2 寻找并确认SQL盲注   5.2.1 强制产生通用错误   5.2.2 注入带副作用的查询   5.2.3 拆分与平衡   5.2.4 常见的SQL盲注场景   5.2.5 SQL盲注技术  5.3 使用基于时间的技术   5.3.1 延迟数据库查询   5.3.2 基于时间推断的考虑  5.4 使用基于响应的技术   5.4.1 MySQL响应技术   5.4.2 SQL Server响应技术   5.4.3 Oracle响应技术   5.4.4 返回多位信息  5.5 使用非主流通道   5.5.1 数据库连接   5.5.2 DNS渗漏   5.5.3 E-mail渗漏   5.5.4 HTTP渗漏  5.6 自动SQL盲注利用   5.6.1 Absinthe   5.6.2 BSQL Hacker   5.6.3 SQLBrute   5.6.4 Sqlninja   5.6.5 Squeeza  5.7 本章小结  5.8 快速解决方案  5.9 常见问题解答 第6章 利用操作系统  6.1 概述  6.2 访问文件系统   6.2.1 读文件   6.2.2 写文件  6.3 执行操作系统命令  6.4 巩固访问  6.5 本章小结  6.6 快速解决方案  6.7 常见问题解答  6.8 尾注 第7章 高级话题  7.1 概述  7.2 避开输入过滤器   7.2.1 使用大小写变种   7.2.2 使用SQL注释   7.2.3 使用URL编码   7.2.4 使用动态的查询执行   7.2.5 使用空字节   7.2.6 嵌套剥离后的表达式   7.2.7 利用截断   7.2.8 避开自定义过滤器   7.2.9 使用非标准入口点  7.3 利用二阶SQL注入  7.4 使用混合攻击   7.4.1 修改捕获的数据   7.4.2 创建跨站脚本   7.4.3 在Oracle上运行操作系统命令   7.4.4 利用验证过的漏洞  7.5 本章小结  7.6 快速解决方案  7.7 常见问题解答 第8章 代码层防御  8.1 概述  8.2 使用参数化语句   8.2.1 Java中的参数化语句   8.2.2 .NET(C#)中的参数化语句   8.2.3 PHP中的参数化语句   8.2.4 PL/SQL中的参数化语句  8.3 输入验证   8.3.1 白名单   8.3.2 黑名单   8.3.3 Java中的输入验证   8.3.4 .NET中的输入验证   8.3.5 PHP中的输入验证  8.4 编码输出  8.5 规范化  8.6 通过设计来避免SQL注入的危险   8.6.1 使用存储过程   8.6.2 使用抽象层   8.6.3 处理敏感数据   8.6.4 避免明显的对象名   8.6.5 创建数据库Honeypot   8.6.6 附加的安全开发资源  8.7 本章小结  8.8 快速解决方案  8.9 常见问题解答 第9章 平台层防御  9.1 概述  9.2 使用运行时保护   9.2.1 Web应用防火墙   9.2.2 截断过滤器   9.2.3 不可编辑的输入保护与可编辑的输入保护   9.2.4 URL策略/页面层策略   9.2.5 面向方面编程   9.2.6 应用入侵检测系统   9.2.7 数据库防火墙  9.3 确保数据库安全   9.3.1 锁定应用数据   9.3.2 锁定数据库服务器  9.4 额外的部署考虑   9.4.1 最小化不必要信息的泄露   9.4.2 提高Web服务器日志的冗余   9.4.3 在独立主机上部署Web服务器和数据库服务器   9.4.4 配置网络访问控制  9.5 本章小结  9.6 快速解决方案  9.7 常见问题解答 第10章 参考资料  10.1 概述  10.2 SQL入门  10.3 SQL注入快速参考   10.3.1 识别数据库平台   10.3.2 Microsoft SQL Server备忘单   10.3.3 MySQL备忘单   10.3.4 Oracle备忘单

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值