본문 바로가기

Buffer Overflow

[Lv.2] Gremlin Gate에 이어, Gremlin을 풀이합니다. Login : gremlinpass : hello bof world gremlin 환경에 주어진 cobolt.c 코드입니다. 1번과 다른점은, 버퍼(배열)가 작네요. 이게 의미하는 건 기본적으로 redhat에서 동작하는 system("/bin/sh") 쉘코드가 24바이트인데 이걸 다 넣지 못한다는 거에요. 즉, 버퍼에 쉘코드를 삽입하는 방법은 쓰지 못하게 되었습니다. 하지만, 이 redhat 환경에서는 아무런 보호기법이 걸려있지 않기 때문에 스택의 어느곳이든 값을 넣을수만 있다면 쉘코드 실행이 가능합니다. 가령, argv[] 나 환경변수 영역에 값을 넣어도 말이지요. (이 두 군데는 저희들이 임의로 값을 input할 수 있는 곳이고 스택의 주소값이 바뀌지 않.. 더보기
[Lv.1] Gate LOB Redhat은 보호기법이 적용되어 있지 않은, 취약점이 무수히 많이 존재하는 환경입니다. 이 환경에서 Gate 문제는 기본적인 bof 취약점만 가지고 있기 때문에 쉘을 얻어낼 수 있는 방법 또한 다양합니다. 이걸 다 적기에는 제가 너무 힘들기 때문에 문제 풀 때마다 알려드리고 싶은 게 생각나면 다른 방법으로도 접근하는 방법을 보여드리고자 합니다. Login : gatepass : gate Gate 문제입니다. 코드를 보아하니 아주 대놓고 stack corruption을 일으켜주라고 하네요. 심지어 dep, aslr도 없기 때문에 스택에 쉘코드를 올려놓아 쉘을 띄우는 방법과 RTL, 환경변수에 쉘코드를 올려놓는 방법, argv[2]에 쉘코드를 올려놓는 방법, ... 등등 여러 방법이 있습니다. 우선.. 더보기
최신 우분투 환경에서 환경변수를 이용한 쉘코드 테스팅 시스템해킹 수업 중 해커스쿨 ftz나 lob를 접하신 분들이 환경변수를 이용해 쉘을 얻고싶으시다는 질문을 하여 글을 쓰게 됬습니다. 제가 포스팅할 환경은 Ubuntu 14.04 3 32bit와 64bit 입니다. 32비트와 64비트는 비슷하지만 64비트 주소값이 8바이트가 들어간다는 점에서 약간 접근이 힘들 수도 있습니다. 기본적인 Stack Corruption을 일으켜 환경변수를 이용한 쉘 획득을 해보겠습니다. 1. 32bit Test 테스트할 코드는 아주 간단합니다. 버퍼를 20만큼 채워서 sfp 4바이트 넣고 return address 4바이트를 채우면 우리가 원하는 eip를 제어할 수 있습니다. gcc -fno-stack-protector -mpreferred-stack-boundary=2 -o .. 더보기
stack corruption basic 요즘은 Buffer Overflow 라는 표현보다 Stack corruption, Heap Corruption이라는 표현을 쓰더라구요. 저도 트랜드(?)에 맞춰서 스택커럽션이라는 표현을 쓰도록 할게요. 시스템 포스팅을 시작하기에 앞서 시스템 해킹이 뭔지 알아보겠습니다. 우선, 간단하게 취약한 코드를 코딩합니다. 환경은 공지사항에도 올려놨듯이, ubuntu 14.04, 커널환경은 linux 3.13.0-36-generic 입니다. 컴파일 옵션에 -fno-stack-protector, mpreferred-stack-boundary=2 옵션을 주었는데 -fno-stack-protector 를 걸면 컴파일된 프로그램에 메모리보호기법인 ssp(stack-smashing-protector) 를 걸지 않습니다. 카나.. 더보기