본문 바로가기

포너블

[HITCON TRAINING] LAB5 [HITCON TRAINING] LAB5 → WRITE UP 먼저 해당 바이너리의 보호기법을 확인해본다. 해당 바이너리는 인텔 기반의 32비트 바이너리로 확인되며 보호기법(mitgation)으로는 Partion RELRO 및 NX bit가 적용되어 있는 것으로 확인된다. 바이너리의 소스코드는 #include int main(){ char buf[20]; puts("ROP is easy is'nt it ?"); printf("Your input :"); fflush(stdout); read(0,buf,100); } 다음과 같이 간단한 바이너리이며 buf 배열의 크기가 20바이트로 선언되었지만 read함수를 통해 100바이트 길이의 데이터를 입력받으므로 Buffer Over Flow가 발생하는 취약점이 존재.. 더보기
[HITCON TRAINING] LAB3 [HITCON TRAINING] LAB3 → WRITE UP 먼저 해당 바이너리의 보호기법을 확인해본다. 해당 바이너리는 인텔 32비트 기반의 바이너리이며 바이너리 보호기법을 확인한 결과 어떠한 형태의 보호기법도 적용되지 않은 것으로 확인된다. 바이너리의 전체적인 실행흐름 파악을 위하여 해당 바이너리를 아이다7.0을 이용하여 확인해보겠다. 해당 바이너리를 분석해본 결과 권한을 설정한 뒤 두 차례의 입력을 받는 것으로 확인된다. 핵스레이를 이용하여 의사코드를 복원해보아도 다음과 같은 형태이다. 눈에 띄는 함수는 gets()를 이용하여 두번째 문자열을 입력받는 형태의 함수이다. gets()함수는 문자열의 길이를 확인하지 않으며 개행문자가 나올 때까지 입력받으므로 취약점이 발생할 수 있다. 이러한 점을 고려하.. 더보기
쉘코드 인코딩(Shellcode Encoding) 이 포스팅은 서적 '윈도우 시스템 해킹 가이드 : 버그헌팅과 익스플로잇'을 기반으로 작성한 포스팅입니다. 관련 포스팅 보러가기 쉘코드(Shellcode) 기초(1)쉘코드(Shellcode) 기초(2)범용 쉘코드(Universal Shellcode) (1)범용 쉘코드(Universal Shellcode) (2)메타스플로잇(Metasploit)을 이용한 쉘코드작성 쉘코드르 작성하는 방법을 포스팅을 다뤘었는데, 한가지 유의할 점이 있다. 실제 쉘코드를 작성하고 공격했을 경우 쉘코드가 정상적임에도 불구하고 이상하게 공격이 실행되지 않는 경우가 있다. 우리가 입력한 값을 프로그램 내부에서 처리하는 과정 중에 대문자가 소문자로 변환되기도 하고, 소문자가 대문자로 변하기도 하며, 유니코드로 변환되며 쉘코드 중간에 널.. 더보기
메타스플로잇(Metasploit)을 이용한 쉘코드 작성 이 포스팅은 서적 '윈도우 시스템 해킹 가이드 : 버그헌팅과 익스플로잇'을 기반으로 작성한 포스팅입니다. 이전 포스팅 보러가기 쉘코드(Shellcode) 기초(1) 쉘코드(Shellcode) 기초(2) 범용 쉘코드(Universal Shellcode) (1) 범용 쉘코드(Universal Shellcode) (2) 이전 포스팅 범용 쉘코드(Universal Shellcode) (2)를 보면 함수의 주소를 구할 때 어떠한 과정을 통해서 동적으로 구할수 있는지 확인하였다. 하지만 중요한 문제가 있다. 지금까지 다루었던 쉘코드는 단순히 cmd 명령을 실행시키는 코드였다. 이에 반해 실제 공격에 사용되는 쉘코드는 조금 더 다양하고 강력한 기능을 수행하게 된다. 조금더 다양하고 강력한 기능을 수행하기 위해서는 더.. 더보기
범용 쉘코드(Universal Shellcode) (2) 이 포스팅은 서적 '윈도우 시스템 해킹 가이드 : 버그헌팅과 익스플로잇'을 기반으로 작성한 포스팅입니다. 이전 포스팅범용 쉘코드(Universal Shellcode) (1) 보러가기 이전 포스팅에서는 범용 쉘코드의 필요성에 대하여 포스팅하였다. 그렇다면 ASLR기술이 적용된 시스템에서는 어떠한 과정을 통해 실질적으로 우리가 필요로 하는 함수를 구할 수 있을지 학습하여 보겠다. 프로세스에서 함수의 주소값을 구하기 위해서는 함수가 저장되어져있는 dll의 시작 주소값과 dll 시작 주소부터 함수까지의 offset을 알아야한다. ① dll의 시작 주소값 구하기 대체적인 주소값 계산의 흐름은 위와 같다. FS레지스터에는 TEB의 주소가 저장되어 있다. TEB란 현재 실행되고 있는 쓰레드에 대한 정보를 담고 있는 .. 더보기
범용 쉘코드(Universal Shellcode) (1) 이 포스팅은 서적 '윈도우 시스템 해킹 가이드 : 버그헌팅과 익스플로잇'을 기반으로 작성한 포스팅입니다. 현 포스팅[범용 쉘코드(Universal Shellcode)]을 읽기에 앞서 제시된 포스팅을 읽고 오시는 것을 추천드립니다. 이전 포스팅쉘코드(Shellcode) 기초(1)쉘코드(Shellcode) 기초(2) 범용 쉘코드(Universal Shellcode)의 필요성 이전 포스팅[ 쉘코드(Shellcode) 기초(1) ]에서 작성한 쉘코드를 컴퓨터를 재부팅한 후 실행하면 어떻게 될까? 다음과 같은 에러 메세지를 확인할 수 있다. 그렇다면 다음과 같이 재부팅전에 정상작동하던 쉘코드가 어떠한 부분에서 문제가 발생하며 어떠한 이유로 정상적으로 실행이 되지 않는 것인지 짚고 넘어가야 한다. 위의 작성한 쉘코.. 더보기
쉘코드(Shellcode) 기초(2) 이 포스팅은 서적 '윈도우 시스템 해킹 가이드 : 버그헌팅과 익스플로잇'을 기반으로 작성한 포스팅입니다. 이전 포스팅쉘코드(Shellcode) 기초(1) 보러가기 쉘코드(Shellcode) 기초(1)에서의 문제점 이전 포스팅[쉘코드(Shellcode) 기초(1)]에서 작성한 쉘 바이트 코드에서는 널바이트('0x00')을 포함한다는 문제점을 지니고 있었다. 바이트 코드에서 널바이트('0x00')를 포함할 시에 문자열 복사 계열 취약점에서 발생하는 부분에서는 바이트 코드로 사용할 수 없다는 문제점(범용성)과 이로인해 널바이트 코드 이후에 쉘 바이트 코드를 복사하지않아 정상적으로 작동하지 않는다는 문제점(신뢰성)을 지니고 있다. 결론적으로 공격자(해커)는 쉘바이트 코드에서 널바이트만을 제거하여 같은 동작을 하.. 더보기
쉘코드(Shellcode) 기초(1) 이 포스팅은 서적 '윈도우 시스템 해킹 가이드 : 버그헌팅과 익스플로잇'을 기반으로 작성한 포스팅입니다. 쉘코드(Shellcode) 쉘코드란 보안 취약점이 있는(실행흐름을 악의적으로 조작할 수 있는) 프로그램에서 실행 시킬 실질적인 실행 코드를 말한다.예를들어 이는 포트를 여는 것 일 수도 있고, 악의적인 서버에 본인의 개인정보 파일을 업로드하게 하는 것 일 수 도있으며,해커가 원하는 실질적인 모든 행동을 수행하는 코드를 말한다. 보안 취약점이 있는 프로그램의 공격에 성공하여 실행흐름을 조작하여 공격자가 원하는 특정주소를 실행시킬 수 있는 데 이때 CPU는 흐름이 바뀐 메모리에서 직접 코드를 읽기에 CPU가 해석할 수 있는 기계어 코드로 이뤄져야한다. 좋은 쉘코드의 조건신뢰성 - 공격자가 원하는 행위를 .. 더보기