Story of CowHacker

Pwnable_fd 본문

공부/Pwnable

Pwnable_fd

Cow_Hacker 2019. 11. 20. 15:28
728x90

포너블 1번 문제를 풀어 볼거다.

이 글을 끝까지 한 후의 모습 ( fd 주의에 테두리가 생겼다. )

사이트를 들어 가봤다. 문제를 풀려면 회원가입은 필수다.

http://pwnable.kr/play.php#

 

http://pwnable.kr/play.php

 

pwnable.kr

1번 문제이다.

일단 난 영어가 부족해서 번역기를 돌려 봤다. ( 문제를 알아야 문제를 풀던가 말던가 하기 떄문이다. )

 

 

 

 

파파고 번역기

난 구글 번역기 말고 파파고 번역기를 사용했다. ( 후배가 알려준 좋은 사이트 인거 같다. )

 

https://papago.naver.com/

 

네이버 파파고

번역을 부탁해 파파고

papago.naver.com

리눅스 설명자가 뭐라는 어떤 아이의 질문이였다. 엄마는 과연 알고 계실까 궁금했다.

" *  " 해놓고 밑에 참고 영상 이래서 들어 가봤다. 

후기 : 어떤 외국인 남성이 문제 푸는 영상이였다. 난 영어 약하다고 했다. 그래서 바로 꺼버렸다.

( 언젠간 다 알아 듣고 말테다... )

 

 

 

 

ssh 접속 명령어이다.

1번 문제에 있는 ssh 주소값을 터미널을 띄어 들어 갔다.

 

 

 

패스워드 입력창이다.

 

패스워드를 입력 하라고 떳다. 1번 문제 사진을 다시 보면 ( pw : guest ) 라고 돼있다.

난 guest를 쳤다.

 

 

 

 

접속후 사진 이다.

오....포너블이라는 글자가 엄청 멋있게 꾸며져 있었다.

( 누가 만든건진 몰라도 한땀 한땀 슬러쉬 한다고 고생하신 거 같았다. )

 

 

 

 

 

 

 

ls한 후 사진이다.

뭐가 있나 ls를 쳐보니 fd, fd.c, flag 세 개가 있었다.

c파일 있고 fd는 fd.c를 컴파일한 파일 같아 보였고 flag는?? 아니 바로 열어 보면 flag가 있지 않을까!!??해서 열어 봤다.

 

 

 

 

flag파일을 열려고 시도한 사진이다.

sudo cat flag 를 해서 열어 볼려고 시도 해봤다.

몇번이고 나의 passwd를 입력 해봤지만 역시... 열려 지지 않았다. 당연한 거 같다.ㅎㅎ

 

 

 

 

 

fd.c를 열어본 사진이다.

일단 c언어 파일을 열어 봤다.

나의 실력대로 해석을 해봤다.

 

일단, buf라는 변수에 32비트 공간을 할당해준다.

argv가 2보다 작을때 pass argv[1] a number 를 표출 하라는 것이다.

그래서 한번 argv가 2보다 작게 입력 해봤다.

 

 

 

 

 

argv를 2보다 작게 입력한 사진이다.

그냥 ./fd 만 입력을 해서 실행 시켜 보니 정말 pass argv[1] a number가 떳다.

나의 해석이 맞는거 같았다.

 

 

 

 

 

32비트 보다 높게 또 argv값이 2보다 크게 입력한 사진이다.

내가 그래서 실험을 해봤다. argv가 2보다 크면 어떨까??

일단 코드에서 보면 int fd = atoi ( argv[1] ) - 0x1234; 에서 0x1234를 뭔가 연관 시켜야 밑에  구문

printf("good job :) ")이거와

system("/bin/cat flag");

이 값이 나올꺼 같았다.

 

그러지 않으면 그냥 learn about Linux file IO를 출력 하는거 같았다. 그래서 바로 위 사진을 보면 내가 아무 값들이나

입력 해봤다. 일단 버퍼오버 플로우 공격인지 싶어서 32 비트를 넘는 값을 줘 봤다. 그리고 그냥 argv 가 2가 넘는 값도 한번 줘 봤다. 결과는 같았다. 0x1234 와 관련 하지 않는 값들은 전부 틀린 모양이였다.

 

 

 

 

 

 

 

파이썬에서 0x1234를 해석한 결과다.

그럼 도대체 이 0x1234가 뭘까??? 싶어서 나는 파이썬으로 str(0x1234) 를 해서 문자열로 바꾸어 보았다.

결과를 보니 숫자 4660 이였다. 

어....그럼 4660 - 4660 하면 0 이 되니까 0을 만들면 밑에 구문이 실행 되지 않을까?? 생각 했다.

 

그래서 나는 바로 그값을 넣어 봤다.

 

 

 

 

4660 값을 입력한 사진이다.

4660을 입력후 엔터를 쳐봤다.

LETMEWIN값을 입력한 사진이다.

4660을 입력하고 보니 이번엔 틀렸다는 구문이 뜨지 않고 뭔가를 입력 하라는 듯 커서만 깜빡거렸다.

나는 다시 c언어 소스코드를 봤다.

if (!strcmp("LETMEWIN", buf)라는 구문에서 strcmp라는걸 보고 나는 학교에서 배운 경험을 통해 저것은

맞나 안맍나를 검증하는 거라는걸 생각했다. 그럼 LETMEWIN이라는 값이 나오면 밑에 프린트문을 출력 하지 않을까??

싶어서 입력을 하니 

mommy! I thenk I know what a file descriptor is!!

라는 flag 값이 나왔다.

 

 

 

 

 

flag 값을 입력한 사진이다.

나는 저것을 그대로 복사붙혀넣기를 했다.

난 이미 풀어서 이미 풀었다고 떳다.

이걸로 포너블 1번 문제를 해결 했다.

728x90

'공부 > Pwnable' 카테고리의 다른 글

Pwnable_Random  (2) 2020.07.24
Pwnable_Passcode  (0) 2019.12.16
Pwnable_Flag  (0) 2019.11.30
Pwnable_Bof  (0) 2019.11.29
Pwnable_collision  (0) 2019.11.24
Comments