'공부'에 해당되는 글 40건

[pwnable.kr] 주저리

공부 2016. 2. 25. 23:59
반응형

md5_calculator 에서 관건인게

base64 encoded string 을 받아서 decode하고 md5를 하게 되는데..

decode해서 받는 배열의 크기가 512byte 밖에 안되고, base64_encodestring같은 경우에는 최대 1024byte를 받는데

이걸 decode했을 때 길이가 512byte보다는 길기때문에 overflow가 발생함.


또 분석해보면

my_hash를 통해서 srand(time())과 rand()로 더하기 빼기를 하면서 계산을 하는데, canary도 같이 넣어서 계산하게 된다.

이거 역분석 하면 canary 우회 가능함 <-- 여기부터 집가서 해야지

'공부' 카테고리의 다른 글

gs 베이스 주소 구하기  (0) 2016.05.09
[Codegate] 주저리  (0) 2016.05.06
Kernel Exploit  (0) 2016.02.22
Template 공부  (0) 2016.02.09
[MSDN] Allocator  (0) 2016.02.02
블로그 이미지

KuroNeko_

KuroNeko

,

Kernel Exploit

공부 2016. 2. 22. 22:00
반응형
일단 공부시작하자
commit_creds(prepare_kernel_cred(0));  


'공부' 카테고리의 다른 글

[Codegate] 주저리  (0) 2016.05.06
[pwnable.kr] 주저리  (0) 2016.02.25
Template 공부  (0) 2016.02.09
[MSDN] Allocator  (0) 2016.02.02
GOT 입력 ( _dl_runtime_reslove )  (0) 2015.12.29
블로그 이미지

KuroNeko_

KuroNeko

,

Template 공부

공부 2016. 2. 9. 12:58
반응형

https://wikidocs.net/418

'공부' 카테고리의 다른 글

[pwnable.kr] 주저리  (0) 2016.02.25
Kernel Exploit  (0) 2016.02.22
[MSDN] Allocator  (0) 2016.02.02
GOT 입력 ( _dl_runtime_reslove )  (0) 2015.12.29
MISC_Nyan [MISC]  (0) 2015.08.12
블로그 이미지

KuroNeko_

KuroNeko

,

[MSDN] Allocator

공부 2016. 2. 2. 18:18
반응형

allocator 클래스

Visual Studio 2015

템플릿 클래스는 저장소 할당 및 형식 형식의 개체에 대한 배열 해제를 관리하는 개체를 설명합니다. 클래스 allocator의 개체는 표준 C++ 라이브러리의 여러 컨테이너 템플릿 클래스에 대한 생성자에 지정된 기본 할당자 개체입니다.

template <class Type> class allocator

형식

저장소를 할당하거나 할당 취소할 개체의 형식입니다.

모든 표준 템플릿 라이브러리 컨테이너에는 allocator로 기본 설정되는 템플릿 매개 변수가 있습니다. 사용자 지정 할당자로 컨테이너를 생성하면 해당 컨테이너 요소의 할당 및 해제를 제어할 수 있습니다.

예를 들어 할당자 개체에서 전용 힙 또는 공유 메모리에 저장소를 할당하거나, 작거나 큰 개체 크기에 맞게 최적화할 수 있습니다. 또한 제공된 형식 정의를 사용하여 공유 메모리를 관리하는 특수 접근자 개체를 통해 요소에 액세스하거나 자동 가비지 컬렉션을 수행하도록 지정할 수 있습니다. 따라서 할당자 개체를 사용하여 저장소를 할당하는 클래스는 표준 C++ 라이브러리의 컨테이너처럼 이러한 형식을 사용하여 포인터 및 참조 개체를 선언해야 합니다.

(C_++98/03만 해당)할당자 클래스에서 파생시키는 경우 _Other typedef에서 새로 파생 클래스를 참조하는 rebind 구조체를 제공해야 합니다.

따라서 할당자는 다음과 같은 형식을 정의합니다.

  • pointer는 형식에 대한 포인터처럼 동작합니다.

  • const_pointer는 형식에 대한 const 포인터처럼 동작합니다.

  • reference는 형식에 대한 참조처럼 동작합니다.

  • const_reference는 형식에 대한 const 참조처럼 동작합니다.

