2023 코드게이트 리버싱 문제이다.
문제에서는 main.py과 Engine.py을 주었다.
다음은 main.py코드이다. VMengine 에 jason 형태의 데이터를 인코딩한 형태로 보내주면 읽을 수 있도록 만들어놓았다.
Engine.py의 코드를 살펴보면 opcode를 결정해주고 적절한 operand를 넣어줌으로써 내가 원하는 명령들을 수행 할 수 있도록 만들었다. 정말 여러가지가 있기 때문에 한번 jason 형태의 데이터를 잘 인코딩해서 보내주면 읽을 수 있는지부터 확인해보았다.
해당 코드는 stack에 문자열 “1234”를 두번 한뒤 스택에 있는 값을 가져와서 그 값들이 정수가 아니면 operand type error를 츨력하도록 만든 코드이다.
잘 동작하는지 확인 됐으니 이제 flag를 읽어보도록 하겠다. main에서 데이터를 실행하기 전에 set_file_options 리스트를 한번 초기화 하므로 다시 기존의 리스트를 추가하고 해당 read_bytes명령어를 사용하여 /home/ctf/file을 읽는 명령어를 짰다.
그러나 blacklist 필터링에 걸려버렸다.
도무지 생각이 안나서 glob명령어를 사용해서 하나씩 파일을 열면서 확인해봤다.
여러 파일들과 폴더들이 보여서 위 코드의 경로를 바꾸어 /home/ctf 경로에 들어가보았다.
다행히 저 blacklist를 우회하는 것이 아니라 다른 이름의 플래그 파일이 있었다. 다음은 해당 플래그 값을 읽는 코드이다.
해당 코드를 실행하여 flag를 획득하였다.
'CTF > 2023 Codegate Junior Division' 카테고리의 다른 글
cryptGenius - Crypto (0) | 2023.06.26 |
---|---|
I like Script - Misc (0) | 2023.06.26 |
Librarian - Pwnable (0) | 2023.06.26 |