24DasctfX0x401

strange_php | 复现

差一步但也差亿点啊,这个pop链是真没有想到,还得练意识

  1. 一眼应该是反序列化?
  2. 是password_hash创建的密码
  3. 可能考点
    1. 有文件覆写phar?
    2. 有session,反序列化?
    3. 有sleep竞争
    4. login处进入welcome.php
    5. login处重置了session为user_id
  4. 切入点好多,得慢慢看了
    1. 关于session反序列化,user_id其实是不可控的,可控的只有username,session中存有user_id和file_path
    2. 思路的切入在于可控点和利用点
      1. 可控点
        1. deleteMessage中的path
        2. User中可以通过控制username来写入log/md5(username).txt文件,main函数结束后调用__destruct
      2. 利用点
        1. 应该是在welcome.php中
  5. 尝试
    1. 注册用户admin,报错,有重复的用户,不错,这里也没有权限控制需要用到的,不管了,admin:admin,emm,居然进了,但是不是考点;接下来就是welcome.php中的利用点了
    2. 这里有一个file_existed在delete处,而且也完全可控,打phar?那么利用点在哪里?有一个__set()可以读取文件?readMessage()中也有阿?
      1. however,__set()处是可控的
      2. 找pop链子了
        1. 马萨卡还要套一个session反序列化吗?这个__set还要指定是filePath,找不到了555

        2. 看看gxngxn的

          1. 注意最后是直接访问即可,因为是./不是/
          1
          2
          3
          4
          5
          6
          7
          8
          9
          // 利用pdo设置pop链,很强大gxngxn
          User->__destruct()
          User->log()
          User->conn->get_connection()
          UserMessage->__set(...)
          // 可以成功读取到/flag文件
          // 写入后delete触发

          // 随后访问一下./log/md5(username).txt即可

Summary

  1. session_start时进行加载?