쉘 코드란? 쉘 코드란? 쉘 코드는 시스템의 특정 명령을 수행하는 크기가 작은 코드를 말한다 이는 시스템의 쉘을 실행시킨다는 것에서부터 유래하였고, 주로 기계어 코드로 이루어져있다. 쉘 코드의 종류 쉘 코드는 대상을 기준으로 로컬과 원격 쉘코드로 구분된다. 로컬 쉘 코드 대상 시스템에 권한이 존재할 경우 취약점이 포함된 프로세스를 통해 높은 권한을 획득할 때 사용하는 쉘 코드 원격 쉘 코드 네트워크상의 다른 대상 시스템에 대한 취약점이 존재하는 프로세스를 공격할 때 사용되는 쉘 코드 Study/system 7년 전
해커스쿨.Section 12 Section 12 트레이닝 코스 : 메모리 값 변조하기 위의 코드를 보고 메모리 값을 변조해보자 우선 "abc" 인자와 함께 실행해보면 아래와 같은 결과가 나온다 타겟을 DOG에서 CAT으로 바꾸어보자 위의 모습처럼 어렵지 않게 바꿀 수 있다. 이번에는 숫자를 바꾸어보자 코드는 아래와 같다 실행결과는 아래와 같다. 이번에도 "abc"를 인자로 넘겨주니 아래와 같이 나왔다 이번에는 아까처럼 오버플로우를 일으키면 아래와 같이 잘 되지 않는다. 입력한 5678은 문자로 받아들이기 때문에 이의 아스키코드인 35 36 37 38이 들어가게 된다. 이러한 경우에는 숫자로 인식할 수 있도록 파이썬이나 perl을 이용해주어야 한다. 위를 참고하여 사용하면 된다. 프로그램을 perl문법에 맞춘 인자와 함께 넘겨주면 위.. Study/system 7년 전
해커스쿨.Section 6 Section 6 gets() 함수 이해하기 section 5 에서 마지막으로 했던 질의에 대해 좀더 알아보는 과정이다 gets()는 키보드로부터 문자열을 입력 받아 버퍼에 저장하는 함수이다이때 이 함수는 주소를 파라미터로 받아 Call by reference 방식으로 입력을 받는다즉, 엔터를 입력받은 곳까지 시작주소부터 채워나가는 것이다 이는 버퍼오버플로우를 발생시키는 취약점을 발생시키게 한다. 이렇듯 gets()가 프로그램에 큰 취약점을 야기할 수 있기 때문에gcc에서 컴파일시 아래와 같은 경고문이 뜨게된다. Study/system 7년 전
해커스쿨.Section 5 Section 5 각 변수의 메모리 주소 비교해보기 이번에는 변수가 어떤 순서대로 메모리에 할당되는지 알아보자 위에서 알 수 있듯이 변수는 높은주소부터 할당된다 a와 b 주소차이는 14이며 10진수로 20. 즉, 문자배열 20바이트와 같다. 만약 문자배열 20칸을 넘어 a의 영역을 침범하게되면 어떻게 될까? Study/system 7년 전
해커스쿨.Section 4 Section 4 "메모리 주소" 와 친해지기 아래 코드는 i라는 변수를 선언한 후i의 정보를 알아보는 코드이다 위에서 볼 수 있듯이변수를 선언하는 것은 메모리 공간을 사용하는 것이고int형이기 때문에 변수의 시작주소부터 4바이트 만큼 사용하게 된다변수에 77이란 값을 넣은것은 해당 메모리공간에 77의 값을 넣은것과 같고메모리 주소를 출력해보면 첫번째 메모리주소가 나온다 Study/system 7년 전
해커스쿨.Section 3 Section 3c언어에서 버퍼 사용하기 우선 버퍼는 컴퓨터의 여러곳에 존재한다이번에는 c언어에서 버퍼를 사용하는 방법에 대해 알아본다 c언어에서는 변수를 이용하여 쉽게 버퍼를 만들어낼 수 있다변수에는 다양한 자료형이 있는데 몇가지만 예를 들어 보면 이런 범위를 가진 변수들이 있다이 범위가 각 자료형이 표현할 수 있는 값의 한계이다. 이 중에 char형을 눈여겨보자char형은 문자를 저장하는 자료형이다 그렇다면 문자열을 저장하고 싶을때는 어떻게 해야할까?여러개의 char형을 개별적으로 만들어주는 방법도 있지만 배열이라는 방법이 가장 편하다 예를 들어 20개의 char형 변수를 만들고 싶다면char[20] 과 같이 표현하여 만들 수 있다 그러나 여기에 20바이트 이상의 값을 입력받는다면 어떻게 될까? 이 .. Study/system 7년 전
해커스쿨.Section 2 Section 2버퍼 오버플로우(Buffer OverFlow)의 뜻이 뭔가요? 우선 버퍼에 대해서 알아야 한다.버퍼란 어떤 데이터가 한 곳에서 다른 곳으로 이동할 때,그 데이터가 일시적으로 보관되는 임시 기억 공간이다. 이번에는 오버플로우에 대해 알아보자OverFlow 말그대로 '과하다'와 '넘치다'가 합쳐져"과해서 넘쳐버리다"라는 뜻이 되어버린다 즉, 버퍼 오버플로우란"사용자가 입력한 데이터의 크기가 너무 과하여 제한된 버퍼의 용량에서 넘쳐버렸다"라는 뜻이 된다. 이렇게 제한된 버퍼 영역을 벗어나게 되면 다른 메모리 영역을 침범할 수 있고이는 프로그램에 문제를 일으킬 수 있다 Study/system 7년 전