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}
