SYSTEM HACKING

    [ROP 문제]ropasaurusrex

    [ROP 문제]ropasaurusrex

    오늘은 rop문제인 ropasaurusrex를 풀어보겠다.2013년도 pCTF의 문제중 하나이다. ropasaurusrex를 가상머신에 다운받고 풀어보자 $ ./ropasaurusrexaaaaaaaaaaaaaaaaaaaWIN 값을 입력하면 WIN이라는 문자열을 출력하는 것을 볼 수 있다.이 외에는 다른 동작을 하지 않는다. 이번에는 a를 더 많이 넣어서 버퍼오버플로우가 되는지 보겠다. $ ./ropasaurusrexaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa..

    DAY-7 ROP(Return Oriented Programming)

    DAY-7 ROP(Return Oriented Programming)

    이번에는 ROP에 대해서 알아보려고 한다. ROP란 운영체제의 여러가지 보호기법을 우회하여 해커가 원하는 명령어를 가지고 실행 할 수 있도록 조합하여 권한 상승을 하는 기법이다.쉽게말하면 여러가지 제약이 걸린상태에서 BOF,RTL과 같은 기법을 수행하지 못하는 경우 함수를 실행하기 위해여러가지를 조합하여 실행시키는 것을 ROP라 한다. ROP를 하기 위해서는 RTL,RTL Chaining,GOT overwrite를 알아야 한다.RTL과 RTL Chaining은 2017/11/11 - [SYSTEM HACKING/정리자료] - DAY-6 Return To Library2017/11/11 - [SYSTEM HACKING/정리자료] - Special Chapter-RTL Chaining를 보면 도움이 될 것이..

    Special Chapter-RTL Chaining

    Special Chapter-RTL Chaining

    RTL을 DAY-6에서 봤다.이번에는 RTL Chaining기술에 대해서 알아 볼 것이다.RTL Chaining은말 그대로 RTL을 연속적으로 사용해서 공격하는 것 이다 그럼 알아보도록하자.소스코드는 #include #include void call_system(char *arg){ system(arg);} void get_message(char msg[]){ char admin[128]; read(0,msg,512); memcpy(admin,msg,512);} int main(void){ char id[20]; char pw[256]; char message[512]; setvbuf(stdout, 0, _IONBF, 0); write(1,"ID:",3); read(0,id,20); write(1,"PW..

    DAY-6 Return To Library

    DAY-6 Return To Library

    오늘은 Return To Library(RTL)에 대해서 알아 볼 것이다.문제는 해커스쿨의 FTZ를 이용하겠다. 리턴 값을 라이브러리가 있는 곳으로 바꿔버린다는 뜻이다.즉 우리가 실행시키고 싶은 라이브러리 주소를 리턴값으로 넘기는 것이다.DAY-5에서는 쉘코드를 이용해서 흐름을 바꿧는데 뭐하러 쉘코드를 사용하지 않는지 의문이 들 것 이다.이런 방법은 옛날 부터 막혀있다.스택이 일정치 않아서 찾기도 힘들뿐만 아니라 스택에서도 코드실행을 막는다고 한다.그래서 RTL을 이용해서 쉘을 실행시켜 보겠다. 일단 RTL을 해보기 전 이론먼저 훑어 보겠다.{[낮은 주소값 = 높은주소] ` [높은 주소값 = 낮은주소]AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA BBBB syst..

    DAY-5 쉘코드 작성

    DAY-5 쉘코드 작성

    오늘은 쉘코드에 대해서 작성해보겠다. 쉘코드란 해커가 원하는 작업을 실행시켜주는 코드라고 보면된다.어셈블리로 작성을하고 아키텍쳐에따라서 코드를 작성해줘야한다. 어셈블리를 알아야한다는 전제하에 진행이 된다.2017/10/17 - [SYSTEM HACKING/정리자료] - DAY-2 GDB로 어셈블리 해석윗글을 보고오면 간단한 어셈블리는 해석이 될 것 이다. #include #include char WRITE_ME[256] = "WRITE ME!!!!"; char shellcode[256] = ""; int main(void){ read(0,shellcode,256); (*(void(*)()) shellcode)(); return 0;} 우리가 이코드로 할 것은 WRITE_ME의 문자열을 쉘코드를 이용해서 ..

    DAY-4 프로세스 디버깅

    DAY-4 프로세스 디버깅

    오늘은 프로세스를 디버깅 하는 방법에 대해서 알아 볼 것이다. 일단은 소켓과로컬을 연결을 한 후에 GDB,strace,ltrace를 통해서 디버깅을 해볼 것 이다. 소켓과 로컬을 연결하기 위한 xinetd 라는 소켓-로컬 연결 대몬을 설치한다. 그후simplebof라는 파일을 서비스로 등록을 한 후에 그 서비스 프로세스를 디버깅해보겠다. #include void call_system(){ system("/bin/sh");} void get_message(char msg[]){ char admin[128]; read(0,msg,512); strcpy(admin,msg); //strcpy는 오른쪽의 인자의 값을 왼쪽의 인자에 복사해준다.//admin의 저장공간은128 하지만 msg의 공간에는 512를 저장 ..

    DAY-3 버퍼오버플로우를 풀어보자

    DAY-3 버퍼오버플로우를 풀어보자

    오늘은 두개의 문제를 풀어볼것이다. 그중하나는 pwnable.kr의 bof문제이다. 간략한 소스코드의 흐름을 보자면func라는 함수에 인자값 0xdeadbeef를 넘겨서 int key로 저장을 시킨후 overflowme라는 변수에 gets로 값을 받은후 key값이 0xcafebabe와 같은지 비교한다. 만약 같다면 /bin/sh을 실행시켜 쉘을 딸수 있다.같지 않다면 오류 메세지가 뜨는 것을 알 수 있다. 이소스코드에는 gets함수에 있는 취약점을 이용해서 버퍼오버플로우라는 것을 할 수 있다.gets함수는 문자열을 입력을 받지만 문자열을 담을 공간의 길이와 입력받은 문자열의 길이를 확인하지 않아서 버퍼오버플로우에 취약하다.gets함수외에도 여러가지 취약한 함수가있다.알아보면 좋을 것 같다. 여기서 버퍼오..

    DAY-2 GDB로 어셈블리 해석

    DAY-2 GDB로 어셈블리 해석

    오늘은 소스코드를 어셈블리어로 보고 이해를 할수 있게 정리자료를 적어보고자 한다. 일단 레지스터를 알아보기전에 메모리의 구조가 어떻게 이루어지는지 보겠다. 0x00000000 0xffffffff Code 영역은 말그대로 코드 자체를 구성하는 메모리 영역이다. Data 영역은 전역변수,정적변수,배열,구조체 등이 저장된다고한다.추가로 초기화 된 데이터는 Data 영역에 저장되고 초기화 되지 않은 데이터는 BSS(Block Stated Symbol)영역에 저장된다고한다. Heap 영역은 필요로 의해서 메모리를 할당 하고자 할떄 위치하는 메모리영역이다.예를 들어 C의 malloc()함수를 사용하면 이 영역에 데이터를 저장 할 수 있다고한다. Stack 영역은 매개변수,지역변수,리턴 값 및 연산 시 일어나는 값들..

    DAY-1 Command Injection

    DAY-1 Command Injection

    오늘은 Command Injection에 대해서 강의 받은 내용을 정리를 하고자 글을 쓴다. 예제1 cgi1.c 이 코드는 char형 변수 buf에 read함수로 입력을 받아 system함수를 통해서 입력받은 값을 실행시키는 코드였다. read함수는 read (int fd, void *buf, size_t nbytes);라는 형식에 맞추어 사용이되고int fd는 파일디스크립터로 0은 표준입력 1는 표준출력 2는 표준에러를 나타낸다.여기서는 0임으로 입력을받는다 그리고 void *buf는 입력한 값을 저장할 공간을 나타내고size_t nbytes는 입력받을 바이트를 표시한다. 여기의 코드에서 문제가 되는 점은 입력받은 값으로 system함수를 실행을 시켜준다는것이다.-system함수는 /bin/sh -c ..