본문 바로가기

전체 글

(426)
Buffer Overflow Basic 3 Buffer Overflow의 이해 버퍼란 , 시스템이 연산을 하는데 있어 필요한 데이터를 일시적으로 저장하는 저장공간을 말한다. 문자열을 처리하게 되면 문자열 버퍼가 되고 , 수열이라면 수열 버퍼가 되겠다.대부분의 프로그램에서는 이러한 버퍼를 스택에다 생성한다. 스택은 함수 내에서 선언한 지역 변수가 저장되고 함수가 끝나고나면 반환한다. BOF는 미리준비된 버퍼의 크기보다 큰 데이터를 쓸 때 발생하게 된다.만약 40byte 크기의 버퍼가 준비되어있는데 41~44byte를 사용하면 이전 함수의 bp를 수정하게 될 것이다. 더 나아가 45~48byte를 쓴다면 return address가 저장되어 있는 공간을 침범하게 될 것이다.따라서 BOF공격은 공격자가 메모리상의 임의의 위치에다 원하는 코드를 저장시켜..
Buffer Overflow Basic 2 이번엔 프로그램이 실행되면 프로세스가 메모리에 적재되고 메모리와 레지스터의 동작을 간단한 프로그램을 통해 확인해보자. 위와같은 간단한 소스를 짜고 컴파일 ( gcc -s )까지 하자.그 후 simple.c 프로그램이 컴파일 되어 실제 메모리상 어느위치에 존재하는지 확인해보기 위해 gdb를 이용하여 어셈블리 코드와 메모리에 적재될 logical address를 살펴보자. ( 각자 실행 ) 살펴보면 function()함수가 아래에 자리잡고 main()함수는 위에 자리잡음을 확인할 수 있다.따라서 메모리 주소를 바탕으로 생성될 이 프로그램의 segment 모양은 다음과 같다.이 소스에는 전역변수를 지정하지 않았기 때문에 data segment에는 링크된 라이브러리의 전역변수값만 들어있을 것이다. 이제 프로그램..
Buffer Overflow Basic 1 기초관련 내용은 달고나 문서를 참조했습니다. 1. 8086 Memory Architecture 위 사진은 8086 시스템의 기본적인 메모리구조다. 시스템이 초기화되기 시작하면 시스템은 커널을 메모리에 적재시키고 가용 메모리 영역(Available Space)을 확인하게 된다. ( 커널 : 컴퓨터 운영체계의 가장 중요한 핵심으로써 운영체계의 다른 모든 부분에 여러가지 기본적인 서비스를 제공.메모리나 저장장치 내에서 운영체계의 주소공간 관리 , 메모리 관리 역할 ) 요즘 사용되는 시스템의 CPU는 64bit이므로 메모리 영역은 0 ~ 2^64 -1 범위를 갖는다. 프로세스 : 하나의 프로그램이 실행되기 위한 메모리 구조.운영체제는 하나의 프로세스를 실행시키면 이 프로세스를 segment라는 단위로 묶어서 가..
포인터 사용하는 모든 변수는 메모리의 특정 위치에 저장되고 그 위치에 대한 메모리 주소를 포인터라고 한다. 포인터 변수는 주소값을 저장하는 특별한 변수다. 포인터 변수가 어떤 변수의 주소를 저장하고 있다는 것은 포인터 변수가 그 변수를 가리키고 있다( 포인트 하고 있다 ) 는 의미가 된다. 포인터 변수를 간단히 '포인터'라고 부르기도 한다. 다음과 같이 하면 포인터 변수를 사용하여 다른 변수를 액세스할 수 있다. int i; //정수형 변수 i 선언int *ptr = &i; // 포인터 변수 ptr에 i의 주소값 저장 포인터 선언은 다음과 같이 한다. 자료형 * 포인터 변수명;1)자료형은 포인터 변수 자체의 자료형이 아니라 포인터 변수에 저장할 주소에 있는 일반 변수의 자료형이다.2)포인터변수 이름은 일반 변수..
Data Structure 배열 배열(Array)은 같은 자료형을 가진 자료들을 나열하여 메모리에 연속으로 저장하여 만든 자료형들의 그룹이다. 예를들어 , 요일을 나타내는 월,화,수,목,금,토,일요일을 각각 변수로 선언하면 7개의 변수를 만들어 개별적으로 사용해야 한다. 하지만 읻르을 묶어서 하나의 배열을 만들면 하 번의 배열 선언으로 만들수 있고 , 각 요일은 배열의 요소가 되어 다루기가 편하다. 1차원 배열 선언법:자료형 배열이름 [배열 요소 갯수]; 1)자료형 : 자료형에서는 배열의 자료형을 선언한다 , 배열 요소들은 모두 같은 자료형이여야 하고 , 그 자료형이 배열의 자료형이 된다.2)배열이름 : 배열이름은 변수이름과 같은 규칙으로 정한다. 3)배열 요소 갯수: 요소 갯수는 대괄호를 이용하여 표시하는데 , 이는 배열의 크기가 된..
SQL Injection SQL Injection에 대해 알아보기 위해서는 DB를 이해해야 한다. 데이터 : 현실 세계에서 존재하는 여러가지 정보ex) 친구 이름 , 주소 ..etc 데이터베이스 : 데이터를 효율적으로 관리하기 위해 분리한 정보데이터베이스는 테이블로 이루어져있고 테이블은 필드로 이루어져있다. DLL 언어 : 데이터베이스의 테이블을 정의하고 작성 ( create(생성) , alter(변경) , drop(삭제) ) DML 언어 : 데이터베이스를 추가, 갱신, 삭제 및 검색 수행 ( select , insert , update , delete ) DCL 언어 : 데이터베이스의 보안과 데이터의 연속성을 유지 ( grant(권한할당) , revoke(권한제거) , commit(데이터 변경 승인 ) , rollback(데이..
웹 취약점 분류 웹 취약점 종류 및 원인에 대한 이해 , 취약점별 공격로그의 이해 , 취약점별 대책(코딩 및 설정)에 대해 알아보자. 취약점 분류국내외적으로 많이 알려져있는 취약점은 OWASP 10이 있다.(www.owasp.org 참고) 웹 취약점을 10가지 형태로 분류하고 정의하며 , 웹 보안에 관심있는 기업 및 개인이 함께 공통된 프로젝트등을 진행한다. owasp 등과 같은곳에서 얻을수 있는 정보의 취약점들을 정리해보자. 구분 점검 항목 설명 1 SQL Injection 로그인 폼 및 변수 값에 SQL 쿼리를 삽입하여 로그인 우회 및 DB를 변조하는 공격 2 XSS (Cross Site Scripting) 게시판 및 URL 파라미터에 스크립트를 삽입하여 해당 글 혹은 링크를 클릭하는 사용자의 정보를 취득하는 공격 ..
HTTP Request ~ HTTP Response 앞서 간략히 소개한 HTTP Response & Request에 대해 상세히 알아보자. HTTP Request 웹 브라우저 -------- HTTP Request(요청) -----------> 웹 서버 웹 브라우저 웹 서버