Reference/Pwnable_Study

    Code Auditing

    Code Auditing 번역하면 소프트웨어 코드 감사로써 버그, 보안 위반, 프로그래밍 규칙위반을 발견하기 위한 프로그래밍 프로젝트의 소스코드에 대한 포괄적인 분석을 말합니다. 이는 스포트웨어 출시전 오류를 줄이기 위해 필수적인 부분으로 C, C++,Python 같은 고급 언어의 잠재적 취약기능을 감사하기 위해 사용하고 있습니다. 뿐만 아니라 이러한 감사는 코드에서 취약점을 미리 찾아 공격을 예방하는데 도움이 되며 감사는 팀 단위로 하기에 팀 구성원 간의 프로그래밍 기술을 공유하고 표준과 디자인 및 구현등의 향상으로 이어지기에 필수적인 부분이라고 볼 수 있습니다. 감사시 확인해야 할 순서는 먼저 위험도순으로 높은 취약점부터 낮은 취약점을 찾는 것이 좋으며 가장 일반적인 취약점 몇가지를 보자면 입력 유효..

    환경변수(environ)

    본 글은 CVE-2014-6271 쉘쇼크에 대해 배우기 전 기반지식 중 환경변수에 대하여 정리하기 위한 글입니다. 환경변수 (environment Variable) 환경변수는 프로세스가 컴퓨터에서 동작하는 방식에 영향을 미치는 동적인 값들의 모임, 좀 더 풀이하면 매번 변할 수 있는 동적인 값들의 모임, 시스템의 정보를 가지고 있는 변수입니다. 이는 사용자가 추가, 수정, 삭제등이 가능한 값이라고 말 할 수 있습니다. 포너블을 공부하면서 가장많이 사용하는게 리눅스인데 리눅스의 명령어인 ls, id, cat등이 /bin, /usr/bin 디렉터리에 위치해 있습니다. 하지만 리눅스 명령어를 사용하면서 디렉터리 경로를 명시하고 명령어를 사용한 적은 단 한번도 없습니다. 이는 환경 변수로 명시되어 있기 때문이며..

    NOP Sled(NOP Slide)

    NOP Sled 기법에 대해 정리를 하고자 본 글을 작성합니다. 이전까지 BOF FSB공격등을 할때에는 보통 공격에 쓰일 시스템호출 함수가 코드 내부에 존재하는 문제를 해결해 왔다. 하지만 이러한 문제들은 이제 Level 1정도를 해결하는 정도일뿐 점점 깊게 나아갈수록 이러한 공격에 쓰일 함수들은 코드 내부에 존재하지 않고 공격자가 직접 작성하는 셸코드 방식을 사용하고 있다. 여기서 공격자가 RET부분에 셸 코드의 address를 넣어야만 원하는 실행이 되는데 정확한 주소를 찾기 어려울 경우 주소를 추측하기 위해 사용하는 기법이 NOP Sled 기법이다. NOP Sled( NOP Slide) NOP : no operation의 약자이며, 아무런 실행을 하지 않는다.(혹은 instruction을 구분) 사..

    Mprotect - ROP

    Mprotect - ROPMprotect 라이브러리 함수를 활용한 기법에 대해 정리를 하고자 본 글을 작성합니다. 기본적으로 ROP는  plt와 got를 활용하는 기법으로 이전에 드림핵해서 해결했던아래 write-up 처럼 시스템호출하는 함수가 없는 경우 쉘코드를 작성해 해결하는 기법이다.https://skysquirrel.tistory.com/95 (DreamHack) Return Address Overwrite — Squirrel Hack skysquirrel.tistory.com 그러나 위 문제처럼 보호기법중 NX가 없는 경우와 권한이 있는 경우에만 가능하다고 한다.즉 쓰기권한과 실행권한이 부여되어 있는 경우에만 가능하다는 것이다. 그럼 권한이 없거나 NX보호기법으로 실행권한이 제거된 경우는 어떻게..

    FSB(포맷 스트링 버그) fsb2예제

    보호되어 있는 글입니다.

    32bit와 64bit의 함수 인자전달 방식(FSB)

    32bit와 64bit의 함수 인자전달 방식을 이해하고자 작성하는 글이다. 함수 호출 규약함수 인자전달을 이해하려면 32bit 와 64bit의 호출 규약부터 먼저 개념을 집고 넘어가야한다.함수 호출 규약은 함수를 호출하는 방식에 대한 약속이다. 32bit의 경우● 호출 규약은 cdecl, stdcall, fastcall 이 존재한다.● cdecl은 스택을 이용, add함수 이후 main함수 스택을 esp값 증가로 스택정리를 한다.● stdcall은 호출된 함수에서 정리하는 방식으로 main함수에서 정리할 필요가 없어 코드길이가 주는 장점● fastcall은 stdcall과 비슷하지만 레지스터를 사용해 전달하기에 빠른 호출이 가능하다.● 8개의 범용 레지스터 사용(EAX, ESP, EBP등등) 64bit의..

    BOF2 연습문제

    포너블 스터디에서 과제로 제시된 bof2 문제입니다. 위 소스코드를 분석하고 BOF를 발생시키는 exploit 코드를 작성하여 win함수를 실행시키는 문제 입니다.먼저 코드를 함수별로 나눠 분석하겠습니다. 1. 소스코드 분석함수>main 함수는 vuln( )함수를 실행하고 리턴 0로 종료되는 구문으로 이루어져 있습니다.그럼 실행 구문이 적힌 vuln( ) 함수 소스를 보겠습니다.  함수>vuln 함수는 문자 타입인 char 타입 buf[0x20] 으로 16진수로 20 만큼의 버퍼를 만들고input[0x100] 16진수로 100만큼의 버퍼를 선언합니다.이후 read( ) 함수를 사용해 0부터 0x90를 입력을 받고strcpy(buf, input) 함수를 통해input으로 받은 문자를 buf에 복사를 수행합..

    bof1 exploit 코드 분석

    BOF exploit 공격 코드 분석하기 파일을 확인하면 취약점을 공격하는 exploit 공격 코드 인것을 알 수 있습니다 코드를 한줄씩 해석해 보자면 from pwn import * pwntools를 import 시키는 명령어로 이후에 pwntools에 속해있는 기능을 사용할 수 있는 코드가 먼저 작성됩니다. #context.log_level='debug' exploit에 문제를 해결할 때 설정하는 pwntools 기능으로 사용하는 코드입니다. p = process('./bof1') process( )는 대상 바이너리의 이름을 지정하는 것으로 프로세스와 통신하게 하는데 ‘p =’로 개체를 생성하여 p개체가 bof1프로세스를 실행하게 코드로 볼 수 있습니다. payload = b'A' * 120 payl..