SQL Injection(1)
来源:互联网 发布:市场大数据分析 编辑:程序博客网 时间:2024/06/16 20:45
在MySQL中,枚举数据库是有一定的顺序的,首先是提取数据库名称,然后是表、列,最后才是数据本身,遵循一种分级的方法。
通常最先想知道的是执行查询的用户名,可使用下列查询:
SELECT user();SELECT current_user;
如果想列出安装在远程MySQL上的数据库,可使用下列查询(假设拥有管理员权限):
SELECT distinct(db) FROM mysql.db
远程MySQL为5.0或更高的版本,可以使用information_schema并通过注入下列内容获取相同信息:
SELECT schema_name FROM information_schema.schemata;
information_schema这张数据表保存了MySQL服务器所有数据库的信息。如数据库名,数据库的表,表栏的数据类型与访问权限等。
下面是重要的数据字典表
- SCHEMATA表:提供了关于数据库的信息。
- TABLES表:给出了关于数据库中的表的信息。
- COLUMNS表:给出了表中的列信息。
- STATISTICS表:给出了关于表索引的信息。
- USER_PRIVILEGES表:给出了关于全程权限的信息。该信息源自mysql.user授权表。
- SCHEMA_PRIVILEGES表:给出了关于方案(数据库)权限的信息。该信息来自mysql.db授权表。
- TABLE_PRIVILEGES表:给出了关于表权限的信息。该信息源自mysql.tables_priv授权表。
- COLUMN_PRIVILEGES表:给出了关于列权限的信息。该信息源自mysql.columns_priv授权表。
- CHARACTER_SETS表:提供了关于可用字符集的信息。
- COLLATIONS表:提供了关于各字符集的对照信息。
- COLLATION_CHARACTER_SET_APPLICABILITY表:指明了可用于校对的字符集。
- TABLE_CONSTRAINTS表:描述了存在约束的表。
- KEY_COLUMN_USAGE表:描述了具有约束的键列。
- ROUTINES表:提供了关于存储子程序(存储程序和函数)的信息。此时,ROUTINES表不包含自定义函数(UDF)。
- VIEWS表:给出了关于数据库中的视图的信息。
- TRIGGERS表:提供了关于触发程序的信息。
查询完information_schema可以枚举整个数据库的结构。
其中有一个库很有意思customers_db
SELECT table_schema,table_name FROM informaiton_schema.tables WHERE table_schema='customers_db'
如果想获取所有数据库的所有表,只需忽略where字句。
SELECT table_schema,table_name FROM informaiton_schema.tables
如果想检索除了mysql 和information_schema这两个内置数据库之外的所有表,因为不存在想要的目标信息
SELECT table_schema,table_name FROM informaiton_schema.tables WHERE table_schema!='mysql' AND table_schema!='information_schema'
想要查询一个有关所有数据库、表和列的完整视图,如下查询语句
SELECT table_schema,table_name,column FROM information_schema,columns WHERE table_schema!='mysql' AND table_schema !='information_schema';
还有另一种方法来寻找包含自己感兴趣内容的列的表,比如
SELECT table_schema,table_name,colunm_name FROM information_schema.schema.columns WHERE column_name LIKE 'password' OR column_name LIKE 'credit_card'
查询各种用户的权限
SELECT grantee,privilege_type,is_grantable FROM information_schema.user_privileges;
需要特别强调的是informaiton_schema只适用于MySQL5及以后的版本,面对早期版本只能通过暴力攻击来确定表名和列名。我们可以先访问存储在数据库上的文件,将其原始内容导入到我们创建的一张表中,然后使用前面的技术提取该表
数据库的文件保存在于数据库名称相同的目录下,此目录包含在主MySQL数据目录中
SELECT @@datadir
数据库的所有表包含在扩展名为myd的文件中,例如mysql数据库默认的一些MYD文件:
- tables_priv.MYD
- host.MYD
- help_keyword.MYD
- columns_priv.MYD
- db.MYD
可使用load_file来提取
SELECT load_file('databasename/tablename.MYD')
load_file允许检索的字节数有个最大值,该值由@@max_allowed_packet变量指定,所以该技术不使用于存储了大量数据的表
- SQL Injection(1)
- SQL Injection
- SQL injection
- sql injection
- SQL Injection
- sql injection
- sql Injection
- sql injection
- sql injection
- SQL injection
- SQL injection
- SQL Injection
- SQL Injection
- SQL Injection
- SQL injection
- SQL Injection
- SQL Injection
- SQL INJECTION.
- 第一个接口性能测试实例
- github使用
- 关于ArcSDE用户模式
- OpenCV2编程手册笔记之 4.2计算图像的直方图
- HDOJ1233. 还是畅通工程(并查集+最小生成树)
- SQL Injection(1)
- Java Collection的操作示例
- 面试OR笔试30——单链表环入口节点
- 1008. Elevator (20)
- leetcode 52. N-Queens II DFS深度优先遍历
- Android学习笔记三十七之基于TCP的socket通信
- Spark 机器学习《一》
- iOS开发中方法延迟执行的几种方式
- HeapCreate第三个参数dwMaximumSize