picoCTF 2018 quackme - Points: 200

6539 단어 picoCTFCTF

문제





풀어 보았다.



우선 프로그램을 다운로드합니다.
main이라는 파일이었습니다.
만약을 위해 BZ에서 보겠습니다.



ELF 파일이었습니다.
일단 「pico」로 검색해 보았습니다만, 없었습니다.

우선 움직여 보겠습니다.



일단 오버플로적인 이야기의 가능성도 있으므로 대량의 문자를 입력해 보겠습니다.



특별한 변화는 없습니다.
IDA를 사용해 보겠습니다.



메인 중간에 시작할 때 표시되는 문자열이 있습니다.
그 사이에 call 되고 있는 do_magic가 수상하기 때문에 안을 봐 봅니다.



루프가 있던 뒤에 분기가 있어 「You are winner」라든가 써 있으므로 여기에 갈 수 있도록 하면 기쁜 일이 있을 것 같습니다.

루프의 내용을 살펴 보겠습니다.



8048858h라는 것은 더블 클릭하면



라는 것을 알 수 있습니다.
greetingMessage라는 것은 이것도 더블 클릭



라는 것을 알 수 있습니다.

처리의 흐름으로서는 8048858h라고 입력한 캐릭터 라인을 XOR해 그 결과의 바이트와 greetingMessage를 비교하고 있는 바람입니다. 조금 자신이 없지만, 일단 이것으로 해 보겠습니다.
入力文字 xor 8048858h = greetingMessage

를 만족하는 입력 문자를 알고 싶다.
xor의 특성 때문에 위의 방정식이 얻어지면
8048858h xor greetingMessage = 入力文字

도 성립할 것이므로 그것을 조사한다.

8048858h의 HEX는 IDA에 쓰여진 거리에서
0x29 0x06 0x16 0x4F 0x2B 0x35 0x30 0x1E 0x51 0x1B 0x5B 0x14 0x4B 0x08 0x5D 0x2B 0x56 0x47 0x57 0x50 0x16 0x4D 0x51 0x51 0x5D

입니다.
greetingMessage는 파이썬을 사용했습니다.



이런 느낌입니까?
이 작업을 수행하면 다음 배열을 얻을 수 있습니다.
['0x59', '0x6f', '0x75', '0x20', '0x68', '0x61', '0x76', '0x65', '0x20', '0x6e', '0x6f', '0x77', '0x20', '0x65', '0x6e', '0x74', '0x65', '0x72', '0x65', '0x64', '0x20', '0x74', '0x68', '0x65', '0x20', '0x44', '0x75', '0x63', '0x6b', '0x20', '0x57', '0x65', '0x62', '0x2c', '0x20', '0x61', '0x6e', '0x64']

이 두 가지를 xor합니다. 이것도 파이썬에서.



이런 느낌입니까?
이 결과는



했다!

하지만 설마 이 대답은 실수였습니다. . .
XOR하는 원래 HEX가 다른가요?

팁 살펴보겠습니다.



음 - 객체 덤프합시다. 같은 것입니다.
뭔가 실수가 있을지도 모르기 때문에 다시 검토해 보겠습니다.

같은 방법을 시도해도 어쩔 수 없기 때문에 다른 방법으로.
gdb로 시작하고 do_magic을 살펴 보겠습니다.
gdb ./main
~中略~
(gdb) disas do_magic



중간에 문자열이 다시 쓰여지는 것을 고려하여 breakpoint에서 0x080486c0으로 멈추고 그 때의 0x8048858을 살펴 보겠습니다.

우선 멈춥니다.



여기에서 0x8048858을 봅니다.



동일하네요. . .

덧붙여서 지금 취급하고 있는 ELF 파일은 문제문의 링크로부터 파일을 다운로드 했습니다만,/problems/quackme_2_45804bbb593f90c3b4cefabe60c1c4e2. 로부터 액세스 할 수 있는 파일로 검증해 보겠습니다.



네, 다릅니다. . .
29 06 16 4F 2B 35 30 1E 51 1B 5B 14 4B 08 5D 2B 53 10 54 51 43 4D 5C 54 5D
29 06 16 4f 2b 35 30 1e 51 1b 5b 14 4b 08 5d 2b 56 47 57 50 16 4d 51 51 5d

위가 링크에서 다운로드 한 것이며 아래가 shell에서 가져온 것입니다. 후반이 다릅니다.
설마 더미를 장치하는 함정이 있다고는 생각하지 않았어요.
문제 옆에 쓰여진 풀린 인원 1195명의 사람들은 처음부터 이것을 깨달았습니까?

이제 파이썬을 고쳐 보겠습니다.



이제 실행해 보겠습니다.



다른 것이 나왔다. 이제 다시 main을 실행해 보겠습니다.



You are winner 나왔습니다—.

좋은 웹페이지 즐겨찾기