CTF

[Swing CTF] Misc-babymath

오호츠크해 기단 2022. 11. 26. 01:58
728x90

babymath

문제 링크: http://swingctf.hspace.io:8080/challenges#babymath-17

 

리눅스에 pwntools 설치

sudo apt update
sudo apt install python3 python3-pip python3-dev git libssl-dev libffi-dev build-essential
sudo python3 -m pip install --upgrade pip
sudo python3 -m pip install --upgrade pwntools

 

Context.log

  • context.log_level = 'error' - 에러만 출력
  • context.log_level = 'debug' - 대상 프로세스와 익스플로잇간에 오가는 모든 데이터를 화면에 출력
  • context.log_level = 'info' - 비교적 중요한 정보들만 출력

 

pwntools 연결

-nc: remote(ip, port)형식으로 사용 (ip는 string이고, port는 int형이다.)

p=remote("swingctf.hspace.io", 13333)

recvline()

  • 한 줄 전체 받아오기 (개행문자가 나올 때까지 입력 받음)
  • STAGE [m/300]\n << 이 부분 받아오는 것
  •  

recvuntil(value): 괄호안에 있는 부분까지 데이터를 받는다.

result = eval(p.recvuntil('  =  '))[:-1]

  • recvuntil: ' = '가 올 때까지 데이터를 받고 계산한다.
  • [:-1]: 파이썬 기본 문법으로 뒤에서 한 바이트 전까지 슬라이스

 

sendline('문자열')

  • '문자열'을 입력으로 집어넣음

 

*eval(expression)

  -매개변수로 받은 식을 문자열로 받아서 실행하는 함수

  ex) eval("1+2")라는 문자열이 매개변수로 들어오면 출력값으로 3이라는 값을 반환한다.

 

from pwn import *

context.log_level = 'debug' #디버깅 하는 것을 화면에 보여줌

p = remote('swingctf.hspace.io', 13333)

for i in range(300): #연산이 300번 반복되므로
	p.recvline()
    result = eval(p.recvuntil(' = '))[:-1] #-1 전까지 문자열로 저장 후 eval 계산
    p.sendline(str(result))
    
 p.interactive()

하지만 자꾸 에러가 나서..결국 300번을 계산하여 풀었다.

Congratulations! FLAG is: SWING{FUN_FUN_M4TH_c60d28db}

SWING{FUN_FUN_M4TH_c60d28db}