background
NOP Sled & RET Sled
NOP(No OPeration) NOP은 xchg eax, eax와 같이 프로그램의 실행에 영향을 주지 않는 명령어이다. 프로그램이 실행 중에 NOP 명령어를 만나면 다음 명령어로 넘어가는 것과 같은 효과를 준다. (x86 아키텍처의 NOP 명령어 바이트코드는 0x90) NOP Sled, 혹은 NOP Slide는 주로 셸코드의 주소를 정확히 알아내기 힘들 경우 큰 메모리를 확보하여 셸코드 주소의 오차 범위를 크게 만들 때 사용한다. 원래 셸 코드가 저장된 주소로 정확히 이동해야하지만 NOP를 활용하면 중간부터 들어가도 되는 것이다. 셸 코드가 0x100에 저장되어 있다고 가정하면 원래 0x100으로 정확히 실행 흐름을 옮겨야하지만 NOP를 0x10000바이트 추가하면 0x100~0x10100 사이 아무 ..
PLT(Procedure Linkage Table) & GOT(Global Offset Table)
라이브러리(Library) PLT, GOT를 이야기하기 앞서 라이브러리에 대해 알아보자. 라이브러리에는 자주 사용하는 혹은 성질이 비슷한 계열의 함수들이 모여있다. 라이브러리를 활용해서 사용자는 함수를 정의할 필요 없이 원하는 함수를 가져다 쓸 수 있다. 라이브러리는 크게 동적 라이브러리와 정적 라이브러리로 나뉜다. 링크(Link) 라이브러리는 링크라는 과정을 통해 소스 코드와 연결된다. 리눅스에서 C 소스 코드는 전처리, 컴파일, 어셈블 과정을 거쳐 ELF형식을 갖춘 오브젝트 파일(Object file)로 번역된다. 오브젝트 파일은 실행 가능한 형식을 갖추고 있지만 라이브러리 함수들의 정의가 어디 있는지 알지 못하므로 실행은 불가능하다. 링크 과정을 통해 라이브러리에 정의된 심볼과 관련된 정보들을 찾아..
시스템 호출(system call)
이 글을 system call에 대해 제가 이해한 부분까지 정리해놓은 글입니다. (더 자세한 내용은 레퍼런스를 참조해주세요) system call (syscall) 운영 체제의 커널이 제공하는 서비스에 대해, 응용 프로그램의 요청에 따라 커널에 접근하기 위한 인터페이스이다. 바꿔 말해 프로그래밍 언어에서 지원하지 않는 기능을 운영 체제에게 처리해달라고 부탁하는 것이다. 커널과 응용 프로그램은 CPU의 권한 수준(privilege levels)이나 하드웨어 접근 능력이 다르다. 커널은 CPU 시스템의 특정 메모리 위치에서 동작한다. 커널의 기계어 코드에서 사용하는 모든 주소는 물리 주소로 고정되어 컴파일되고 로드되어 실행된다. 커널은 부팅과정에서 전체 메모리 리소스 중에 일정 부분을 점유하여 동작하고 인터..
XXE Injection 이해를 위한 XML 기초 지식
이 글은 XXE Injection을 공부하기 위해 TCP School의 XML 강의를 정리한 글입니다. http://www.tcpschool.com/xml/intro 코딩교육 티씨피스쿨 4차산업혁명, 코딩교육, 소프트웨어교육, 코딩기초, SW코딩, 기초코딩부터 자바 파이썬 등 tcpschool.com XML XML은 JSON과 같이 데이터를 전달하기 위한 목적으로 만들어졌다. XML은 다른 마크업 언어를 만드는데 사용되는 다목적 마크업 언어이다. 또한 스키마를 가지고 있는데 스키마는 DTD(Document Type Definition)와 XML 스키마(XSD)로 작성할 수 있다. XML의 content-type은 application/xml 이다. DTD DTD(문서 타입 정의)는 XML 문서의 구조 및..
XXE(XML External Entity) Injection
이 글은 XXE Injection에 대해 공부하기 위해 레퍼런스를 참고해 작성했습니다. XXE(XML External Entity) Injection 직역하면 XML 외부 객체 삽입 공격이라고 할 수 있다. XXE는 외부 엔티티(Entity) 정의의 보안 취약점을 이용한 공격이다. 엔티티는 반복적으로 나오는 문장이나 문자열을 다른 곳에 저장해 놓고 참조하는 객체이다. 재사용이 가능한 XML 조각, DTD 조각, 긴 문자열, 상수, non-XML 데이터가 될 수 있다. 엔티티는 XML 문서뿐만 아니라 DTD 문서 안에서도 참조가 가능하다. XXE Injection으로 할 수 있는 공격의 종류 LFI, RFI, XXS Attack, DOS가 있다. LFI는 상대경로를 이용해 원하는 파일에 접근할 수 있다. ..