passcode문제풀이

Passcode-문제풀이.gif
img_3459497_3424_8_garam1117.gif
♬Mermaid Melody Pichi Pichi Pitch Pure Rina Song♬
img_3459497_3424_8_garam1117.gif
이어서 후다 닭 해봅니다 ㅋㅅㅋ
aaW.png
001.png
스샷. 1

마이웨이 직역하면 다음과 같습니다,

Mommy told me to make a passcode based login system.

(암호 기반 로그인 시스템을 만들어 보랑께?)

My initial C code was compiled without any error!

(초기 C 코드는 오류 없이 컴파일 됐당께?)

Well, there was some compiler warning, but who cares about that?

(글쎄, 컴파일러 경고가 있어도 관심 있당가?)

그럼 위 와 같이 바로 접속해봅시다.

ssh passcode@pwnable.kr -p2222 (pw:guest)

002.png

스샷. 2

접속이 완료되면 ls -l 로

파일 여부 확인해 봅시다.

확인해보면

flag

passecode

passecode.c

총 3개의 파일이 존재합니다.

005.png
스샷. 3

먼저 passcode를 먼저 실행하면

위와 같이 동작하게 됨을 알 수 있습니다.

그리고 cat 명령어로

passecode.c 파일을 들여다봅시다.

004(死).png
스샷. 4

집에 나뒹구는 몇십 년 된

C언어 관련 책 찾아보며

코드를 살펴보니

입력을 받아챙기는

함수가 보이는듯합니다

아마 login() 함수로 추측됩니다.

scanf("%d", passcode1);
scanf("%d", passcode2);

아마 이 둘로 추정되는데

입력값을 passcode1에

저장을 하는 것이 아니라

passcode1 주소로 한 곳에

저장을 하게 됩니다.

예를 든다면 passcode1=0x123死5678

이라면 0x123死5678주소에 우리가 입력한

값을 저장하게 되는 것으로 보입니다.

두 변수 모두 초기화 안돼 더미 값이 들어가 있을 것이고,

그 더미 값을 주소로 하는 곳에 입력값을 저장하게 되니,

오류가 생기는 것입니다.

그럼 gdb로 분석을 해봅시다.

006.png007.png009-welcome함수.png
스샷. 4

먼저 welcome 함수를

보면 ebp-0x70에

입력값을 저장합니다.

그리고 login 함수를 보면

009-login함수.png

스샷. 5

ebp-0x10이 passcode1가

위치한 곳을 알 수 있습니다.

welcome()에서 입력을 100바이트를 받는데,

[ebp-0x70] – [ebp-0x10] = 0x60 = 96바이트

이므로 passcode의 값을 조작할 수 있습니다.

그럼 passcode1의 값을 주소로 하는 곳에

원하는 값을 넣을 수 있으므로, 원하는 주소에

원하는 값을 넣을 수 있습니다.

그런 다음 fflush()의 got 주소를 login()의

system() 부분으로 바꾸면 됩니다.

그럼 fflush()의 got 주소와 login()의

system() 부분의 주소를 구해봅시다.

010.png
스샷. 6
fflush의 got 주소는 0x0804a004.
009-system함수.png
스샷. 7

system 함수의 시작 부분을 보면

0x080485e3 임을 알 수 있습니다.

그럼 페이로드를 구성해보면

dummy[96]+fflush()의 got[4]

system()[4] 가 됩니다.

여기서 system()[4]는 scanf()가

정수형으로 받기 때문에

정수형으로 바꿔서 보내주고

0x80485e3 = 134514147

(python -c 'print "D"*96 + "\x04\xa0\x04\x08"'; cat) | ./passcode
011.png
스샷. 8

이렇게 해서 키캆을 받아챙겼습니다.

그리고 다시 처음 페이지로 돌아와

012.png
스샷. 9
013.png
스샷. 10

 

미션 완료 동시에 10포인트를 받아챙긴

것을 확인하실 수 있습니다.

014.png
스샷. 11

그리고 녹색 점선으로 완료됐다고

표시가 됩니다.

아 그리고 완료가 돼도 같은 문제를

복습한답시고 반복적으로

풀 수 있는 모양입니다¨? ōxō

풀 수 있는 모양입니다¨? ōxō

aaW.png

좋은 하루 되시고 하시는 일 잘 되시고

날이 덥습니다 더위 먹지 않게 유의하시고

코로나 조심하세요 🙂

SE-f0884c89-d7f8-46ea-bc19-b908afb62fb0.png