0x00
这道题整体思路是变量覆盖:
PHP中会产生变量覆盖的函数有以下几种可能:
-
$$使用不当(PHP中这种写法表示可变变量)
-
extract函数使用不当
-
parse_str函数使用不当(本题就是这个函数导致的变量覆盖)
-
import_request_variables使用不当
-
开启全局变量
以上这些变量覆盖的例子可查看如下博客:https://www.jianshu.com/p/a4d782e91852
0x01
分析源代码
打开web页面看到源代码如下:
拿到源代码,一开始并不是能够直接看懂,PHP中有很多不常用的函数,所以就一点点查各个函数的功能,下面贴出对源代码的分析结果:
0x02
思路的转折
-
经过分析代码,会不会想到要破解hashed_key,但是那是不可逆的,想通过碰撞得到什么时候才能拿到答案???
-
PHP弱类型?又分析分析代码,不是弱类型
-
有没有疑惑,为什么接收的都是URL传递的参数,action用的是$_SERVER接收的而key是$_GET接收的(这个是后来在做其他题时想到的,第一想法就是变量覆盖,只有这样才能够顺利的解决哈希值这一步)
知道了是变量覆盖就好办了,查了查PHP变量覆盖就看到了parse_url函数
-
OK,思路有了,下面就开始构造payload了,通过URL传参把hashed_key覆盖就好了
0x03
构造payload如下:
http://39.100.83.188:8066/?action=auth&key=123&hashed_key=a665a45920422f9d417e4867efdc4fb8a04a1f3fff1fa07e998e86f7f7a27ae3
后面那个hashed_key是key这个参数的值经过sha256得到的结果
然后提交就看到了下面的页面