2020-10-03 19:01:32
宽字节注入—漏洞记录-墨者学院靶场操作记录
在墨者学院的靶场中,我们针对宽字节注入漏洞进行了详细的记录和操作。以下是具体的步骤和结果:
一、漏洞发现与验证
目标IP与初步测试
已知目标IP为:
在URL中加入单引号后,页面并未报错,初步判断可能存在注入点,但需要进一步验证。
宽字节注入验证
在URL中加入%df(GBK编码中的双字节字符前缀),并再次加入单引号,页面报错,说明是单引号闭合的SQL注入漏洞,且可以通过宽字节注入绕过转义。
二、SQL注入过程
判断列数
使用order by语句判断数据库中的列数。
当列数为5时,页面返回正常;当列数为6时,页面报错。因此,确定数据库中的列数为5。
联合查询
使用联合查询语句,尝试获取数据库中的信息。
通过测试,发现第3列和第5列可以被利用来返回数据。
查询当前数据库和用户
使用联合查询语句,查询当前数据库的名称和用户信息。
成功获取到数据库名称为security,用户信息为root@localhost。
查询表格
继续使用联合查询语句,查询数据库中的表格信息。
成功获取到多个表格名称,包括stormgroup_member等。
查询字段与数据
针对stormgroup_member表格,查询其字段信息。
注意:由于单引号被过滤,需要使用HEX编码来绕过。
成功获取到字段名称,包括name和password。
使用联合查询语句,爆出name和password字段的内容。
password字段的内容为MD5加密后的字符串,需要进行解密。
三、宽字节注入原理
何时使用
当提交的数据被自动加入进行转义时,可以尝试使用宽字节注入来绕过转义。
原理说明
PHP发送请求到MySQL时,会先对数据进行魔术引号的处理。
如果PHP的编码格式为UTF-8,而数据库的编码格式为GBK,那么提交的%df字符和转译的反斜杠在GBK编码下会组成一个新的汉字,从而逃逸出单引号闭合。
这是因为GBK是双字节编码,而UTF-8是三字节编码,两者在处理多字节字符时存在差异。
成立前提
宽字节注入漏洞的成立前提是PHP的编码格式和数据库的编码格式不同,特别是字符编码不同。
常见的组合是PHP使用UTF-8编码,而数据库使用GBK编码。
四、总结
通过本次墨者学院靶场的宽字节注入漏洞记录,我们深入了解了宽字节注入的原理和操作步骤。在实际应用中,需要注意PHP和数据库的编码格式是否一致,以避免出现宽字节注入漏洞。同时,对于存在注入风险的应用,应采取相应的安全措施进行防范。