1577, 79/79 회원가입  로그인  
   bugfixer2
   ;cat 을 사용하는 이유 .

http://www.hackerschool.org/HS_Boards/zboard.php?id=Free_Lectures&no=732 [복사]


결론은 , '|' 때문에 ;cat 을 붙여야만 되는 겁니다.

ㄱ) (  A 명령  ) | ./attackme   이런 입력을 했다면.

(perl -e 'print "\x32\xff\xff\xbf . . ..";cat)|./attackme 라는 예를 들죠.

ㄱ) 과 같은 방법을 통해서..

인자전달 방식이 아닌, 표준입력(키보드)을 통해 따로 입력을 받는

attackme 프로그램 같은 경우라도  '|' 을 통해 변수에 내가 원하는 값을 넣어서

오버플로우를 시킬수는 있었지만.

attackme 의 코드 중에 system("/bin/sh") 에 의해 생성되는 프로세스 또한

| 기준을 왼쪽에 있는. 다시말해서 ( A ) 자리의 프로세스의 표준 출력 내용을  

입력받으려고 하는거죠..


*원래 쉘(/bin/sh) 는 프롬프트 $ 를 띄우고 표준입력(키보드) 로부터
입력을 기다리는 것이지만...  위의 경우에는 | 때문에
키보드 대신 ( A ) 자리의 프로세스의 표준출력 내용을
입력받으려 한다는 거죠..


헌데, ( A )자리에 있던 프로세스가 종료되면 더이상 입력받을 내용이 없기 때문에 종료 됩니다.

따라서 ,파이프 연결을 지속적으로 유지시키기 위해서

cat 을 하나 더 집어넣어서 계속적으로 ( A ) 자리에서 표준출력을 시킬수 있도록

만들어 주는거죠.. 그게 바로 ;cat 의 역할 입니다.


그림으로 나타내어 보자면..

perl  ===================    attackme (fget( ); 파이프로 넘어온걸 받겠죠.)
|       ( 파이프 )             |
|                              |
출력마치고 종료.           system("/bin/sh"); 때문에 쉘 프로세스 실행.
                                |
(X없음.) =  =   =  =  = =  =    {새로운 쉘}
          (연결끊김)              => 이 쉘은 표준입력(키보드) 대신에
                                  파이프를 통해 입력을 받으려한다.
                                  하지만, perl은 종료되고, 더이상
                                  입력받을값이 없으므로, terminate된다.

그래서...  ( ) 부분에 ;cat 을넣게 되면.

perl  ===================    attackme (fget();)
|       ( 파이프 )             |
|                              |
출력마치고 종료.           system("/bin/sh"); 때문에 쉘 프로세스 실행.
|                              |
cat   ====================  {새로운 쉘}

;cat 때문에
cat실행되고 키보드로부터 입력기다리면서
입력받은내용을 표준출력으로
보내고 , 이것은 파이프를 따라 전해집니다.



참고로..

(perl -e ' ';cat)|./attackme   이런 형태를 디버깅하려면

perl -e '...') > arg   명령으로 출력내용을 파일에다 저장한다음

(gdb) r < ./arg  하면 됩니다.

도움주신 IDNED 님 감사합니다.ㅎ

  Hit : 9703     Date : 2007/05/18 09:57



    
pinode 짝짝짝 2007/08/12  
소울 짝짝짝(2) 2010/05/04  
3rdlifer 오오 대박 ㄳㄳ요 2012/01/09  
17   < 리눅스 참조 가이드 > 1     사용중
08/02 6562
16   #01 Protel CAD - 서문     아이프리드
11/21 10100
15   완벽하게 파일을 지우는 방법     koresong
10/18 8884
14   리눅스(9) 리눅스 명령어 1~8     사용중
08/02 7686
13   네 트 워 크 강 좌[17]     소유
10/05 17265
12   노즈의 해커스쿨 ftz게임탐방기 LEVEL 2 !! [2]     xownsdk2
08/02 7108
11   [자작] C 강좌 [2] - Memory Allocation[1]     wolverine
07/05 6549
10   [자작] 1. c 언어는 무엇인가(1)[1]     whdgusdl1220
08/16 6642
9   tseug의 네트워크에 관한 이야기 (IP) [1][6]     tseug
11/04 6757
8   해킹기법? (기발하다고 해야하나,웃기다고 해야하나)[35]     whqkdnf000
07/31 11755
7     C언어3-메모리와 변수(추가용어)     sihun1113
05/01 5792
6   웹 해킹에대해서 알아보자 (5)[2]     사용중
08/03 8201
5   웹 해킹에대해서 알아보자 (4)      사용중
08/03 7433
  ;cat 을 사용하는 이유 .[3]     bugfixer2
05/18 9702
3   < 리눅스 참조 가이드 > 4     사용중
08/02 6826
2   리눅스(9) 리눅스 명령어 6. 압축/해제[2]     사용중
08/02 7094
1   버퍼오버플로우 왕기초편 pdf 파일 어디서 구할 수 있나요?     duduwon
02/08 9014
[1]..[71][72][73][74][75][76][77][78] 79

Copyright 1999-2022 Zeroboard / skin by Hackerschool.org / Secure Patch by Hackerschool.org & Wowhacker.com