Pwbabke.kr에서 만든 워게임 문제 풀이입니다.

 

문제는 꼭 풀어보고 보세요.

 

https://pwnable.kr 

 

https://pwnable.kr

   there are flag   files corresponding to each challenges (similar to CTF), you need to read it and submit to pwnable.kr to get the corresponding point. in order to read the flag file, you need some skills regarding programming, reverse-engineering, bu

pwnable.kr


 

이 문제를 풀 때 저는 Xshell을 통해 ssh 접속을 했습니다.

이렇게요!

 

들어와서

ls -al

을 통해 존재하는 파일의 목록, 권한을 봐줍시다.

 

fd

fd.c

flag가 있습니다. 

퍼미션 디나이!

 

fd.c가 어캐 생겼는지 봅시다.

일단 파일을 실행할 때 인자를 같이 입력을 하지 않으면

pass argv[1] a number

가 뜨면서 프로그램이 끝납니다.

 

argv[1]에 받은 인자는 정수화되고, 0x1234를 뺀 후에 fd에 저장하게 됩니다.

그리고 이 변수는 read 할 때 첫 번째 인자로 들어가는데요.

 

여기서 더 설명을 하기 전에 fd 변수가 왜 fd 변수로 이름이 되었는지 생각을 해보면

File Descriptor의 약자겠죠?

 

파일 디스크립터란.

리눅스와 유닉스에서 존재하는 것으로  이 두 OS는 시스템과 모든 하드웨어를 파일로 저장하는데, 프로세스(프로그램)이 시스템에 접근하기 위해서 사용되는 부여된 번호입니다.

기본적으로 파일 디스크립터는 0, 1, 2가 항상 존재하는데,

0: 표준 입력

1: 표준 출력

2: 표준 에러

를 의미하게 됩니다.

 

read 함수는 인자를 총 3개를 받는데

첫 번째 인자는 읽어올 파일의 파일 디스크립터

두 번째 인자는 입력할 변수

세 번째 인자는 입력할 바이트 수

를 각각 의미합니다.

 

따라서 파일 디스크립터의 개념과 read 함수를 종합하면

read 함수의 첫 번째 인자에 파일 디스크립터 0을 입력한다면, 이 read 함수가 실행될 때 사용자의 입력을 받아서 buf에 저장하게 됩니다.

 

따라서, fd 변수에 0이 저장되도록 한다면 우리가 원하는 문자열을 입력할 수 있게 되는 것이죠.

 

fd = atoi(argv[1]) - 0x1234

이기 때문에

argv[1]의 값이 0x1234의 정수형(10진수)라면, 됩니다.

 

0x1234는 4660이므로 첫 번째 인자에 4660을 입력하면 되겠죠?

 

이렇게 프로그램을 실행할 때 인자로 4660을 주고?

read 함수를 시작할 때 입력을 받으니까, LETMEWIN을 입력해주면, 문제를 풀 수 있게 됩니다!

 

끄읕

'Hacking-기초 > [PWN] Pwnable.kr' 카테고리의 다른 글

[PWN] random (1pts)  (0) 2020.08.11
Pwnable.kr에서 peda 사용하기  (0) 2020.08.11
[PWN] flag (7pts)  (0) 2020.08.11
[PWN] bof (5pts)  (0) 2020.08.11
[PWN] collision (3pts)  (0) 2020.08.10

+ Recent posts