sql注入之必备的基础知识
2016-12-06 17:29
316 查看
原文 http://www.jb51.net/article/93434.htm
什么是SQL注入(SQL Injection)
mysql常用注释
mysql认证绕过
mysql连接符
mysql中常见函数
常见的功能函数有:
以上就是在进行sql注入工程中常用的函数。当然还存在一些使用的不是很多的函数。
mysql数据库元信息
根据注入时提交的变量参数类型,SQL注入点有不同的分类,不同的注入点,其注入时需要注意的事项也有所不同。按提交参数类型,SQL注入点主要分为下面 3 种。
什么是SQL注入(SQL Injection)
所谓SQL注入式攻击,就是攻击者把SQL命令插入到Web表单的输入域或页面请求的查询字符串,欺骗服务器执行恶意的SQL命令。在某些表单中,用户输入的内容直接用来构造(或者影响)动态SQL命令,或作为存储过程的输入参数,这类表单特别容易受到SQL注入式攻击。
mysql常用注释
# --[空格]或者是--+ /*…*/ 在注意过程中,这些注释可能都需要进行urlencode。
mysql认证绕过
;%00 ‘ or 1=1 # ‘ /*!or */ 1=1 --+
mysql连接符
mysql中使用+来进行连接。 select * from users where username='zhangsan' and "ab"="a"+"b";
mysql中常见函数
在进行sql注入过程中,会使用到mysql中的内置函数。在内置函数中,又分为获取信息的函数和功能函数。 信息函数是用来获取mysql中的数据库的信息,功能函数就是传统的函数用来完成某项操作。 常用的信息函数有: database() ,用于获取当前所使用的数据库信息; version():返回数据库的版本,等价于@@version; user():返回当前的用户,等价如current_user参数; @@datadir,获取数据库的存储位置
常见的功能函数有:
load_file():从计算机中载入文件,读取文件中的数据。 select * from users union select 1,load_file('/etc/passwd'),3; select * from users union select1,load_file(0x2F6574632F706173737764),3; #使用16进制绕过单引号限制 into outfile:写入文件,前提是具有写入权限 concat():返回结果为连接参数产生的字符串。如果其中一个参数为null,则返回值为null。 select concat(username,password)from users; concat_ws() :是concat_ws()的特殊形式,第一个参数是分隔符,剩下的参数就是字段名。 select concat_ws(',',username,password) from users; group_concat() :用于合并多条记录中的结果。 用法如下: select group_concat(username) from users; 解释:返回的就是users表中所有的用户名,并且是作为一条记录返回。 subtring() ,substr():用于截断字符串。用法为:substr(str,pos,length) ,注意pos是从1开始的。 select substr((select database()),1,1); ascii():用法返回字符所对应的ascii值。 select ascii('a'); #97 length():返回字符串的长度。 如: select length("123456") #返回6 is(exp1,exp2,exp2):如果exp1的表达式是True,则返回exp2;否则返回exp3。 如: select 1,2,if(1=1,3,-1) #1,2,3 selecrt 1,2,if(1=2,3,-1) #1,2,-1
以上就是在进行sql注入工程中常用的函数。当然还存在一些使用的不是很多的函数。
now():返回当前的系统时间 hex():返回字符串的16进制 unhex():反向的hex()的16进制 @@basedir():反向mysql的安装目 @@versin_compile_os:操作系统
mysql数据库元信息
在mysql中存在information_schema是一个信息数据库,在这个数据库中保存了Mysql服务器所保存的所有的其他数据库的信息,如数据库名,数据库的表,表的字段名称和访问权限。在informa_schema中常用的表有: schemata:存储了mysql中所有的数据库信息,返回的内容与show databases的结果是一样的。 tables:存储了数据库中的表的信息。详细地描述了某个表属于哪个schema,表类型,表引擎。 show tables from secuiry的结果就是来自这个表 columns:详细地描述了某张表的所有的列以及每个列的信息。 show columns from users的结果就是来自这个表 下面就是利用以上的3个表来获取数据库的信息。 select database(); 查选数据库 select schema_name from information_schema.schemata limit 0,1; 查询数据库 select table_name from information_schema.tables where table_schema=database() limit 0,1; 查询表 select column_name from information_schema.columns where table_name='users' limit 0,1; 查询列
根据注入时提交的变量参数类型,SQL注入点有不同的分类,不同的注入点,其注入时需要注意的事项也有所不同。按提交参数类型,SQL注入点主要分为下面 3 种。
1,数字型注入点 形如“http://****?ID=55”,这类注入的参数是“数字”,因此称为“数字型注入点”。 此类注入点提交的SQL语句,其原形大致为:Select * from 表名 where 字段=55 当我们提交注入参数为“http://****?ID=55 And[查询条件]”时,向数据库提交的完整 SQL 语句为: Select * from 表名 where 字段=55 And [查询条件] 2,字符型注入点 形如“http://****?Class=日期”这类注入的参数是“字符”,因此称为“字符型”注入点。 此类注入点提交的 SQL 语句,其原形大致为: select * from 表名 where 字段='日期' 当我们提交注入参数为“http://****Class=日期 And[查询条件]时,向数据库提交的完整 SQL 语句为”: select * from 表名 where 字段='日期' and [查询条件] 3,搜索型注入点 这是一类特殊的注入类型。这类注入主要是指在进行数据搜索时没过滤搜索参数,一般在链接地址中有“keyword=关键字”,有的不显示的链接地址,而是直接通过搜索框表单提交。 此类注入点提交的 SQL 语句,其原形大致为: select * from 表名 where 字段 like '%关键字%' 当我们提交注入参数为“keyword='and[查询条件] and '%'=',则向数据库提交的完事SQL语句为: select * from 表名 where 字段 like '%' and [查询条件] and '%'='%'
相关文章推荐
- SQL点滴17—使用数据库引擎存储过程,系统视图查询,DBA,BI开发人员必备基础知识
- SQL注入基础知识
- SQL点滴17—使用数据库引擎存储过程,系统视图查询,DBA,BI开发人员必备基础知识
- SQL使用数据库引擎存储过程,系统视图查询,DBA,BI开发人员必备基础知识
- VC入门必备--基础知识(三)
- 十六个问答 网络新手必备基础知识
- VC入门必备--基础知识(四)
- 网管必备知识全套=做为一个网管必备的基础知识
- SQL的详细语法介绍——对于学习数据库最基础知识二
- SQL循序渐进(2)表的基础知识
- VC入门必备--基础知识(二)
- 编写 SQL 查询:让我们从基础知识开始
- Linq to SQL:基础知识
- SQL防注入功能原理相关知识
- SQL的详细语法介绍——对于学习最基础知识二
- VC入门必备--基础知识(五)
- oracle学习笔记(一)------oracle基础知识和基本sql语句
- sql基础知识
- http协议基础,学习搜索引擎必备知识
- sql 基础知识要点(二)必会!