inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

독하게 되새기는 C 프로그래밍

쉘 코드 (예제 포함)

ShellCodeSample03.c에 대하여 질문이 있습니다.

해결된 질문

455

dohyun_lim

작성한 질문수 67

0

 안녕하세요 선생님 질문이 있습니다.

Sample03에는 WinExec , exit이 주석처리되어 있어서 선생님이 추가적으로 언급하신 함수의 주소 문제가 아닌것 같은데

'05_ShellCodeSample03.exe'(Win32): 'C:\Windows\SysWOW64\ucrtbased.dll'을(를) 로드했습니다. 
0x298c 스레드가 종료되었습니다(코드: 0 (0x0)).
예외 발생(0xFFFFFFFF, 05_ShellCodeSample03.exe): 0xC0000005: 0xFFFFFFFF 위치를 실행하는 동안 액세스 위반이 발생했습니다..

이런 에러가 떠서 기계어 숫자가 틀렸나 해서보니
밑줄에서 한 4개정도 가 달라서 수정하였더니 동작하였습니다.

#include <Windows.h>

void main()
{
	char shellcode[] = "\x55\x8B\xEC\x83\xEC\x48"
		"\xC6\x45\xF4\x63\xC6\x45\xF5\x61\xC6"
		"\x45\xF6\x6C\xC6\x45\xF7\x63\xC6\x45"
		"\xF8\x00\x6A\x01\x8D\x45\xF4\x50\xA1"
		"\x00\x70\x41\x00\xFF\xD0\x6A\x01\xA1"
		"\xC0\x70\x41\x00\xFF\xD0";
	char myshellcode[] = "\x55\x8B\xEC\x83\xEC\x48"
		"\xC6\x45\xF4\x63\xC6\x45\xF5\x61\xC6"
		"\x45\xF6\x6C\xC6\x45\xF7\x63\xC6\x45"
		"\xF8\x00\x6A\x01\x8D\x45\xF4\x50\xA1"
		"\x00\xb0\xba\x00\xFF\xD0\x6A\x01\xA1"
		"\x4C\xB1\xBA\x00\xFF\xD0";
//	WinExec("", 0);
//	exit(0);
	//int *pShell = (int*)shellcode;
	int* pShell = (int*)myshellcode;
	__asm
	{
		jmp	pShell
	}
}

해당 원인도 프로그램이 실행할때마다 ASLR 때문인것인가요? 궁금합니다

c kernel secure-coding

답변 1

1

널널한 개발자

함수 주소가 맞습니다. 다만 주석 처리한 WinExec(), exit() 함수를 한 번이라도 호출하도록 빌드해야 두 함수의 메모리 주소가 확실해집니다. 그렇지 않으면 링크되지 않아 아예 존재하지 않는 주소가 됩니다. 그리고 생각하신 것처럼 ASLR이 적용되면 주소의 위치는 계속 바뀝니다. (같은 주소가 나올 확율은 대략 1/256)

사실 좀 더 자세히 설명 할 것이 있으나 강의에서 다루지는 않았습니다. 리버싱 수업도 아니고 무엇보다 공격기법을 굳지 자세히 알릴 이유는 더욱 없기 때문입니다. 이미 알고 계시겠으나 이 예제는 공격 기법을 이해하고 대응하기 위한 취지라는 점을 잘 기억해주시면 좋겠습니다. 감사합니다.

병행성 제어

0

53

2

질문이 있습니다(강의와 거의 상관이 없는)

0

79

2

컴파일러 서적 질문입니다

0

165

1

코드생성 및 최적화 질문입니다

0

168

1

Hex Editor를 이용한 다국어 번역 관련 질문입니다

0

213

2

큐의 배열을 넘겨도 정상작동합니다

0

159

2

캐너리비트에 관하여 질문

0

220

3

상수화된 문자열에 질문있습니다

0

176

1

함수 호출 매개변수 전달에 대한 질문 드립니다.

0

195

1

단항 증감 연산에 따른 다른 접근에 대한 질문있습니다.

0

212

2

함수호출 규약 종류에 따른 장단점 여부

0

235

2

정적라이브러리 링크 오류

0

227

1

const char *를 char*에 초기화할때의 컴파일 에러 처리 방식 문의

0

359

2

pszParam 수정이 왜 Hello World print에도 영향을 미치는지 이해가 잘 안됩니다.

0

261

2

비선형 자료구조

0

314

1

자료 구조 공부 후에

0

357

1

강의자료 관련

0

254

1

마지막에 말씀하신 부분 질문드립니다.

0

216

1

문자열 관련 질문 드립니다

0

293

1

라이브러리

0

276

1

부동소수점

0

397

1

왜 변수 주소 사이에 offset이 있는 건가요?

0

307

2

stack 쌓는 순서

0

515

1

함수호출이랑 쓰레드

0

415

1