«   2024/04   »
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
Tags
more
Archives
Today
Total
관리 메뉴

공부를 합니다.

[pwnable.kr] [fd] fd 문제 본문

공부

[pwnable.kr] [fd] fd 문제

sher1ock. 2016. 7. 12. 00:39

올 여름초에 비공개로 작성해둔 fd 롸이트업인데 먼가 되게 풋풋한 문서같아서 포스팅으로 돌렸다.

- 2016.11.18






#2016.7.11

처음으로 포너블.kr 에서 가장 쉽다는 fd 문제이다.


분홍색 물방울처럼 생긴 귀여운몬스터가


==============================================

"Mommy! what is a file descriptor in Linux?" 

==============================================





$ cat fd.c 



문제풀기전에 동아리 선배가 C언어 복습하고 오래서 복습딱 다하고 본 첫문제였다.


내가 복습을 안했고 많이 모르는구나 라고 느낀점이 추가됬다.





여기서 기본적인 C언어 지식!


argc, argv, envp



argv[0] : 실행 경로

argv[1] ~ : 입력받은 문자열

argc는 입력 갯수


envp환경변수 




처음에 문제를 보고 그냥 실행해보면


"pass argv[1] a number" 


조건문 if 문에 argc<2 가 있으므로 아무것도 넣지않고 실행하면 저렇게  출력이된다.


여기서 보면 fd 가 등장하는데 fd는 파일디스크립터 를 의미한다.


file descriptor


0 -> 표준입력 : 키보드

1 -> 표준출력 : 모니터

2 -> 표준에러 : 모니터


어디서 많이 봣다 했더니 문제에서도 물어본당.

 

리눅스에서 파일디스크립터가 무엇을 의미하냐구!



파일디스크립터를 이용해서 문제를 풀면 되는 것이다!



여기서 기본적인 C언어 지식(2) !


atoi 함수와 strcmp 함수



atoi 함수는 문자열을 10진수로 변환시켜주는 함수이고



strcmp 함수는 문자열을 비교하는 함수이다. 



그렇다면 여기문제에서는 buf에 담긴 문자열과 LETMEWIN 가 일치하면 


.


flag 를 얻을 수 있다.




그렇다면 다시 문제로 돌아가서 fd 가 '0' 이 되어야만 입력을 받을 수 있다.


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


그렇다면 입력을 받게끔 하려면 


argv ( 받는 문자열 ) 에서 0x1234 ( 10진수로 4660 )  만큼 뺀값이 0 이되어야 한다. 






뿅!


아까와는 달리 입력을 받을 수 있게 전환이 되버렸다.


이제 flag를 얻을 수 있는 조건을 만족시켜줘야 한당.


32만큼 buf 가 할당됬는데 이제 그 buf에 어떠한 값을 주면 


조건문에서 설정한 printf 가 출력되면서 system 함수가 호출이 된다.



짜잔


저것이 flag!!! 


"mommy! I think I know what a file descriptor is!!"


넘나 기본적인것인데 너무 헤맸다.


열공해야지...

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

[pwnable.kr] [bof] bof sol  (0) 2016.11.18
[공부] [메모] 문제들을 풀면서 익힌 것들  (0) 2016.11.17
[poxx2016] boffee_write up  (0) 2016.10.29
[공부] 인투르 2  (0) 2016.10.29
[공부] 인투르  (0) 2016.10.22
Comments