SQL注入之必备的基础知识

Posted WEB安全之路

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL注入之必备的基础知识相关的知识,希望对你有一定的参考价值。

什么是SQL注入(SQL Injection)

所谓SQL注入式攻击,就是攻击者把SQL命令插入到Web表单的输入域或页面请求的查询字符串,欺骗服务器执行恶意的SQL命令。在某些表单中,用户输入的内容直接用来构造(或者影响)动态SQL命令,或作为存储过程的输入参数,这类表单特别容易受到SQL注入式攻击。

mysql常用注释

    #

    --[空格]或者是--+

    /*…*/

在注意过程中,这些注释可能都需要进行urlencode。

mysql认证绕过

      ;%00

     ‘ or 1=1 #

     ‘ /*!or */ 1=1 --+

mysql连接符

mysql中使用+来进行连接。

在进行sql注入过程中,会使用到mysql中的内置函数。在内置函数中,又分为获取信息的函数和功能函数。mysql中常见函数

信息函数是用来获取mysql中的数据库的信息,功能函数就是传统的函数用来完成某项操作。

常用的信息函数有:

    database() ,用于获取当前所使用的数据库信息

    version():返回数据库的版本,等价于@@version

     user():返回当前的用户,等价如current_user参数。如:

SQL注入之必备的基础知识

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

SQL注入之必备的基础知识

常见的功能函数有:

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

SQL注入之必备的基础知识

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

SQL注入之必备的基础知识

concat():返回结果为连接参数产生的字符串。如果其中一个参数为null,则返回值为null。

用法如下:

SQL注入之必备的基础知识

*concat_ws() :是concat_ws()的特殊形式,第一个参数是分隔符,剩下的参数就是字段名。

SQL注入之必备的基础知识

group_concat() :用于合并多条记录中的结果。

用法如下:

SQL注入之必备的基础知识

subtring() ,substr():用于截断字符串。用法为:substr(str,pos,length) ,注意pos是从1开始的。

SQL注入之必备的基础知识

ascii():用法返回字符所对应的ascii值。

SQL注入之必备的基础知识

length():返回字符串的长度。

如:

SQL注入之必备的基础知识

is(exp1,exp2,exp2):如果exp1的表达式是True,则返回exp2;否则返回exp3。

如:

SQL注入之必备的基础知识

以上就是在进行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个表来获取数据库的信息。

SQL注入之必备的基础知识

sql注入类型

sql注入类型大致可以分为常规的sql注入和sql盲注。sql盲注又可以分为基于时间的盲注和基于网页内容的盲注。
关于sql的盲注,网上也有很多的说明,这里也不做过多的解释。关于盲注的概念,有具体的例子就方便进行说明。
延时注入中,常用的函数就包括了if()sleep()函数。

基本的sql表达式如下:

SQL注入之必备的基础知识

宽字节注入

关于宽字节注入,可以参考宽字节注入详解。宽字节输入一般是由于网页编码与数据库的编码不匹配造成的。对于宽字节注入,使用%d5或%df绕过宽字节注入

mysql常用语句总结

常规注入


SQL注入之必备的基础知识


双重SQL查选

SQL注入之必备的基础知识

这种利用姿势是通过mysql执行sql命令时的报错信息来得到所需要的信息的,在接下来的文章中会对这种写法进行详细地分析。

bool盲注

SQL注入之必备的基础知识

bool盲注就是根据sql语句执行返回值是True或False对应的页面内容会发生,来得到信息。

time盲注

根据sleep()函数是否执行来得到所需的信息。上述的2种写法都是等价的,time盲注余常规的sql注入方法不同。time盲注需要一般需要使用到if()sleep()函数。然后根据页面返回内容的长度,进而知道sleep()函数是否有执行。





以上是关于SQL注入之必备的基础知识的主要内容,如果未能解决你的问题,请参考以下文章

程序员必备基础:10种常见安全漏洞浅析

程序员必备基础:10种常见安全漏洞浅析

程序员必备基础:10种常见安全漏洞浅析

以下代码片段是不是容易受到 Rails 5 中 SQL 注入的影响?

安全测试 web安全测试 常规安全漏洞 可能存在SQL和JS注入漏洞场景分析。为什么自己没有找到漏洞,哪么可能存在漏洞场景是?SQL注入漏洞修复 JS注入漏洞修复 漏洞存在场景分析和修复示例(代码片段

小白科普Web安全基础之SQL注入XSS文件上传漏洞详解