32bit 기준 TEB(Thread Environment Block) 현재 실행되고 있는 쓰레드에 대한 정보를 담고 있는 구조체. FS 레지스터에 TEB의 주소(FS[30])가 저장되어 있으며, 프로세스 내부적으로 TEB에 접근하고자 할 때 FS 레지스터를 사용할 수 있다. TEB+0x30 에는 PEB의 주소가 들어있다. PEB(Process Environment Block) 실행 중인 프로세스에 대한 정보를 담아두는 구조체. 프로세스에 로드된 PE Image(EXE, DLL 등)에 대한 정보가 기록되어 있다. PEB+0xC에 존재하는 Ldr이라는 값을 통해 현재 프로세스에서 로드한 모듈들에 대한 정보를 담고 있는 _PEB_LDR_DATA에 접근 할 수 있다. _PEB_LDR_DATA 구조체 안에 포함된..
Image_DOS_Header e_magic 해당 파일이 PE 파일임을 나타내는 첫 두바이트. EX) MZ(5A4D) MZ가 아니면 로더는 해당 파일을 PE로 인식하지 않음. e_Ifanew NT_Header가 시작되는 위치의 오프셋을 나타냄. Image_NT_Headers MACHINE 파일의 실행 대상 플랫폼을 나타냄. EX) I386, R300(MIPS), ARM, IA64(Intel 64) NumberOfSections 파일에 존재하는 섹션의 수를 나타냄. SizeOfOptionalHeader Optional Header의 크기를 알려줌. Characteristics 해당 PE 파일의 특성을 알려줌. EX) DLL(0x2000) or EXE(0x0002), 32bit(0x0100) Image_Op..
지금까지 CTF를 참여하면서 취약점은 보이는데 릭벡터를 찾지 못해서 못 푼 문제들이 많아 실제로 해봤었던 릭벡터들을 정리해보려고한다. printf의 %s 형식 지정자로 null byte까지 출력을 하게 해서 canary라던지, 다른 유용한 주소들을 릭. eip를 printf로 돌린다음 인자로 %x 등을 줘서 포맷스트링 버그로 릭. 배열을 참조해서 값을 출력해주는데, 배열의 인덱스를 입력을 받고 입력에 대한 검증이 없을 경우에 OOB로 릭. heap에서 small bin size의 chunk를 할당할 수 있고, free를 할 때 chunk안의 값을 nullify하지 않고, 이 chunk의 값을 출력할 수 있을 때main_arena+88의 주소를 릭. heap에서 fastbin_duplicate_into_s..
보호되어 있는 글입니다.
보호되어 있는 글입니다.
보호되어 있는 글입니다.
H3X0R CTF pyjail 문제 풀면서 얻은 지식들 끄적이려고한다. 개인적인 생각인데, pyjail은 아는만큼 보이는거 같다. 밴리스트는 대충 del . _ + = ` \ % setattr getattr dir open read exec join vars locals 등이 있었고 공백도 막혀있었다. 문자열 우회는 "A""B" = "AB" 이런 방법으로 했다. 이제 남은 건 모듈을 불러와서 함수를 써야 하는데 공백이 막혀있어서 어떻게 모듈을 불러와야 할지도 몰랐고, 애초에 무슨 모듈을 불러와야 할지도 몰랐다. 나중에 힌트로 inspect모듈의 stack쪽 function을 사용하라고 올라오긴 했지만.. 알고 보니 공백은 탭으로 우회가 가능했고, " from inspect import * " 이런식으로 ..
계속 테스트 해본 결과 main_arena의 위치는 __malloc_hook + 0x10 위치에 존재하고 있었다,, 그럼 그대로 main_arena+88 위치 Leak해서 libc_base 구하면 되겠다,, libc_base = main_arena + 88 - libc.symbols['__malloc_hook'] - 0x10 # 난 이렇게 사용한다. 앞으로 CTF할때는 이렇게 main_arena 위치 찾아야지,, //추가64bit에선 __malloc_hook + 0x10 위치에32bit에선 __malloc_hook + 0x18 위치에 존재하고 있었다!! 실제로 이렇게 CTF문제 풀었다.
1. Introduceheap을 얼마나 이해하고 있는지를 알기위해서 protostar의 heap시리즈의 write-up을 작성해보겠습니다. 제가 이해하기 위해서 쓰는 write-up이어서 설명이 길 수 있습니다. 2. Analysis 1234567891011121314151617181920212223242526272829#include #include #include #include #include void winner(){ printf("that wasn't too bad now, was it? @ %d\n", time(NULL));} int main(int argc, char **argv){ char *a, *b, *c; a = malloc(32); b = malloc(32); c = malloc(3..
1. Introduce heap을 얼마나 이해하고 있는지를 알기위해서 protostar의 heap시리즈의 write-up을 작성해보겠습니다. 2. Analysis 123456789101112131415161718192021222324252627282930313233343536373839404142434445#include #include #include #include #include struct auth { char name[32]; int auth;}; struct auth *auth;char *service; int main(int argc, char **argv){ char line[128]; while(1) { printf("[ auth = %p, service = %p ]\n", auth, s..
- Total
- Today
- Yesterday
- 비교 연산자
- darkknight
- Golem
- Codegate
- lob
- ftz
- 파이썬
- Python
- HarekazeCTF
- angry_doraemon
- C언어
- picoctf
- 포너블
- orge
- 리버싱
- luckyzzang
- zombie_assassin
- babyheap
- 올리디버거
- succubus
- OllyDbg
- TAMUCTF
- Nightmare
- 클래스
- protostar
- bugbear
- Pwnable.kr
- babypwn
- 0ctf
- BaskinRobins31
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |