Tan's Blog.

SQL注入学习

字数统计: 1.4k阅读时长: 5 min
2019/04/04 Share

1.SQL语句

之前学习过SQL语句,但基本上也忘得差不多了,那今天就先做一个基本的复习。

基本操作语句:

操作名称语句作用举例
INSERT INTO table_name (列1, 列2,…) VALUES (值1, 值2,….)INSERT INTO 语句用于向表格中插入新的行INSERT INTO Persons (LastName, Address) VALUES (‘Wilson’, ‘Champs-Elysees’)
DELETE FROM 表名称 WHERE 列名称 = 值DELETE 语句用于删除表中的行DELETE FROM Person WHERE LastName = ‘Wilson’
UPDATE 表名称 SET 列名称 = 新值 WHERE 列名称 = 某值Update 语句用于修改表中的数据UPDATE Person SET FirstName = ‘Fred’ WHERE LastName = ‘Wilson’
SELECT 列名称 FROM 表名称SELECT 语句用于从表中选取数据SELECT LastName,FirstName FROM Persons
建表CREATE TABLE 表名称(列名称1 数据类型,列名称2 数据类型,列名称3 数据型,….)CREATE TABLE 语句用于创建数据库中的表CREATE TABLE Persons(Id_P int,LastName varchar(255),FirstName varchar(255),Address varchar(255),City varchar(255))
连接JOINSQL join 用于根据两个或多个表中的列之间的关系,从这些表中查询数据SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo FROM Persons INNER JOIN Orders ON Persons.Id_P = Orders.Id_P ORDER BY Persons.LastName
合并SELECT column_name(s) FROM table_name1 UNION SELECT column_name(s) FROM table_name2UNION 操作符用于合并两个或多个 SELECT 语句的结果集。请注意,UNION 内部的 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每条 SELECT 语句中的列的顺序必须相同SELECT E_Name FROM Employees_China UNION SELECT E_Name FROM Employees_USA

五大常用数据库

Access Access数据库,这款数据库是由微软发布的,是一款关联式数据序管理型系统的数据库,通常是被用来开发Web 应用程序这些应用程序都利用Asp技术在IIs上运行,但是由于Access 是小型的数据库,在很多的使用上都有着局限性,而且如果过多的数据库访问量还会造成数据库的性能极具下降。

Mysql MySQL数据库,这款数据库是一款小型数据库管理系统的数据库,其开发公司是瑞典MySQLAB公司。MySQL被广泛地应用在Internet上的中小型网站中。由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,许多中小型网站为了降低网站总体拥有成本而选择了MySQL作为网站数据库。第三种:
SqlServer SqlServer数据库,这款数据库的特点是真正的客户/服务器体系结构,并且出十是图形化的用户界面,使数据库管理方式更加直观和简单。它还提供了丰富的编程接口工具为用户进行程序设计提供了更大的选择余。在使用上也是非常广泛的。

Oracle Oracle数据库,是一款比较典型的客户/服务器(CLIENT/SERVER)或B/S体系结构的数据库之一。ORACLE数据库是目前世界上使用最为广泛的数据库管理系统,作为一个通用的数据库系统,它具有完整的数据管理功能;作为一个关系数据库,它是一个完备关系的产品;作为分布式数据库它实现了分布式处理功能。但它的所有知识,只要在一种机型上学习了ORACLE知识,便能在各种类型的机器上使用它。

SQLite SQLite数据库,这是一款轻型的数据库,是遵守ACID的关联式数据库管理系统,它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。这款数据库的运行处理速度比Mysql、PostgreSQL这两款都要快。

2.SQL注入

今天刚入手一本《白帽子讲Web安全》,准备花一段时间研究研究。
注入攻击的本质,是把用户输入的数据当作代码执行。这里提出的一个安全设计原则——数据与代码分离,就是专门为解决注入攻击而生的。
下面是SQL攻击的典型例子:
对于一个输入框,如果用户输入一段有语义的sql语句,比如:Beijing’; drop table OrdersTable–
那么,sql语句在实际执行时就会执行select * from OrdersTable where ShipCity =’Beijing’; drop table OrdersTable–
这样就会导致原本正常执行的查询语句,现在变成了查询之后,再执行一个drop表操作。
那我们应该如何进行sql注入攻击呢?
(1)识别Web应用中所有的输入点。比如说在参数中输入’,引起执行查询语句的语法错误,服务器直接返回了错误信息,或许可以从错误信息中得到一些敏感信息。但有些时候,服务器会关闭错误回显,这样就引出了“盲注”。
(2)了解哪些类型的请求会触发异常。比如说GET请求,POST请求,HTTP头请求。那很明显BasicSQL题是特殊字符的GET请求会触发异常,可以判断它是存在注入漏洞的。
(3)检测服务器响应中的异常。可以通过报告500错误进行判断。
寻找一个注入点的这个过程是十分繁琐的,要不断尝试,所以非常有必要使用一个自动化工具sqlmap.py来帮助完成这个过程。接下来会继续研究sqlmap的使用以及一些基本原理,打好一个基础吧。

CATALOG
  1. 1. 1.SQL语句
    1. 1.1. 基本操作语句:
    2. 1.2. 五大常用数据库
  2. 2. 2.SQL注入