이러한 형식은 할당된 요소에 대해 포인터 및 참조를 사용해야 하는 폼을 지정합니다. (allocator::pointer는 클래스 allocator에 대한 명확한 정의가 있는 경우에도 모든 할당자 개체에 대한 형식*과 동일할 필요가 없습니다.)

C++11 이상: 할당자에서 이동 작업을 사용하려면 최소 할당자 인터페이스를 사용하고 복사 생성자, == 및 != 연산자, 할당 및 할당 취소를 구현하세요. 자세한 내용 및 예제는 할당자를 참조하세요.

h8z741y5.collapse_all(ko-kr,VS.140).gif생성자

allocator

allocator 개체를 만드는 데 사용되는 생성자입니다.

h8z741y5.collapse_all(ko-kr,VS.140).gifTypedefs

const_pointer

할당자에 의해 관리되는 개체 형식에 대한 상수 포인터를 제공하는 형식입니다.

const_reference

할당자에 의해 관리되는 개체 형식에 대한 상수 참조를 제공하는 형식입니다.

difference_type

할당자에 의해 관리되는 개체 형식에 대한 포인터 값의 차이를 나타낼 수 있는 부호 있는 정수 형식입니다.

pointer

할당자에 의해 관리되는 개체 형식에 대한 포인터를 제공하는 형식입니다.

reference

할당자에 의해 관리되는 개체 형식에 대한 참조를 제공하는 형식입니다.

size_type

템플릿 클래스 allocator의 개체가 할당할 수 있는 시퀀스의 길이를 나타내는 부호 없는 정수 형식입니다.

value_type

할당자에 의해 관리되는 형식입니다.

h8z741y5.collapse_all(ko-kr,VS.140).gif멤버 함수

address

값이 지정된 개체의 주소를 찾습니다.

할당

적어도 지정된 개수의 요소를 저장할 수 있을 만큼 큰 메모리 블록을 할당합니다.

construct

지정된 값으로 초기화된 특정 형식의 개체를 지정된 주소에 생성합니다.

deallocate

지정된 위치부터 시작하여 저장소에서 지정된 개수의 개체를 해제합니다.

destroy

개체가 저장된 메모리 할당을 취소하지 않고 개체 소멸자를 호출합니다.

max_size

사용 가능한 메모리를 사용하기 전에 클래스 allocator의 개체에서 할당할 수 있는 Type 형식의 요소 수를 반환합니다.

rebind

한 형식의 개체에 할당자를 사용하여 다른 형식의 개체에 저장소를 할당할 수 있는 구조체입니다.

h8z741y5.collapse_all(ko-kr,VS.140).gif연산자

연산자 =

allocator 개체를 다른 allocator 개체에 할당합니다.


'공부' 카테고리의 다른 글

Kernel Exploit  (0) 2016.02.22
Template 공부  (0) 2016.02.09
GOT 입력 ( _dl_runtime_reslove )  (0) 2015.12.29
MISC_Nyan [MISC]  (0) 2015.08.12
Easy Crack Me[Would you Crack Me?]  (0) 2015.05.30
블로그 이미지

KuroNeko_

KuroNeko

,
반응형

라이브러리 함수를 실행하게되면 PLT영역에서 GOT로 점프하고 함수를 실행하게 되는데,

GOT는 어떻게 값을 넣어주는지 알아보자. ( 함수가 처음 실행 됐을 때 실행됌, 두 번째 실행부터 바로 GOT주소로 JMP함 )


먼저 알아둘게 있다.

FUNC::PLT + 0 은 jmp FUNC::GOT 로 점프,

FUNC::PLT + 6 은 push DATA,

FUNC::PLT + 11 에서 jmp를 하게되면 거기서 pushl, jmp가 있는 PLT시작부분으로 분기하게된다.


PLT시작부분에서 pushl로 GOT+4 주소를 스택에 넣고, jmp되는 부분에 GOT+8 주소를 넣게되는데,

GOT + 8 이 _dl_runtime_resolve 의 주소가 된다.


_dl_runtime_resolve를 분석해보면

