Post

HackTheBox Metagaming Challenge

Explore the basics of cybersecurity in the Metagaming Challenge on Hack The Box. This medium-level Challenge introduces encryption reversal and file handling concepts in a clear and accessible way, perfect for beginners.

https://app.hackthebox.com/challenges/695

Description

You come across an enemy faction, who have banded together and gathered their resources. You’ll need to outwit them, thinking outside the box - can you beat them before they even begin to run?

Exploitation

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#!/usr/bin/env python3
from z3 import *

s = Solver()
flag = [BitVec(f'flag_{i}', 32) for i in range(40)]
for i in range(len(flag)):
    s.add(flag[i] >= 33)
    s.add(flag[i] <= 127)
payload = 'lIlIIIIl(8, 0, 2769503260), lIlIIIIl(10, 0, 997841014), lIlIIIIl(19, 12, 11), lIlIIIIl(2, 0, 4065997671), lIlIIIIl(5, 13, 11), lIlIIIIl(8, 0, 690011675), lIlIIIIl(15, 11, 11), lIlIIIIl(8, 0, 540576667), lIlIIIIl(2, 0, 1618285201), lIlIIIIl(8, 0, 1123989331), lIlIIIIl(8, 0, 1914950564), lIlIIIIl(8, 0, 4213669998), lIlIIIIl(21, 13, 11), lIlIIIIl(8, 0, 1529621790), lIlIIIIl(10, 0, 865446746), lIlIIIIl(2, 10, 11), lIlIIIIl(8, 0, 449019059), lIlIIIIl(16, 13, 11), lIlIIIIl(8, 0, 906976959), lIlIIIIl(6, 10, 10), lIlIIIIl(8, 0, 892028723), lIlIIIIl(10, 0, 1040131328), lIlIIIIl(2, 0, 3854135066), lIlIIIIl(2, 0, 4133925041), lIlIIIIl(2, 0, 1738396966), lIlIIIIl(2, 12, 12), lIlIIIIl(8, 0, 550277338), lIlIIIIl(10, 0, 1043160697), lIlIIIIl(2, 1, 1176768057), lIlIIIIl(10, 1, 2368952475), lIlIIIIl(8, 12, 11), lIlIIIIl(2, 1, 2826144967), lIlIIIIl(8, 1, 1275301297), lIlIIIIl(10, 1, 2955899422), lIlIIIIl(2, 1, 2241699318), lIlIIIIl(12, 11, 10), lIlIIIIl(8, 1, 537794314), lIlIIIIl(11, 13, 10), lIlIIIIl(8, 1, 473021534), lIlIIIIl(17, 12, 13), lIlIIIIl(8, 1, 2381227371), lIlIIIIl(10, 1, 3973380876), lIlIIIIl(10, 1, 1728990628), lIlIIIIl(6, 11, 13), lIlIIIIl(8, 1, 2974252696), lIlIIIIl(0, 11, 11), lIlIIIIl(8, 1, 1912236055), lIlIIIIl(2, 1, 3620744853), lIlIIIIl(3, 10, 13), lIlIIIIl(2, 1, 2628426447), lIlIIIIl(11, 13, 12), lIlIIIIl(10, 1, 486914414), lIlIIIIl(16, 11, 12), lIlIIIIl(10, 1, 1187047173), lIlIIIIl(14, 12, 11), lIlIIIIl(2, 2, 3103274804), lIlIIIIl(13, 10, 10), lIlIIIIl(8, 2, 3320200805), lIlIIIIl(8, 2, 3846589389), lIlIIIIl(1, 13, 13), lIlIIIIl(2, 2, 2724573159), lIlIIIIl(10, 2, 1483327425), lIlIIIIl(2, 2, 1957985324), lIlIIIIl(14, 13, 12), lIlIIIIl(10, 2, 1467602691), lIlIIIIl(8, 2, 3142557962), lIlIIIIl(2, 13, 12), lIlIIIIl(2, 2, 2525769395), lIlIIIIl(8, 2, 3681119483), lIlIIIIl(8, 12, 11), lIlIIIIl(10, 2, 1041439413), lIlIIIIl(10, 2, 1042206298), lIlIIIIl(2, 2, 527001246), lIlIIIIl(20, 10, 13), lIlIIIIl(10, 2, 855860613), lIlIIIIl(8, 10, 10), lIlIIIIl(8, 2, 1865979270), lIlIIIIl(1, 13, 10), lIlIIIIl(8, 2, 2752636085), lIlIIIIl(2, 2, 1389650363), lIlIIIIl(10, 2, 2721642985), lIlIIIIl(18, 10, 11), lIlIIIIl(8, 2, 3276518041), lIlIIIIl(15, 10, 10), lIlIIIIl(2, 2, 1965130376), lIlIIIIl(2, 3, 3557111558), lIlIIIIl(2, 3, 3031574352), lIlIIIIl(16, 12, 10), lIlIIIIl(10, 3, 4226755821), lIlIIIIl(8, 3, 2624879637), lIlIIIIl(8, 3, 1381275708), lIlIIIIl(2, 3, 3310620882), lIlIIIIl(2, 3, 2475591380), lIlIIIIl(8, 3, 405408383), lIlIIIIl(2, 3, 2291319543), lIlIIIIl(0, 12, 12), lIlIIIIl(8, 3, 4144538489), lIlIIIIl(2, 3, 3878256896), lIlIIIIl(6, 11, 10), lIlIIIIl(10, 3, 2243529248), lIlIIIIl(10, 3, 561931268), lIlIIIIl(11, 11, 12), lIlIIIIl(10, 3, 3076955709), lIlIIIIl(18, 12, 13), lIlIIIIl(8, 3, 2019584073), lIlIIIIl(10, 13, 12), lIlIIIIl(8, 3, 1712479912), lIlIIIIl(18, 11, 11), lIlIIIIl(2, 3, 2804447380), lIlIIIIl(17, 10, 10), lIlIIIIl(10, 3, 2957126100), lIlIIIIl(18, 13, 13), lIlIIIIl(8, 3, 1368187437), lIlIIIIl(17, 10, 12), lIlIIIIl(8, 3, 3586129298), lIlIIIIl(10, 4, 1229526732), lIlIIIIl(19, 11, 11), lIlIIIIl(10, 4, 2759768797), lIlIIIIl(1, 10, 13), lIlIIIIl(2, 4, 2112449396), lIlIIIIl(10, 4, 1212917601), lIlIIIIl(2, 4, 1524771736), lIlIIIIl(8, 4, 3146530277), lIlIIIIl(2, 4, 2997906889), lIlIIIIl(16, 12, 10), lIlIIIIl(8, 4, 4135691751), lIlIIIIl(8, 4, 1960868242), lIlIIIIl(6, 12, 12), lIlIIIIl(10, 4, 2775657353), lIlIIIIl(16, 10, 13), lIlIIIIl(8, 4, 1451259226), lIlIIIIl(8, 4, 607382171), lIlIIIIl(13, 13, 13), lIlIIIIl(10, 4, 357643050), lIlIIIIl(2, 4, 2020402776), lIlIIIIl(8, 5, 2408165152), lIlIIIIl(13, 12, 10), lIlIIIIl(2, 5, 806913563), lIlIIIIl(10, 5, 772591592), lIlIIIIl(20, 13, 11), lIlIIIIl(2, 5, 2211018781), lIlIIIIl(10, 5, 2523354879), lIlIIIIl(8, 5, 2549720391), lIlIIIIl(2, 5, 3908178996), lIlIIIIl(2, 5, 1299171929), lIlIIIIl(8, 5, 512513885), lIlIIIIl(10, 5, 2617924552), lIlIIIIl(1, 12, 13), lIlIIIIl(8, 5, 390960442), lIlIIIIl(12, 11, 13), lIlIIIIl(8, 5, 1248271133), lIlIIIIl(8, 5, 2114382155), lIlIIIIl(1, 10, 13), lIlIIIIl(10, 5, 2078863299), lIlIIIIl(20, 12, 12), lIlIIIIl(8, 5, 2857504053), lIlIIIIl(10, 5, 4271947727), lIlIIIIl(2, 6, 2238126367), lIlIIIIl(2, 6, 1544827193), lIlIIIIl(8, 6, 4094800187), lIlIIIIl(2, 6, 3461906189), lIlIIIIl(10, 6, 1812592759), lIlIIIIl(2, 6, 1506702473), lIlIIIIl(8, 6, 536175198), lIlIIIIl(2, 6, 1303821297), lIlIIIIl(8, 6, 715409343), lIlIIIIl(2, 6, 4094566992), lIlIIIIl(14, 10, 11), lIlIIIIl(2, 6, 1890141105), lIlIIIIl(0, 13, 13), lIlIIIIl(2, 6, 3143319360), lIlIIIIl(10, 7, 696930856), lIlIIIIl(2, 7, 926450200), lIlIIIIl(8, 7, 352056373), lIlIIIIl(20, 13, 11), lIlIIIIl(10, 7, 3857703071), lIlIIIIl(8, 7, 3212660135), lIlIIIIl(5, 12, 10), lIlIIIIl(10, 7, 3854876250), lIlIIIIl(21, 12, 11), lIlIIIIl(8, 7, 3648688720), lIlIIIIl(2, 7, 2732629817), lIlIIIIl(4, 10, 12), lIlIIIIl(10, 7, 2285138643), lIlIIIIl(18, 10, 13), lIlIIIIl(2, 7, 2255852466), lIlIIIIl(2, 7, 2537336944), lIlIIIIl(3, 10, 13), lIlIIIIl(2, 7, 4257606405), lIlIIIIl(10, 8, 3703184638), lIlIIIIl(7, 11, 10), lIlIIIIl(10, 8, 2165056562), lIlIIIIl(8, 8, 2217220568), lIlIIIIl(19, 10, 12), lIlIIIIl(8, 8, 2088084496), lIlIIIIl(15, 13, 10), lIlIIIIl(8, 8, 443074220), lIlIIIIl(16, 13, 12), lIlIIIIl(10, 8, 1298336973), lIlIIIIl(2, 13, 11), lIlIIIIl(8, 8, 822378456), lIlIIIIl(19, 11, 12), lIlIIIIl(8, 8, 2154711985), lIlIIIIl(0, 11, 12), lIlIIIIl(10, 8, 430757325), lIlIIIIl(2, 12, 10), lIlIIIIl(2, 8, 2521672196), lIlIIIIl(10, 9, 532704100), lIlIIIIl(10, 9, 2519542932), lIlIIIIl(2, 9, 2451309277), lIlIIIIl(2, 9, 3957445476), lIlIIIIl(5, 10, 10), lIlIIIIl(8, 9, 2583554449), lIlIIIIl(10, 9, 1149665327), lIlIIIIl(12, 13, 12), lIlIIIIl(8, 9, 3053959226), lIlIIIIl(0, 10, 10), lIlIIIIl(8, 9, 3693780276), lIlIIIIl(15, 11, 10), lIlIIIIl(2, 9, 609918789), lIlIIIIl(2, 9, 2778221635), lIlIIIIl(16, 13, 10), lIlIIIIl(8, 9, 3133754553), lIlIIIIl(8, 11, 13), lIlIIIIl(8, 9, 3961507338), lIlIIIIl(2, 9, 1829237263), lIlIIIIl(16, 11, 13), lIlIIIIl(2, 9, 2472519933), lIlIIIIl(6, 12, 12), lIlIIIIl(8, 9, 4061630846), lIlIIIIl(10, 9, 1181684786), lIlIIIIl(13, 10, 11), lIlIIIIl(10, 9, 390349075), lIlIIIIl(8, 9, 2883917626), lIlIIIIl(10, 9, 3733394420), lIlIIIIl(10, 12, 12), lIlIIIIl(2, 9, 3895283827), lIlIIIIl(20, 10, 11), lIlIIIIl(2, 9, 2257053750), lIlIIIIl(10, 9, 2770821931), lIlIIIIl(18, 10, 13), lIlIIIIl(2, 9, 477834410), lIlIIIIl(19, 13, 12), lIlIIIIl(3, 0, 1), lIlIIIIl(12, 12, 12), lIlIIIIl(3, 1, 2), lIlIIIIl(11, 13, 11), lIlIIIIl(3, 2, 3), lIlIIIIl(3, 3, 4), lIlIIIIl(3, 4, 5), lIlIIIIl(1, 13, 13), lIlIIIIl(3, 5, 6), lIlIIIIl(7, 11, 11), lIlIIIIl(3, 6, 7), lIlIIIIl(4, 10, 12), lIlIIIIl(3, 7, 8), lIlIIIIl(18, 12, 12), lIlIIIIl(3, 8, 9), lIlIIIIl(21, 12, 10), lIlIIIIl(3, 9, 10)'
payload = payload.split('), ')
payload = [[int(y) for y in x.split('(')[1].split(')')[0].split(', ')] for x in payload]
chunks = [0 for _ in range(15)]
for i in range(len(flag)):
    pos = i % 4
    cur_reg = (i - (i % 4)) // 4
    if pos == 0:
        chunks[cur_reg] = 0
    chunks[cur_reg] |= (flag[i] << (pos * 8))
