본문 바로가기

DIMICTF 2017 - dimi-math 본문

CTF

DIMICTF 2017 - dimi-math

Seongjun_You 2021. 11. 1. 15:37

처음에 중근이 무엇인지도 몰랐다.

방정식에 겹치는 해가 나오는 것이다.

삼차방정식일 때 같은 해가 세 개 나오면 삼중근이다.

 

프로그램을 실행 시켰다.

방정식 문제가 나오고 나온 해의 값을 적으면 된다.

300문제를 모두 맞추어야 하고 시간 체한 은 총 500초이다.

상식적으로 사람이 해결할 수 있는 시간이 아니다.

exploit code를 작성해야 한다.

 

한 가지 규칙성을 발견했다.

프로그램을 여러 번 돌려도 문제에서 상수의 값만 달라진다.

즉 상수 값만 추출해서 계산을 하면 된다.

 

 

exploit code

from pwn import *
from sympy import *

p = remote("192.168.232.132",8231)
context.log_level = "Debug"
init_printing()
x, y, z = symbols('x y z')
def sol(idx):
	
	idx_str = "No. " + str(idx) + ") "
	p.recvuntil(idx_str)
	data = p.recv()
	data = str(data)
	print(data)

	data = data.split(" = ")
	temp = ""
	for i in data[0]:
		if i == '^':
			temp += "**"
		elif i == 'x':
			temp += "*x"
		else:
			temp += i
	data[0] = str(temp)
	data[0] = data[0][2:]
	expr = sympify(data[0])
	print(expr)
	eqn = Eq(expr,0)
	return solve(eqn,x),expr
for idx in range(1,301):	
	data,expr = sol(idx)
	expr = str(expr)
	answer = ""
	if len(data) == 1:
		answer += str(data[0]) + ", " + str(data[0]) + ", " + str(data[0]) + "\n"
	elif len(data) == 3:
		answer += str(data[0]) + ", " + str(data[1]) + ", "
		answer += str(data[2]) + "\n"
	elif len(data) == 2:
		prifix = int(expr.split("*x**3")[0])
		data_1 = data[0]
		data_2 = data[1]
		case_1 = prifix*(x-1*data_1)**2 * (x-1*data_2)
		case_2 = prifix*(x-1*data_2)**2 * (x-1*data_1)
		if case_1.equals(expr):
			answer += str(data[0]) + ", " + str(data[0]) + ", "
			answer += str(data[1]) + "\n"
		else :
			answer += str(data[0]) + ", " + str(data[1]) + ", "
			answer += str(data[1]) + "\n"		
	p.send(answer)
	
	
p.interactive()

방정식을 쉽게 계산하기 위해 sympy를 사용했다.

그리고 데이터를 추출하여 가공을 한다.

해의 값을 추출하고

중근 수에 따라 작업을 진행한다.

중근 수가 2개일 때가 가장 까다롭다.

이때는 방정식에 각각에 값을 넣어 확인을 해줘야 한다.

 

 

 

flag를 얻은 모습이다.

'CTF' 카테고리의 다른 글

DIMICTF 2017 - dimi-contract  (0) 2021.11.01
DIMICTF 2017 - reader  (0) 2021.11.01
DIMICTF 2017 - dimi-login  (0) 2021.10.31
DIMICTF 2017 - dimi-farm  (0) 2021.10.29
[PBjarCTF 2021] PWN - fmtstr  (0) 2021.10.10
Comments