SQL Injection Base
What is DataBase
数据库就是一个存储数据的仓库,数据库是以一定方式存储在一起、能与多个用户共享、具有尽可能小的冗余度、与应用程序彼此独立的数据集合。
关系型数据库:
关系型数据库,存储的格式可以直观的反映实体间的关系。关系型数据库和常见的表格比较相似,关系型数据库中表与表之间是有很多复杂的关联关的。
常见的关系型数据库有 MySQL,Oracle,PostgreSQL,SQL Server 等。
非关系型数据库:
随着近些年技术方向的不断拓展,大量的 NoSQL 数据库和 MongoDB 、Redis、Memcached 出于简化数据库结构、避免冗余、影响性能的表连接、摒弃复杂分布式的目的被设计。
NoSQL 数据库适合追求速度和可扩展性、业务多变的应用场景。
http://db-engines.com/en/ranking
Install MySQL With Docker
docker pull mysql:5.7
docker run --name <name> -d -p <port>:3306 -e MYSQL_ROOT_PASSWORD=<password> <image>
docker exec -it <name> /bin/bash
mysql -uroot -p
MySQL Base
系统库释义:
information_schema 库:是信息数据库,其中保存着关于 MySQL 服务器所维护的所有其他数据库的信息,比如数据库名、数据库表、表字段的数据类型和访问权限等。Web 渗透中用途很大。
SCHEMATA 表:提供了当前mysql实例中所有数据库的信息。是 show databases 的结果取之此表。
TABLES 表:提供了关于数据库中的表的信息(包括视图)。详细表述了某个表属于哪个schema,表类型,表引擎,创建时间等信息。是 show tables from schemaname 的结果取之此表。
COLUMNS 表:提供了表中的列信息。详细表述了某张表的所有列以及每个列的信息。是 show columns from schemaname.tablename 的结果取之此表。
mysql 库:MySQL 的核心数据库,主要负责存储数据库的用户、权限设置、关键字等 mysql 自己需要使用的控制和管理信息。
performance_schema 库:内存数据库,数据放在内存中直接操作的数据库。相对于磁盘,内存的数据读写速度要高出几个数量级,将数据保存在内存中相比从磁盘上访问能够极大地提高应用地性能。
sys 库:通过这个数据库,可以查询谁(基于IP或用户)使用了最多的资源、哪张表被访问过最多等等信息。
What is SQL Injection
SQL 注入漏洞是什么
是发生于应用程序与数据库层的安全漏洞。网站内部直接发送的 SQL 请求一般不会有危险,但实际情况是很多时候需要结合用户的输入数据动态构造 SQL 语句,如果用户输入的数据被构造成恶意 SQL 代码,Web 应用又卫队动态构造的 SQL 语句使用的参数进行审查,则会带来意想不到的危险。
GET 型 SQL 注入漏洞是什么
我们在提交网页内容的时候,主要分为 GET 方法、POST 方法,GET 方法提交的内容会显现在网页 URL 上,通过对 URL 连接进行构造,可以获得超出权限的信息内容。
Web 程序三层架构:界面层 + 业务逻辑层 + 数据访问层
原理:
SELECT * FROM t1 WHERE id = %s;
-- sqlStr := SELECT * FROM t1 WHERE name = '%s' username;
当用户输入1 or 1 = 1
实际上执行的 sql
SELECT * FROM t1 WHERE id =1 OR 1=1;
也就是
SELECT * FROM t1;
SQL 注入带来的威胁:
- 猜解后台数据库,盗取网站敏感信息
- 绕过验证登录网站后台
- 借助数据库的存储过程进行提权等操作
SQL 注入步骤:
- 检索隐藏数据
- 修改应用程序逻辑
- Union attack
- 获取敏感数据
- 盲注