TPCTF-RE

admin 2025年3月12日16:58:27评论12 views字数 6150阅读20分30秒阅读模式

01
TPCTF-RE
stone-game
TPCTF-RE

这题给了个nc是个小游戏 

玩游戏发现规律先把前四段取完,然后就会剩下两段,在去这两段就能赢得本轮游戏

TPCTF-RE
TPCTF-RE
TPCTF-RE

也就是说赢一轮只需要两次输入操作,通过写脚本提取每轮要取的部分构造payload发送过去即可在100 轮里面获胜90轮

TPCTF-RE
TPCTF-RE
from pwn import *context.log_level = "debug"p = remote("1.95.128.179",3026)p.sendline("n")for i in range(101):    payload = ""    p.recvuntil("Current stone count:")    p.recvuntil("Segment 1:")    num = p.recvuntil("stones").decode()    num = num.split()[0]    payload += str(num)    payload +=" "    p.recvuntil("Segment 2:")    num = p.recvuntil("stones").decode()    num = num.split()[0]    payload += str(num)    payload +=" "    p.recvuntil("Segment 3:")    num = p.recvuntil("stones").decode()    num = num.split()[0]    payload += str(num)    payload +=" "    p.recvuntil("Segment 4:")    num = p.recvuntil("stones").decode()    num = num.split()[0]    payload += str(num)    payload +=" 0 0 0"    p.sendline(payload)    #seconde    p.recvuntil("Current player: AI")    payload = "0 0 0 0"    p.recvuntil("Segment 5:")    num = p.recvuntil("stones").decode()    num = num.split()[0]    payload += " "    payload += str(num)    p.recvuntil("Segment 6:")    num = p.recvuntil("stones").decode()    num = num.split()[0]    payload += " "    payload += str(num)    p.recvuntil("Segment 7:")    num = p.recvuntil("stones").decode()    num = num.split()[0]    payload += " "    payload += str(num)    p.sendline(payload)    p.recvuntil("You won this round!")p.interactive()
TPCTF-RE

 

02
TPCTF-RE
linuxpdf
TPCTF-RE

很高级的一题,没想到linux还能在pdf里面哈哈哈哈。

使用文本编辑器打开这pdf文件可以发现大部分的js代码

TPCTF-RE

在这里面可以看见很多类似base编码的东西 

通过这个结构可以猜测是 文件名:文件数据 

尝试用标准的base去解发现结果不对

在项目源码里面有这个加密算法

 

TPCTF-RE
TPCTF-RE

通过010选择起始位置拿到embedded_files数据

TPCTF-RE

先base64decode在解压然后写入即可

TPCTF-RE

 

import base64import zlibembedded_files = {	}#自行添加内容for filename,data in embedded_files.items():     with open(f"file/{filename}","wb"as f:        zipdata = base64.b64decode(data        data = zlib.decompress(zipdata)         f.write(data)

注意,运行的时候报错,根据报错去添加对应文件夹

TPCTF-RE

貌似是要找checkflag文件,但是这里面文件名都对不上

TPCTF-RE
TPCTF-RE

一个一个文件分析发现这个a9文件貌似就是checkflag

TPCTF-RE

risc-v架构,ida无法直接看到伪代码,我们使用ghidraRun

TPCTF-RE

跟进FUN_00102948,根据代码改一下符号

TPCTF-RE

加密是一个标准的md5 

看一下check

TPCTF-RE

就是一个标准的check

我们回到main去分析

TPCTF-RE

这里可以看见输入每次传的input+i但是你认为每次只会加密一个字符吗? 

并不是,因为在Encrypt里面有个strlen,他会从input+i开始取值一直到�

第一次循环就是整个输入 

第二次循环就是对input[1:]进行md5然后和enc去check 

第三次就是input[2:]进行md5然后和enc去check 

得从后往前爆破 

我们可以确定的是最后一位是}这里我直接给爆破脚本了不过多解释了

