일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 | 29 |
30 | 31 |
- 코딩
- C언어
- flag
- 순전파
- CTF
- picoCTF
- AdaGrad
- PHP
- 리뷰
- 오차역전파법
- 아파치
- 파이썬
- Python Challenge
- 설치
- PostgreSQL
- 역전파
- 우분투
- Python
- 소프트맥스 함수
- sgd
- 책
- PICO CTF
- FastAPI
- 기울기
- 신경망
- Apache2
- 딥러닝
- 신경망 학습
- HTML
- 백준
- Today
- Total
Story of CowHacker
Pwnable_fd 본문
포너블 1번 문제를 풀어 볼거다.
사이트를 들어 가봤다. 문제를 풀려면 회원가입은 필수다.
http://pwnable.kr/play.php
pwnable.kr
일단 난 영어가 부족해서 번역기를 돌려 봤다. ( 문제를 알아야 문제를 풀던가 말던가 하기 떄문이다. )
난 구글 번역기 말고 파파고 번역기를 사용했다. ( 후배가 알려준 좋은 사이트 인거 같다. )
네이버 파파고
번역을 부탁해 파파고
papago.naver.com
리눅스 설명자가 뭐라는 어떤 아이의 질문이였다. 엄마는 과연 알고 계실까 궁금했다.
" * " 해놓고 밑에 참고 영상 이래서 들어 가봤다.
후기 : 어떤 외국인 남성이 문제 푸는 영상이였다. 난 영어 약하다고 했다. 그래서 바로 꺼버렸다.
( 언젠간 다 알아 듣고 말테다... )
1번 문제에 있는 ssh 주소값을 터미널을 띄어 들어 갔다.
패스워드를 입력 하라고 떳다. 1번 문제 사진을 다시 보면 ( pw : guest ) 라고 돼있다.
난 guest를 쳤다.
오....포너블이라는 글자가 엄청 멋있게 꾸며져 있었다.
( 누가 만든건진 몰라도 한땀 한땀 슬러쉬 한다고 고생하신 거 같았다. )
뭐가 있나 ls를 쳐보니 fd, fd.c, flag 세 개가 있었다.
c파일 있고 fd는 fd.c를 컴파일한 파일 같아 보였고 flag는?? 아니 바로 열어 보면 flag가 있지 않을까!!??해서 열어 봤다.
sudo cat flag 를 해서 열어 볼려고 시도 해봤다.
몇번이고 나의 passwd를 입력 해봤지만 역시... 열려 지지 않았다. 당연한 거 같다.ㅎㅎ
일단 c언어 파일을 열어 봤다.
나의 실력대로 해석을 해봤다.
일단, buf라는 변수에 32비트 공간을 할당해준다.
argv가 2보다 작을때 pass argv[1] a number 를 표출 하라는 것이다.
그래서 한번 argv가 2보다 작게 입력 해봤다.
그냥 ./fd 만 입력을 해서 실행 시켜 보니 정말 pass argv[1] a number가 떳다.
나의 해석이 맞는거 같았다.
내가 그래서 실험을 해봤다. 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가 뭘까??? 싶어서 나는 파이썬으로 str(0x1234) 를 해서 문자열로 바꾸어 보았다.
결과를 보니 숫자 4660 이였다.
어....그럼 4660 - 4660 하면 0 이 되니까 0을 만들면 밑에 구문이 실행 되지 않을까?? 생각 했다.
그래서 나는 바로 그값을 넣어 봤다.
4660을 입력후 엔터를 쳐봤다.
4660을 입력하고 보니 이번엔 틀렸다는 구문이 뜨지 않고 뭔가를 입력 하라는 듯 커서만 깜빡거렸다.
나는 다시 c언어 소스코드를 봤다.
if (!strcmp("LETMEWIN", buf)라는 구문에서 strcmp라는걸 보고 나는 학교에서 배운 경험을 통해 저것은
맞나 안맍나를 검증하는 거라는걸 생각했다. 그럼 LETMEWIN이라는 값이 나오면 밑에 프린트문을 출력 하지 않을까??
싶어서 입력을 하니
mommy! I thenk I know what a file descriptor is!!
라는 flag 값이 나왔다.
나는 저것을 그대로 복사붙혀넣기를 했다.
난 이미 풀어서 이미 풀었다고 떳다.
이걸로 포너블 1번 문제를 해결 했다.
'공부 > 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 |