0x04 pwnable(130)
-
공부 내용
위치 독립 코드 (Position Independent Code) 또는 PIE(Position Independent Executable): 메모리 어딘가에 위치한 기계어 명령: "절대주소"와 관계없이 적절히 실행되는 코드 RIP (32BIT에서는 EIP)즉, 다음에 실행 될 주소를 담고 있는 레지스터 IP : Instruction Pointer 프로그램을 컴파일 할 때는 static compile과 dynamic compile이 있다.기본적으로 default는 dynamic compile 이고, gcc에서 static compile을 하기 위해서는 -static 옵션을 부여해야 한다. dynamic compile은 동적라이브러리 링크에서 적용되는 컴파일 기법이다.동적라이브러리는 정적라이브러리와 다른점이 ..
2017.10.23 -
Lord of Bof 2번 문제
gremlin -> cobolt id : gremlinpw : hello bof world 바쁜 사정으로 인해 공부하지 못했던 포너블. 다시 시작한다. 오늘 풀어본 문제는 cobolt 권한을 얻는 문제이다. 친절하게 소스코드를 보여주고 있으니 소스코드 부터 들여다 볼 것이다. /* The Lord of the BOF : The Fellowship of the BOF - cobolt - small buffer*/ int main(int argc, char *argv[]){ char buffer[16]; if(argc < 2){ printf("argv error\n"); exit(0); } strcpy(buffer, argv[1]); printf("%s\n", buffer);} 이전 문제보다 확실히 버퍼의 ..
2017.07.07 -
overflow_example
오버플로우는 몇 번을 공부해도 지나치지 않는 것 같다. C프로그램은 단순한 언어이므로 프로그래머가 프로그램을 원하는 대로 제어하고 효율적으로 만들 수 있다. 하지만, 한편으로는 프로그래머가 메모리 관리를 소홀히 하면 버퍼 오버플로우와 메모리 누수 현상이 일어날 수 있다. 어떤 변수가 메모리에 할당돼 있을 경우 그 변수의 내용이 메모리 경계를 벗어나지 않는지 검사하는 안전장치가 있어야 한다. 안전장치가 없을 경우, 프로그래머가 의도한 버퍼의 크기를 무시하고 더 큰 크기의 버퍼를 입력할 수 있게 된다. 프로그래머가 의도하지 않은 데이터 길이를 입력하여 프로그래머가 의도하지 않은 결과를 만들어 내는 것이 버퍼 오버플로우 / 버퍼 오버런 이라고 한다. 예제를 통해 살펴보겠다. 해당 예제의 버퍼 크기는 8바이트 ..
2017.07.06 -
Lord Of BOF 1번 문제
오늘 처음으로 포너블에 입문하였다. 정말 개념 잡기 어려웠던 것 같다. 포너블은 3원칙이 중요하다. 1원칙. 해당 취약점이 BOF, UAF 등등 (아직 이것 두개만 개념을 안다) 중에 무엇인지 파악한다. 2원칙. GDB 혹은 IDA로 분석한다. (해당buf의 크기를 구하고, SFP(Stack Frame Pointer), RET(Return)에 대해 파악한다) 3원칙. 2원칙을 토대로 페이로드를 짜고 틀리면 계속 검증한다. (끈기가 필요하다) - 아직 왕왕왕 뉴비니까 문제 코드 부터 살펴보자. 이번 문제는 strcpy 취약점을 이용한 BOF공격이다.BOF를 통해 권한을 딸꺼다. 여기서 짚고 넘어가야 하는 개념이 한가지 있다. gremlin 바이너리는 그룹과 그 외 사용자 권한에 gremlin이라고 적혀있다..
2017.05.12