二次编码注入

Posted by Tattoo on 2019-01-18
Estimated Reading Time 2 Minutes
Words 621 In Total
Viewed Times

二次编码注入原理

宽字节注入和二次编码注入是在面对PHP代码或配置,对输入的单引号进行转义,在处理用户输入数据时存在问题,可以绕过转义。

宽字节注入:
  GBK编码处理编码的过程存在问题,可构造数据消灭斜杠(\)

二次编码注入:
  urldecode()与PHP本身处理编码时,两者配合失误,可构造数据消灭斜杠(\)

  • 正常的注入流程:

  当我们输入id=1%27,而%27就是单引号的URL编码,PHP自身会对输入的内容进行一次编码转换变为id=1’,既然出现了单引号程序会对的那引号进行转义,就变成了id=1\‘,将这个带入SQL查询,这样不能进行注入的,因为键入的单引号没有对SQL语句内的的引号进行闭合。

如果PHP代码中使用了urldecode()等编码函数,同时函数放在了一个尴尬的位置,与PHP自身编码配合失误。

  • 二次编码注入流程:

  当我们输入id=1%2527,PHP自身编码转换之后,会把%25进行编码,而%25就是百分号,就变成了id=1%27,而这里不再有单引号。因为程序已经进行了一次转换,不会再对%27进行编码转换,所以最终会对id=1%27进行处理,而这里没有单引号,所以不会触发转义。如果程序在恰当的位置使用的了urldecode()等编码函数,会将id=1%27转换成id=1’,从而造成了二次编码注入。

总的来说就是,程序对%25进行了转换,不会再对%27转换,而是urldecode()等编码函数对%27进行了转换,变成了单引号。

为什么要进行编码?
  原始的格式并不适合传输。比如+,=,&,;,等符号会与原有的格式发生冲突,所以要对他们进行编码转换。

二次编码注入方法

方法:
  在注入点后键入%2527,然后按照正常的注入流程开始注入

发现二次编码注入

  • 黑盒测试:
      在可能的注入点后面键入’%2527’,之后进行注入测试

  • 白盒测试:
      1.是否使用urldecode()函数等编码函数
      2.函数是否在转义方法之后


If you like this blog or find it useful for you, you are welcome to comment on it. You are also welcome to share this blog, so that more people can participate in it. If the images used in the blog infringe your copyright, please contact the author to delete them. Thank you !