宽字节注入—漏洞记录-墨者学院靶场操作记录

宽字节注入—漏洞记录-墨者学院靶场操作记录
最新回答
浅夏轻唱

2020-10-03 19:01:32

宽字节注入—漏洞记录-墨者学院靶场操作记录

在墨者学院的靶场中,我们针对宽字节注入漏洞进行了详细的记录和操作。以下是具体的步骤和结果:

一、漏洞发现与验证

  1. 目标IP与初步测试

    已知目标IP为:

    http://219.153.49.228:41742/new_list.php?id=1

    在URL中加入单引号后,页面并未报错,初步判断可能存在注入点,但需要进一步验证。

  2. 宽字节注入验证

    在URL中加入%df(GBK编码中的双字节字符前缀),并再次加入单引号,页面报错,说明是单引号闭合的SQL注入漏洞,且可以通过宽字节注入绕过转义。

二、SQL注入过程

  1. 判断列数

    使用order by语句判断数据库中的列数。

    当列数为5时,页面返回正常;当列数为6时,页面报错。因此,确定数据库中的列数为5。

  2. 联合查询

    使用联合查询语句,尝试获取数据库中的信息。

    通过测试,发现第3列和第5列可以被利用来返回数据。

  3. 查询当前数据库和用户

    使用联合查询语句,查询当前数据库的名称和用户信息。

    成功获取到数据库名称为security,用户信息为root@localhost。

  4. 查询表格

    继续使用联合查询语句,查询数据库中的表格信息。

    成功获取到多个表格名称,包括stormgroup_member等。

  5. 查询字段与数据

    针对stormgroup_member表格,查询其字段信息。

    注意:由于单引号被过滤,需要使用HEX编码来绕过。

    成功获取到字段名称,包括name和password。

    使用联合查询语句,爆出name和password字段的内容。

    password字段的内容为MD5加密后的字符串,需要进行解密。

三、宽字节注入原理

  1. 何时使用

    当提交的数据被自动加入进行转义时,可以尝试使用宽字节注入来绕过转义。

  2. 原理说明

    PHP发送请求到MySQL时,会先对数据进行魔术引号的处理。

    如果PHP的编码格式为UTF-8,而数据库的编码格式为GBK,那么提交的%df字符和转译的反斜杠在GBK编码下会组成一个新的汉字,从而逃逸出单引号闭合。

    这是因为GBK是双字节编码,而UTF-8是三字节编码,两者在处理多字节字符时存在差异。

  3. 成立前提

    宽字节注入漏洞的成立前提是PHP的编码格式和数据库的编码格式不同,特别是字符编码不同。

    常见的组合是PHP使用UTF-8编码,而数据库使用GBK编码。

四、总结

通过本次墨者学院靶场的宽字节注入漏洞记录,我们深入了解了宽字节注入的原理和操作步骤。在实际应用中,需要注意PHP和数据库的编码格式是否一致,以避免出现宽字节注入漏洞。同时,对于存在注入风险的应用,应采取相应的安全措施进行防范。