当前位置: 代码迷 >> 综合 >> ISCC2019-WEB4-Writeup
  详细解决方案

ISCC2019-WEB4-Writeup

热度:3   发布时间:2023-12-26 14:10:48.0

0x00

这道题整体思路是变量覆盖:

PHP中会产生变量覆盖的函数有以下几种可能:

  1. $$使用不当(PHP中这种写法表示可变变量)

  2. extract函数使用不当

  3. parse_str函数使用不当(本题就是这个函数导致的变量覆盖)

  4. import_request_variables使用不当

  5. 开启全局变量

    以上这些变量覆盖的例子可查看如下博客:https://www.jianshu.com/p/a4d782e91852

0x01

分析源代码

打开web页面看到源代码如下:

拿到源代码,一开始并不是能够直接看懂,PHP中有很多不常用的函数,所以就一点点查各个函数的功能,下面贴出对源代码的分析结果:

 

0x02

思路的转折

  1. 经过分析代码,会不会想到要破解hashed_key,但是那是不可逆的,想通过碰撞得到什么时候才能拿到答案???

  1. PHP弱类型?又分析分析代码,不是弱类型

  2. 有没有疑惑,为什么接收的都是URL传递的参数,action用的是$_SERVER接收的而key是$_GET接收的(这个是后来在做其他题时想到的,第一想法就是变量覆盖,只有这样才能够顺利的解决哈希值这一步)

            知道了是变量覆盖就好办了,查了查PHP变量覆盖就看到了parse_url函数

  1. OK,思路有了,下面就开始构造payload了,通过URL传参把hashed_key覆盖就好了

0x03

构造payload如下:

http://39.100.83.188:8066/?action=auth&key=123&hashed_key=a665a45920422f9d417e4867efdc4fb8a04a1f3fff1fa07e998e86f7f7a27ae3

后面那个hashed_key是key这个参数的值经过sha256得到的结果

然后提交就看到了下面的页面