_dl_fixup 이란 함수를 실행 edi, esi에 각각 함수의 offset값과 .strtab의 주소값이 들어간다.

예를 들어 puts함수를 실행하려면 먼저 puts함수의 puts 문자열을 얻어야한다. ( windows 에서 GetProcAddress와 같은 방식임 )

문자열을 얻기위해서는 _dl_finxup 실행 후 edi에 puts의 offset값, esi에 .strtab의 주소값이 들어가고, .strtab 주소 + puts::offset을 더해주면 된다.

그리고 eax에는 문자열 주소를 넣어주고, _dl_lookup_symbol_x라는 함수를 실행하게 된다.

_dl_lookup_symbol_x함수에서는 .syntab과 lib의 주소를 얻고 _dl_fixup함수에서 얻은 puts의 offset, .strtab주소를 이용해서

정확한 함수주소를 얻고 GOT에 쓴 뒤에 puts함수를 실행하게 된다.


호출 순서

_dl_runtime_resolve -> _dl_fixupup -> _dl_lookup_symbol_x -> Function

'공부' 카테고리의 다른 글

Template 공부  (0) 2016.02.09
[MSDN] Allocator  (0) 2016.02.02
MISC_Nyan [MISC]  (0) 2015.08.12
Easy Crack Me[Would you Crack Me?]  (0) 2015.05.30
[C++] Template  (0) 2015.01.02
블로그 이미지

KuroNeko_

KuroNeko

,

MISC_Nyan [MISC]

공부 2015. 8. 12. 00:28
반응형

이번에도 아주 쉽게 MISC문제 하나를 들고 왔습니다!


HINT를 드리자면 이중압축이라는 점.


만약 키값을 얻으셨다면 


nekoplus.iptime.org에 가입하셔서 한번 인증해보세요ㅋㅋ



Nyan!.zip


'공부' 카테고리의 다른 글

[MSDN] Allocator  (0) 2016.02.02
GOT 입력 ( _dl_runtime_reslove )  (0) 2015.12.29
Easy Crack Me[Would you Crack Me?]  (0) 2015.05.30
[C++] Template  (0) 2015.01.02
VA & RVA (절대주소, 상대주소)  (0) 2015.01.02
블로그 이미지

KuroNeko_

KuroNeko

,
반응형

이번에 심심해서 만들어 본건데..

처음에는 인라인 어셈으로 짜볼까 했지만

휴가 때 너무 머리쓰는건 아니라 생각해서 쉽게쉽게 만들어 봤습니다~



Crack Me_.zip


키값을 얻으셨다면 nekoplus.iptime.org에 가입하셔서 한번쯤 인증해보는 것도.. 나쁘진 않은 것 같네요.

문제 이름은 Would you Crack Me? 입니다.

'공부' 카테고리의 다른 글

GOT 입력 ( _dl_runtime_reslove )  (0) 2015.12.29
MISC_Nyan [MISC]  (0) 2015.08.12
[C++] Template  (0) 2015.01.02
VA & RVA (절대주소, 상대주소)  (0) 2015.01.02
[리버싱 핵심원리]PE File Format #1 -- 미완성  (0) 2014.12.24
블로그 이미지

KuroNeko_

KuroNeko

,

[C++] Template

공부 2015. 1. 2. 15:33
반응형

Template : 형판, 견본

라는 뜻을 가졌는데, C++에서 Template의 의미는 견본이라고 하는게 맞는 것같다.

템플릿 이게


template<typename T>

class neko{

private:

T num;

public:

void Setnum(T n)

{

num = n;

}

T print()

{

return num;

}

}


이런식으로 임시변수를 만든다고도 할 수 있는데, 사용할 때는

neko<int>::num = 12;

이렇게 사용해야한다. 많이 유용할듯

'공부' 카테고리의 다른 글

MISC_Nyan [MISC]  (0) 2015.08.12
Easy Crack Me[Would you Crack Me?]  (0) 2015.05.30
VA & RVA (절대주소, 상대주소)  (0) 2015.01.02
[리버싱 핵심원리]PE File Format #1 -- 미완성  (0) 2014.12.24
MIPS 명령어  (0) 2014.11.21
블로그 이미지

KuroNeko_

KuroNeko

,