반응형
문제를 분석해보자면,
무언가를 입력하는 창이 뜨고, 그 창에 적당한 값을 입력해주면, 해당 값에 맞는 결과를 내뱉어주는 형식입니다.
일단 아무 글자를 넣어본 결과 Incorrect 라는 창을 볼 수 있었습니다.
그렇다면, 우리는 우선 저 Incorrect 라는 창을 보지 않을 수 있는 경로를 찾아봐야겠습니다.
바이너리를 분석해서 Incorrect 경로와 관련이 있는 분기문 중에서도, 입력한 값과 연관이 있는 분기문들을 찾아보았습니다. 각각의 조건들에서,
string[0] == 'E'
string[4:] == "R3versing"
string[2:4] == "5y"
string[1] == 'a'
들을 확인할 수 있었습니다.
정리해보면, 다음과 같습니다.
#string은 창에 입력한 문자열입니다.
string[0] == 'E'
string[1] == 'a'
string[2:4] == '5y' # string[2], string[3]
string[4:] == 'R3versing' # strcmp는 뒤에 널문자까지 체크해서 "R3versing"의 뒤에 문자가 더 와서는 조건식을 피할 수 없습니다.
여담으로, 위와 같은 방법으로도 조건을 알아낼 수 있지만, 21세기의 최첨단 기술로 바이너리를 분석해보면
위와 같이 조건문을 바로 확인해 볼 수 있습니다.
아무튼 결과적으로 "Ea5yR3versing" 을 입력해보면, 다음과 같은 결과를 얻을 수 있습니다.
flag = "Ea5yR3versing"
후기)
21세기는 참 좋은 것 같습니다.
반응형
'Write-up' 카테고리의 다른 글
[SECCON 2017] Powerful_Shell writeup (0) | 2018.01.14 |
---|---|
[reversing.kr] ImagePrc writeup (0) | 2018.01.09 |
[SECCON 2017] Vigenere3d writeup (0) | 2018.01.01 |
[CSAW 2017] SCV writeup (0) | 2017.12.27 |
[Plaid CTF 2015] ebp (feat. double staged format string attack) (0) | 2017.11.01 |