注入方法分:基于报错、基于布尔盲注、基于韶光盲注、联合查询、堆叠注入、内联查询注入、宽字节注入

从提交办法分:GET注入、POST注入、COOKIE注入、HTTP头注入

SQL注入漏洞的利用思路

第一步先找可能存在漏洞的站点,也便是目标站点

jsp页面url链接中参数含有引号SQL注入的道理和伤害 NoSQL

第二步通过目标站点的后缀名来判断网站利用的是哪一种数据库,大略的判断可以不雅观察脚本的后缀,如果是.asp为后缀,则数据库可能是access,如果是.aspx为后缀,则可能是MsSql,如果是.php对应的可能是mysql数据库如果是.jsp,可能是oracl数据库。

第三步是探求站点存在的注入点,可以在url中进行考试测验输入参数后在拼接上引号,通过回显可以判断该站点传输数据的办法是否为get办法,同样的事理可查看post表单中的数据,在post表单中提交引号;而cookie可以通过burpsuit工具来判断注入点。

第四步便是判断注入点的类型,,通过减法运算哦按段是否是数据型的类型注入,通过单引号和页面的报错信息来判断是哪一种的字符型注入。

第五步便是闭合我们输入的SQL语句,通过注释的办法来获取数据。

根据页面的回显来利用当前最优的办法进行注入

情形一:当页面有回显但是没有显示位的时候,可以选择报错注入,常见的报错函数有(floor(),exp(),updatexml(),exteractvalue()等函数)

情形二:当页面没哟明确的回显信息的时候,但是在输入精确和缺点的SQL语句的时候页面不同,则可以利用(ascii(),substr(),length(),concat()函数)

情形三:当页面没有回显也没有报错信息的时候,可以利用韶光盲注(sleep()函数)去获取数据库中的数据

还有其他的SQL注入如宽字节注入,base64注入,cookie注入,http头部注入,二次注入,堆叠注入等。

其他SQL注入的方法详解

宽字节注入

事理:

宽字节注入发生的位置便是PHP发送要求到MYSQL时字符集利用character_set_client设置值进行了一次编码。
在利用PHP连接MySQL的时候,当设置“character_set_client = gbk”时会导致一个编码转换的问题,也便是我们熟习的宽字节注入

由于用了gbk编码,使这个为一个两字节,绕过了单引号闭合,逃逸了转义

绕过办法

已知我们的提交数据会被加入\,\的编码为%5c,我们在后面加上%df后变为了%df%5c,变成一个繁体汉字運,变成了一个有多个字节的字符。

防御办法

利用addslashes()函数,这个函数的浸染便是转义SQL语句中利用字符串中的分外字符,有单引号('),双引号("),反斜杠(\)

利用mysql_reaal_escape_string()函数,该函数的浸染是转义SQL语句中利用的字符串的分外字符,影响的字符有\x00,\n,\r,\,‘,",\x1a等。

堆叠注入

事理

堆叠注入便是将两条SQL语句合并在一起进行实行,两条语句可以利用分号(;)来分割他和union联合注入的差异便是union的实行的语句是有限的,可以用来实行查询语句,而堆叠注入可以实行的是任意的语句。

局限性和条件

堆叠注入的局限性便是不是每一个环境中可以实行,可能受到数据库引擎不支持,权限不敷也不支持;在php中须要mysqli_multi_query()函数才能支持多条语句的查询,总结下来就须要以下三个条件

目标存在SQL注入漏洞

目标未对(;)进行过滤

目标中间层查询数据库信息时可同时实行多条SQL语句

利用办法

知足以上条件的目标可以直接在?id=1;后面直接插入SQL语句,例如?id=-1;insert into users(id,username,password) values(12,'jack','testjack')--+

二次注入

事理

二次注入可以理解为,攻击者布局的恶意数据存储在数据库后,恶意数据被读取并进入到SQL查询语句所导致的注入。

步骤

第一步插入恶意数据,在插入数据的时候,对个中分外字符进行了转义处理,在写入数据库的时候又保留了原来的数据

第二步引用恶意数据,由于开拓者默认存入的数据库的数据都是安全的,在查询的时候,可以直接从数据库中获取恶意的数据,没有进行检测,进而导致二次注入。

防御办法

利用预处理和数据绑定的办法

对数据的流动进行检测,无论是来自客户真个数据还是来自数据库的数据,都要对其进行过滤,转义(mysql_escape_string,mysql_real_escape_string)。

联合查询

事理

可以利用union的情形,不做过滤,或者是可以绕过过滤的关键字

步骤

依次判断类型,字段数,回显点,依次爆库名,表名,字段名,数据

布局payload进行注入

?id=1'union select 1,2,3 --

?name=1xxxx' union select group_concat(schema_name),2 from information_schema.schemata--+

利用条件

必须使前一个查询的结果为空

union之后的查询字段数必须和union之前的查询字段数相同

防御办法

添加waf对关键字union进过滤

代码层对关键字进行匹配过滤

利用安全的框架

Cookie注入

顾名思义便是后真个cookie信息存放到数据库中,注入事理和SQL注入一样,便是注入点是http要求中的cookie

User-Agent

在user-Agent字段之后加入注入语句

读写注入

事理

当我们知道web资源存储的位置,并且对改路径有读写权限的时候,我们就可以利用文件读写注入,要利用union来进行注入

利用条件

知道文件的路劲

可以利用union查询

写文件的时候没有对单引号做过滤,可以利用into_outfile()函数

读文件的时候对web目录下有写的权限,即在mysql.ini文件中有字段secure-file-priv=''不做设置

针对所有数据库的注入流程

找到注入点

尽可能找到可以利用的注入点,半段数据的类型是get型还是post型,然后再做进一步利用

判断数据库的类型,然后做出对应的闭合办法

首先判断数据库是那种数据库,可以根据每个数据库的特色来进行考试测验

获取对应的信息

利用union注入或者盲注或者其他注入的办法来布局payload,然后获取信息

申明:本文仅供技能互换,请自觉遵守网络安全干系法律法规,切勿利用文章内的干系技能从事造孽活动,如因此产生的统统不良后果与文章作者无关。

本文作者:黑脸未jack, 原文来源:FreeBuf.COM