1577, 6/79 회원가입  로그인  
   yl
   http://yl11.webice.co.kr
   레벨5 레이스컨디션에 대해서. [의외로 질문하시는 분들이 많아서..]

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


글쓴이 : yl
2003. 10. 1. Wed

레이스컨디션에 대해서.


오늘. 메일확인을 하다가, 한 분께서 메일로 질문을 하셨는데.....

이것저것 첨가해서 상당히 길어졌는데요..

한분만 보기에도 그렇고, 레이스컨디션 문제에 대해 여러 분들로부터 쪽지, 메일, 질문글이 올라오기에 씁니다.

글을 잘 쓰지는 못해서 읽기에 불편함이 있으시겠지만,.

뭐 그래도 읽어보시면 공부하시는데에 도움이 되겠습니다.

-
레이스 컨디션 기법을 간단히 설명하자면 경쟁조건입니다.

이해를 돕기 위해 해쿨 책 내용을 참고해서 씁니다.


문제가 되었던 구 버전의 /bin/ps 프로그램은 실행도중 /tmp/ps_data 라는 파일을 생성합니다.

하지만 심볼릭 링크를 이용한 해킹을 방지하기 위해 이미 ps_data라는 파일이 있으면

지우고 난 후, 다시 ps_data라는 파일을 생성하게끔 되어 있는데요.

  **부연설명 : 파일이 지워지게 되면 링크는 끊겨버립니다.
  이렇게 함으로써 해커가 미리 ps_data 에 심볼릭 링크를 걸어두는걸 무산시킬 수 있죠.
  그럼 이럴 경우 어떻게 할까요?
  방법은 있죠. 바로 지우고 생성하는 틈을 이용하는겁니다.

ps_data 파일 존재 여부 확인
(시간 간격)
존재하면 ps_data 파일을 삭제
(시간 간격)
새로운 ps_data 파일 생성

두 번째 시간 간격에 ps_data 파일을 만들어주면서 링크를 걸어두면....
ps_data 파일이 생성 될 때 ps_data의 내용이 빠져나갈 수 있습니다.

이 타이밍을 어떻게 맞추느냐?

따로 타이밍을 계산할수는 없습니다. 그렇다고 타자로 칠수는 없죠.

유일하게 빠르게 커맨드를 내릴 수 있는 프로그래밍 언어를 빌립시다.

전체는 알려드릴수 없고 간략화 해서 써드립니다.

문법은 공부를 하시든가 찾아서 다시 만들어 보세요.

  첫번째 파일.
  system(); 함수를 이용해서 /bin/ps 실행
  x 10000 (반복 횟수는 이렇게 크지 않아도 그리 문제는 없습니다.)

  두번째 파일.
  결과물을 카피할 대상 (예:ps_data_copy)에 심볼릭 링크로 원본파일의 뿌리를 내림
  x 10000 (역시..;)

두 파일을 컴파일해서 1을 실행한 후 2를 실행해 봅시다.

/bin/ps 가 10000번이나 실행되는 동안에 약간씩 엇갈려가며 파일이 생성됩니다.
이렇게 하다보면 우리가 맞춰야 할 '두 번째 시간 간격'에 적어도 한번은 맞겠지요.
타이밍이 맞는 순간이 님께서 원하는 데이터가 추출되는 때 입니다. 알아두세요..

ftz를 들자면 이름이나 기록되는 데이터 같은 약간의 차이만 있을 뿐 /usr/bin/level5 가
하는 일은 위와 거의 같습니다. 패스워드가 저장 되는 level5.tmp의 내용을 다른 파일로
추출해내면 되는거니 그리 어렵진 않습니다. 그렇기 때문에 같은 원리를 적용하여도 됩니다.
-
여기까지


다음은 제가 심볼릭 링크를 사용하는 예를 쉽게 설명하기 위해 직접 해 본 내용입니다.


##
[level5@ftz .testsym]$ cat > b

ctrl + D
[level5@ftz .testsym]$ cat b

[level5@ftz .testsym]$ ln -s b a
[level5@ftz .testsym]$ ls -al
total 8
drwxrwxr-x        2 level5   level5        4096 Oct  1 17:13 .
drwxrwxrwt        4 root     root          4096 Oct  1 17:13 ..
lrwxrwxrwx        1 level5   level5           1 Oct  1 17:13 a -> b
-rw-rw-r--        1 level5   level5           0 Oct  1 17:13 b
[level5@ftz .testsym]$ cat > a
test im ni da
ctrl + D
[level5@ftz .testsym]$ cat a
test im ni da

