시스템 해킹

 1576, 1/79 회원가입  로그인  
   리눅스펭귄
   BOF에서 인자 입력할때...

http://www.hackerschool.org/HS_Boards/zboard.php?AllArticle=true&no=1620 [복사]


예를들어 공격 대상 프로그램이 question 이라 하고, 덮어쓸 주소가 0x1234567이라 한다면,

./question $(perl -e 'print"\x67\x45\x23\x01" x 20')

이런식으로 입력을 하잖아요.

그런데 덮어쓸 주소를 문자열 형태로 입력하는걸 프로그램이 어떻게 인식을 할 수 있는지 궁금하네요.
해킹 공격의 예술 책 보다가 도무지 설명이 없어서 올려봅니다.

그리고 \x90이 NOP라는건 또 어떻게 인식을 하는지 모르겠네요. 답변 주시면 감사하겠습니다.ㅠㅠ

  Hit : 4351     Date : 2012/10/27 06:34



    
aalswn 첫번째 질문은 무슨말씀이신지 모르겟어요 ㅠ

두번째 질분은 nop 가 어셈블리어에서 아무명령을 실행하지않는건대 이것을 디버거로 기계어로 보면

\x90 이되어요 어셈블리어랑 기계어랑 1대1 맵핑인가 그개있어서 어셈블리어가 기계어로바꾸고 cpu 가 그 기꼐어를 읽어서 프로그램을 동작시켜요
2012/10/27  
qkrwncks593 print"\x67\x45\x23\x01 - > 질문은 이런것은 문자열인데 어떻게 컴퓨터가 인식합니까? 라고 가정하고 답편할게요

물론 터미널상에 쓰는건 모두 문자열이지만 '\x67' 같은건 실제 삽입될때 숫자 형태로 들어갑니다.

마치 c언어의 atoi() 함수처럼이죠 저도 님처럼 예전에 같은 궁금증이 있었는데 ㅋㅋ

그리고 또 \x90 은 볼때는 문자열이지만 실제 메모리상에 들어갈때 숫자형태로 들어갑니다.

\x90 은 NOP 입니다. 컴퓨터 프로세서 설계자가 그렇게 정해놓은겁니다.

\X90 이라는 명령어를 읽으면 마치 썰매타듯이 미끄러지면서 명령어가 실행됩니다.

추가로 scanf("%d",&a) 함수가 호출되고 입력되는건 문자열인데 어떻게 메모리상에 숫자가 들어가나요?

그것도 입력되는건 문자열이지만 scanf 함수가 문자열을 숫자로 변환하는작업 ( 파싱 ) 을 수행합니다.

질문에 대한 답이 맞는지 궁금하네요 ㅋㅋ 열공하세요 ^^
2013/01/12