TPCTF-RE
import hashlibimport string
def GetHash(Enc):    Hash = ""    for i in Enc:        if i != 0:            Hash += hex(i)[2:].rjust(2"0")    return Hash
enc = [    0x380xf80x8a0x3b0xc50x700x210x0f0x8a0x8d0x950x580x5b0x460xb00x650x00,    0x830x050x5a0xe80x0c0xdc0x8b0xd50x930x780xb80x620x8d0x730x3f0xcb0x00,    0xfa0x7d0xaf0xfb0xd70xac0xec0x130xb00x690x5d0x930x5a0x040xbc0x0f0x00,    0xc20x9c0xc00xfd0x380x010xc70xfd0xd30x150xc70x820x990x9b0xd40xcb0x00,    0x2b0xa20xd00x1a0xf10x2d0x9b0xe30x1a0x2b0x440x320x3c0x1a0x4f0x470x00,    0xdd0xee0xba0xf00x020x520x7a0x9e0xad0x780xbd0x160x680x450x730xcc0x00,    0xbf0x950xb80x990x340xa10xb50x550xe10x090x0f0xec0xdf0xd30xda0x9f0x00,    0xb60x420x2c0x300xb00x290x380x530x5f0x8e0x640x8d0x600xa80x7b0x940x00,    0x080xc10xb70x660x430xaf0x8d0xd50x0c0xb00x6d0x7f0xdd0x3c0xf80xed0x00,    0x420xd60x970x190xf90x700x880xf00x650x400xf40x120xdc0x170x060xfb0x00,    0xa10xf20x3d0xa60x160x150x400x0e0x7b0xd90xea0x720xd60x350x670xeb0x00,    0x4e0x240x6f0x0a0x5d0xd30xce0x590x460x5f0xf30xd00x2e0xc40xf90x840x00,    0xb80xcf0x250xf90x630xe80xe90xf40xc30xfd0xda0x340xf60xf00x1a0x350x00,    0x2d0x980xd80x200x830x5c0x750xa90xf90x810xad0x4d0xb80x260xbf0x8e0x00,    0x700x2e0xad0x080xa30xdd0x560xb30x130x4c0x7c0x380x410xa60x520xaa0x00,    0xd20xd50x570xb60x130x660x2b0x920xf30x990xd60x120xfb0x910x590x1e0x00,    0xe40x420x2b0x630x200xed0x980x9e0x7e0x3c0xb90x7f0x360x9c0xba0x380x00,    0x710x800x350x860xc60x700x590xdd0xa30x250x250xce0x840x4c0x500x790x00,    0x830xb30x710x800x1d0x0a0xde0x070xb50xc40xf50x1e0x8c0x620x150xe20x00,    0xb00xd10xb40x880x5b0xc20xfd0xc50xa60x650x260x690x240x480x6c0x5f0x00,    0x790x2c0x9e0x7f0x050xc40x070xc50x6f0x3b0xec0x4c0xa70xe50xc10x710x00,    0x380x550xe50xa50xbb0xc10xcb0xe10x8a0x6e0xab0x5d0xd90x7c0x060x3c0x00,    0x880x6d0x450xe00x450x1b0xbb0xa70xc00x340x1f0xe90x0a0x950x4f0x340x00,    0x3a0x430x7c0xbe0x650x910xea0x340x890x640x250x850x6e0xae0x7b0x650x00,    0x340x300x490x670xa00x670x300x8a0x760x700x1f0x050xc00x660x850x510x00,    0xd60xaf0x7c0x4f0xed0xcf0x2b0x670x770xdf0x8e0x830xc90x320xf80x830x00,    0xdf0x880x930x1e0x7e0xef0xdf0xcc0x2b0xb80x0d0x4a0x4f0x570x100xfb0x00,    0xcb0x0f0xc80x130x750x5a0x450xce0x590x840xbf0xba0x150x840x7c0x1e]
NewEnc = []for i in range(len(enc) // 17):    NewEnc.append(enc[i*17:(i+1)*17])
flag = "}"NewEnc = NewEnc[::-1]for i in NewEnc:    target = GetHash(i)    for char in string.printable:        if hashlib.md5((char + flag).encode()).hexdigest() == target:            flag = char + flag            break
print(flag)

 

TPCTF{mag1c_RISC-V_linux-PDF}

 

 

 

 

 

03
TPCTF-RE
portable
TPCTF-RE

 

这个题的话动调一下就好了 

到最后加密就一个xor

TPCTF-RE

厨子一把梭

TPCTF-RE

 

04
TPCTF-RE
hase
TPCTF-RE

 

一共三段flag 

第二段直接用TilelayerPro就能看到

TPCTF-RE

第一段的话需要游戏玩通关去获取 

通过内存搜索找到分数地址

TPCTF-RE

右击过去发现当前得分地址的边上貌似就是目标得分

TPCTF-RE

0x14=20 

地址是83 

那我们一直把目标得分控制在0是不是可以直接通关? 

这里就需要使用Cheats了,它在fceux64的tools里面

TPCTF-RE

填一下地址和值 

然后回到游戏

TPCTF-RE

拿到第一部分 

现在找第二部分,我猜测是有隐藏关卡,尝试改关直接弹hacker,有作弊检测

TPCTF-RE

然后我在PPU Viewer中找到了part3 

然后我就发现了

TPCTF-RE

当我光标移到这个一个字符上面这里就会显示一个id 

我尝试将FLAG组合起来然后到010里面去搜索看看有没有上面线索

TPCTF-RE

找到了两个,我猜测这两个分别是part1和part2 

我通过part最后一个字符确定

TPCTF-RE

这是pt2 

30 221 39 D1 2E D9 3D D6 20 2D D3 33 3D P L A Y 1 N 9 _ 6 @ M 3 S _ 

 

然后自己对照一下得到PLAY1N9_6@M3S_

最终

 TPCTF{D0_Y0U_L1KE_PLAY1N9_6@M3S_ON_Y0UR_N3S?}

 

TPCTF-RE

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

欢迎师傅们加入我们:
ZeroPointZero安全团队纳新群1:553624735

有兴趣的师傅欢迎一起来讨论!

团队纳新简历投递邮箱:ctf[email protected]

TPCTF-RE

END

原文始发于微信公众号(ZeroPointZero安全团队):TPCTF-RE

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

发表评论

匿名网友 填写信息