[level5@ftz .testsym]$ cat b
test im ni da

[level5@ftz .testsym]$

복제본의 공씨디가 될 b를 구지 만들어 준 이유는 b의 내용변화를 보이기 위함입니다.

보시는 바와 같이 링크를 하기 전 b의 내용은 텅 비어 있습니다.

그리고 a라는 파일과 심볼릭 링크를 시켜주었고,

정말로 a의 내용이 b로 가는지 알기 위해 a에다가 test im ni da 라는 문구를 넣었습니다.

a에다가 입력 후 b의 내용을 확인해 보니 정말로 뜨는군요.

뭐 넣은 내용이 좀 허접합니다만 테스트이니.. ^^;

데이터야 어쨌든 a의 내용을 정확하게 b에 담아 낼 수 있었습니다.
##

휴, 식후 배부른 상태로 써서 앞뒤가 안맞아 보이긴 하지만

나름대로 이것저것 실험해가며 쓴 글이라 자세하리라 믿습니다. 헤헤 ^^

  Hit : 13192     Date : 2003/10/01 07:22
[불법/스팸글로 신고하기]



    
ijustwon ㅎㅎ 감사합니다... 고생하고있었는데.. 확실하진 않지만 그래도 조금은 이해가 되네요..^^ 2003/10/01  
nettiex 와.. 좀 난해한 내용이라 생각했는데 이글 보니 이해가 팍팍 감사합니다! 2004/01/17  
hyuri 감사합니다. 2004/06/21  
sam85916 예제보니까 무슨 말이지 알겠네요^^ 감사합니다 2004/12/30  
osebin 감사합니다. 많은 도움이 되었습니다. 2006/03/31
usan id 2006/11/14  
sibelli 감사합니다. 2007/01/19  
parkjh888 마지막 예제가 심볼릭 링크 거는 건가요??그런거라면 이해 잘 갑니다^^ㄳ 2007/01/19  
jjm1023 이런느낌이군요 감사합니다 2017/01/27  
1477   [펌] PC키퍼 깨기[4]     dzhfldk
08/22 13634
1476   * 엘리트해커가 되는길 *추천 *[30]     HackerMapia
03/02 13589
1475   리눅스 명령어 마스터 8 [마지막][44]     소유
09/10 13362
1474   [[초급/강좌]] 유닉스 주요 명령어[7]     소유
10/09 13321
1473   [자작]리눅스 압축 명령 정리.[2]     williamlee
12/29 13318
1472   [[초급/강좌]] 유닉스 기본 정리[8]     소유
10/09 13316
1471   리눅스 명령어 마스터 6[7]     소유
09/08 13292
1470   리눅스 명령어 마스터 7[8]     소유
09/09 13287
  레벨5 레이스컨디션에 대해서. [의외로 질문하시는 분들이 많아서..][9]     yl
10/01 13191
1468   리눅스 방화벽의 종류...[4]     bsjzzz
01/12 13008
1467   해커스쿨 Level1 풀이     xodnr631
08/20 12993
1466   넷센드 하는법(하도많이 물어보시길래;;)[13]     qkreoghks00
01/23 12990
1465   BOF 해결 무작정 따라하기 #1[7]     ssuckies
04/12 12970
1464   인터넷에 리눅스 서버 구축하기[1]     소유
07/07 12954
1463   Webhacking.kr 51번 RPG게임 나오기[4]     푸른하늘
03/31 12911
1462   ↓보충. 올바른 검색 조건으로, find명령어를 사용하자.[13]     yl
09/09 12824
1461   오라클 Enterprise Edition Release 8.0[6]     netwow1
12/14 12762
1460   C언어에서 사용되는 특수문자/서식문자[4]     xodnr631
08/18 12681
1459   [자작]백트랙 4 R1, 윈7 멀티부팅 (+ 한글화+grub설정)[4]     williamlee
11/20 12679
1458   윈도우 시스템의 컴퓨터에서 리눅스 설치방법[15]     o-0_o-0
09/19 12655
[1][2][3][4][5] 6 [7][8][9][10]..[79]

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