전체 글

전체 글

    DAY-2 GDB로 어셈블리 해석

    DAY-2 GDB로 어셈블리 해석

    오늘은 소스코드를 어셈블리어로 보고 이해를 할수 있게 정리자료를 적어보고자 한다. 일단 레지스터를 알아보기전에 메모리의 구조가 어떻게 이루어지는지 보겠다. 0x00000000 0xffffffff Code 영역은 말그대로 코드 자체를 구성하는 메모리 영역이다. Data 영역은 전역변수,정적변수,배열,구조체 등이 저장된다고한다.추가로 초기화 된 데이터는 Data 영역에 저장되고 초기화 되지 않은 데이터는 BSS(Block Stated Symbol)영역에 저장된다고한다. Heap 영역은 필요로 의해서 메모리를 할당 하고자 할떄 위치하는 메모리영역이다.예를 들어 C의 malloc()함수를 사용하면 이 영역에 데이터를 저장 할 수 있다고한다. Stack 영역은 매개변수,지역변수,리턴 값 및 연산 시 일어나는 값들..

    DAY-1 Command Injection

    DAY-1 Command Injection

    오늘은 Command Injection에 대해서 강의 받은 내용을 정리를 하고자 글을 쓴다. 예제1 cgi1.c 이 코드는 char형 변수 buf에 read함수로 입력을 받아 system함수를 통해서 입력받은 값을 실행시키는 코드였다. read함수는 read (int fd, void *buf, size_t nbytes);라는 형식에 맞추어 사용이되고int fd는 파일디스크립터로 0은 표준입력 1는 표준출력 2는 표준에러를 나타낸다.여기서는 0임으로 입력을받는다 그리고 void *buf는 입력한 값을 저장할 공간을 나타내고size_t nbytes는 입력받을 바이트를 표시한다. 여기의 코드에서 문제가 되는 점은 입력받은 값으로 system함수를 실행을 시켜준다는것이다.-system함수는 /bin/sh -c ..