for cmd in payload:
    opcode, op0, op1 = cmd
    if opcode == 2:
        chunks[op0] ^= BitVecVal(op1, 32)
    elif opcode == 8:
        chunks[op0] += BitVecVal(op1, 32)
    elif opcode == 10:
        chunks[op0] -= BitVecVal(op1, 32)
    elif opcode == 3:
        chunks[op0] ^= chunks[op1]
s.add(chunks[0] == 0x3ee88722)
s.add(chunks[1] == 0xecbdbe2)
s.add(chunks[2] == 0x60b843c4)
s.add(chunks[3] == 0x5da67c7)
s.add(chunks[4] == 0x171ef1e9)
s.add(chunks[5] == 0x52d5b3f7)
s.add(chunks[6] == 0x3ae718c0)
s.add(chunks[7] == 0x8b4aacc2)
s.add(chunks[8] == 0xe5cf78dd)
# s.add(chunks[9] == 0x4a848edf)
if s.check() != sat:
    print('unsat')
    exit()
m = s.model()
fl = ''.join(map(chr, [m[x].as_long() for x in flag]))
print(fl)

Summary

The Metagaming Challenge on Hack The Box is a medium-level challenge that focuses on encryption reversal and file handling. Participants are tasked with solving a series of operations involving bitwise manipulation and decryption to uncover the hidden flag. The challenge introduces the use of z3, a Python library for solving logical constraints, to break down complex byte-level operations. It encourages users to think critically and solve encryption problems by leveraging constraint-solving techniques, making it an excellent exercise for those wanting to strengthen their skills in both reverse engineering and cryptography.

This post is licensed under CC BY 4.0 by the author.