KnightCTF 2022 Most Secure Calculator - 2 write-up

조승현·2022년 1월 25일
0

대망의 250점짜리 마지막 문제이다. 아쉽게도 풀지 못했다. 접근방향을 대강 맞았는데 내가 모르는 부분이었다. 개인적으로 얻어가는게 많은 문제였다. 다시 한번 풀어보자.

문제 첫 화면이다. secure calculator-1 문제와 동일하다. 단 소스코드 주석에 추가된 부분이 있다.

오직 숫자와 기호만 사용될 수 있다고 한다. 일단은 system('ls')를 입력해보았지만

필터링 되는듯하다. 혹시 몰라서 burp suite로 url encode로 변환한값을 넣어봤지만 실패했다. 숫자로만 문자를 표현할 수 있는 방법을 골똘히 생각했다. 기껏 생각해낸게 8진수였다. 8진수는 앞에 0을 붙이면 되니까?라는 생각으로 이것저것 해보았지만 실패했다.

writeup을 2개를 봤는데 한가지는 너무 참신했다.
연산기호간의 비트연산을 하는것이었다. 예를들어 입력을 '^'|'+' 이런식으로 주는것이다. 그러면 저것의 연산결과가 문자로 나오는 방식이다. 지금까지 꽤많은 문제들을 풀어봤지만 이 방식은 처음본다. 연산기호의 연산이라니... 그런데 이 방식은 연산결과를 예상해서 기호들로만 표현해야하기 때문에 식을 만들기 까다로웠다.

다른방법은 8진수로 '\165' 이런방법으로 표현하는것이다. \가 허용된다는점이 의문이긴하지만 저런방식으로 문자열을 표현할수있었다. 이 방식도 몰랐다. 숫자에서 문자로 바뀌려면 무조건 함수를 이용해야하는줄만 알았다. 이 표현법에 대해서 좀 더 알아보려고 구글링을 해봤지만 키워드도 잘 모르겠고 나오지도 않았다. 아무튼 입력 값으로 "\163\171\163\164\145\155"("\143\141\164\40\146\154\141\147\56\164\170\164")
를 넘겨주면

정말 알찬문제다. knightCTF 문제중 가장 재밌었다.

profile
Inha University / CTF Web Player / Team Riot of Noob

0개의 댓글