unserialize3
这里有个_wakeup函数漏洞,下面考虑如何绕过
大括号前面的1 就是xctf的属性变量的个数,下面将它修改为2,code参数提交
总结: 找到需要提交的参数,序列化的一些知识,基本代码的编写这道题的目的是绕过wakeup函数
实验吧(天网管理系统)
一开始打算用md5在搜索框绕过的,结果不成功
这样就成功了,不是很懂,源码要求get提交,输入的话不就post了嘛,不管了
一开始我对???是有误解的,以为只要username和passwd相等就可以了,以为是可以任意赋值的,后来才知道???是后台已经规定了的,你是猜不到的
bool类型的true跟任意字符串可以弱类型相等。因此我们可以构造bool类型的序列化数据,无论比较的值是什么,结果都为true。
这样改一下(a代表array,s代表string,b代表bool,而数字代表个数/长度)
**bugku(welcome to bugkuctf)
查看源码
又是file_get_contents,根据他的提示构造
没发现什么,然后根据提示的hint.php
看到了类似__tostring这类的,立马联想到了序列化,与触发这类函数的条件
这一步感觉就感觉很不符合逻辑了,不过很合理,做过的很多题都是要看一下index.php的文件内容,果然菜是原罪,并没有想到这个
然后就审计这三个文件吧(感觉真心绕),最终目的肯定是要让他输出good啦,那就逆回去,
_tostring()方法里面又定义了如果$file这个属性有赋值的话,那么就会输出这个文件的内容(输出成一个字符串)
这里就是让他输出flag.php的值
要这样构造,不太明白为什么file的值不用php伪协议的形式,目的就是要调用hint.php文件,再结合include函数,所以file的值一定是和hint.php有关的
一开始不明白password的值和这道题有什么关系,不知道怎么串联的,个人认为就是Flag这里,记住目的是输出flag.php的内容,而触发条件就是__tostring下定义的file规定为flag.php
这里的Flag大括号下的file,简单理解为定义一个file变量,定义后下面才能使用,new flag是用来触发class flag的(指的是两个文件之间)
这道题我做着很费劲,想了一整天
被卡住的地方有: password是否可以不用提交
password怎么与其他三个参数结合起来,对__tostring函数触发环境的不熟悉(主要是对另一道反序列化题的误导,那道题是修改了属性,根本上还是基本功不扎实)
还有一个未解决的问题:file=hint.php为什么不用伪协议
(额,刚说完没解决,就想到了一个可能的原因,用伪协议使用来读源码的,这是需要审计的,当后面我们需要使用hint.php的时候,我们不需要知道它的源码,直接file=hint.php调用就行了,这里要弄明白你的目的是读取源码还是调用文件,突然觉得好有道理,haha)
记住:没事多看index.php
(关于php://filter的应用 https://blog.csdn.net/wy_97/article/details/77432002)