웹문제만 풀다가 다른 부분의 지식도 알아야겠다는 생각에

시작한 pwnable.kr 이다


첫번째 문제인 fd이다



눌러보면 일단 ssh fd@pwnable.kr -p2222로 들어가라고 한다

리눅스창에서 치고

비밀번호는 guest를 치면


이 문제로 들어가 진다.


이때 ls -al로 들어가보면 우리가 찾아야 할 것 같은 flag가 있는 것을 볼 수 있다.

하지만 root권한이기 때문에 flag를 볼수는 없다.





이렇듯 퍼미션 디나인이 나온다/




그렇지만 우리의 문제는

fd문제이지 않은가

그렇기 때문에 fd를 실행 시켜보면 숫자를 입력하라고 나온다.

따라서 fd.c 파일을 보면


이런 소스를 볼 수 있다.

소스를 보면 우선 값을 입력해 주어야 하고

atoi함수가 나오는데 이것은 값을 입력할 때에 문자형을 인트형으로 변환 시켜주는 값이다.

그리고 들어온 값은 -0x1234로 빼준다.

이것이 이 문제의 핵심이라고도 볼 수 있는데

이 값이 read값의 인자로 들어간다는 것이다.

빼진 fd값이 read의 인자인데

이때 read 함수를 알아봐야 겠다.


명령어 man read를 치면

 

이렇게 설명이 나온다.

read함수에서

int fd는 open시스템 콜로 열린 파일을 가리키는 파일 지정번호 이고,

buf는 파일에서 읽은 데이터를 저장할 메모리 공간,

len은 읽을 데이터의 크기를 나타내 준다.

이때 항상 예약된 값이 있는데

fd가 0이면 표준 입력,

1이면 표준 출력,

2이면 표준 에러 출력을 나타낸다.

그리고 우리는 strcmp함수로 LETMEWIN값과 버퍼에 있는 값을 비교해

같으면 flag를 출력해주는 것 같다.

따라서 0x1234는 10진수로 4660이기 때문에




./fd 4660을 입력하면

다시 입력을 할 수 있게 되고

그곳에 LETMEWIN을 치면

FLAG를 얻을 수 있다.


'Pwnable > Pwnable.kr' 카테고리의 다른 글

pwnable.kr [asm]  (0) 2018.08.01
pwnable.kr 4번 [flag]  (0) 2018.04.14
pwnable.kr 3번 [bof]  (0) 2018.04.13
pwnable.kr 2번 [collision]  (0) 2018.04.12

+ Recent posts