CTF-sql-宽字节注入

本文章主要涉及sql宽字节注入注入的原理讲解,如有错误,望指出。(附有目录,如需查看请点右下角)

一、下图为本次文章所使用到 user表,该表所在的数据库为 test。

CTF-sql-宽字节注入

二、首先介绍一下本篇文章所用到的知识点:

常用到的url编码:

  • 空格:%20
  • 单引号:%27
    • 在sql注入中,单(双)引号的应用十分重要,他决定着你能否从原有的一对引号之间逃逸出
  • 井号(#):%23
    • 在sql注入中,#号常被用来注释,即在使用单引号与原有一对单引号的第一个单引号进行闭合之后,用#将原有的一对单引号的第二个单引号注释掉,否则会出现语法错误。
  • 反斜杠():%5C
    • 在sql注入中,\号常用来进行反编译。

addslashes函数(php4,php5,php7):

格式:string addslashes(string $str)
作用:返回字符串,该字符串为了数据库查询语句等的需要在某些字符前加上了反斜线(\)。这些字符是单引号(‘)、双引号(")、反斜杠(\)与 NULL(NULL字符)

为什么使用该函数:

在单(双)引号,反斜线,NULL前加上反斜线会起到转义的作用:以单引号为例,再加上反斜线之后,单引号就会被转义,就是说,此时的单引号仅仅是一个单引号,但已经不具备单引号原有的语法功能了(相当于单引号就仅仅是一个字符串了)这样就可以在一定程度上对sql注入进行一定的预防。

那么我们应该如何从addslashes函数中逃逸出来呢?

存在两种解决方法:

  • "" 的前面再加一个 ""(或单数个),变成 "\‘",这样""就被转义了,"‘"逃出了限制。
  • 使 "" 消失掉。
    以上两种方法中,本节课讲述的是第二种,即利用宽字节注入把反斜杠弄没。

宽字节注入的原理:

原理:宽字节注入是利用mysql的一个特性,mysql在使用GBK编码的时候,会认为两个字符是一个汉字(前一个asci码要大于128,才到汉字的范围)
eg:

CTF-sql-宽字节注入

在用hackbar进行汉字输入的时候你会发现,那段汉字就会变成一段百分号编码,这样我们就可以利用这个原理从而把反斜杠干掉。就如上图,在进行转义之后,原本是两个百分号变成了三个,又因为汉字是由两个百分号组成,所以系统就会识别前两个百分号成一个汉字,从而将“\”干掉。%5c就是“\”

CTF-sql-宽字节注入

上一篇:pikachu---SQL注入(2)


下一篇:mac-改造你的terminal