일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 나뭇잎 책
- heap
- _IO_FILE Arbitrary Address Read
- GOT overwrite
- seccomp
- HackCTF
- Lazenca
- Dynamic Analysis
- heap exploit
- srop
- shellcode
- master canary
- malware
- H4CKING GAME
- BOF
- _IO_FILE Arbitrary Address Write
- vtable
- __environ
- DFB
- ROP
- Android
- heap feng shui
- UAF
- RTL
- Reversing
- DFC 2022
- K-shield Junior
- DreamHack
- _IO_FILE
- tcache
- Today
- Total
목록Wargame/HackCTF (28)
Studying Security

Mitigation Vulnerability Analysis IDA disassembler를 이용해 main함수부터 살펴보자 menu 0. add_location 1. delete_location 2. display_location 3. update_desc 크게 4개의 함수가 보이고 해당함수에 대한 기능을 살펴봐야겠다. 0. add_location s(description)라는 변수에 해당함수로 들어오기 전에 입력한 크기(a1)만큼 메모리를 할당 v2에 128byte의 메모리를 할당 (4byte는 s(description)의 주소값 + 124byte는 Name 입력) 이 후 update_desc함수 실행(description을 재입력(length와 text) 받음 메모리를 재할당받는게 아님) 이를 그림..

Mitigation Vulnerability Analysis IDA disassembler로 해당 파일을 살펴보면 menu를 주고 해당 번호에 맞는 함수를 실행시키는 구조이다. 1번 add_note함수부터 살펴보면 notelist[i]에 8byte의 메모리를 할당하고 4byte크기에 print_note_content함수를 나머지 4byte크기에는 이어서 할당한 메모리 영역의 주소를 넣는데 이 곳에 data를 입력한다. 이를 그림으로 보면 아래 그림과 같이 생성됨을 알 수 있다. gdb로 확인해보자! ex) 할당한 size는 16바이트 data는 "aaaa\n"으로 생성해보자 위에서 예상한데로 생성되는 것을 확인할 수 있다. 2번 del_note함수를 살펴보면 할당했던 notelist[index]의 메모리..

Mitigation Vulnerability Analysis IDA disassembler를 가지고 main함수를 살펴보자 fgets함수가 존재하고 이를 이용해 BOF 공격이 가능하다. Unexploitable_2 문제와는 다르게 gift 함수에도 fwrite를 제공하고 있음 이를 가지고 fwrite를 이용해 libc leak를 수행 → library base address를 구하고 offset을 가지고 system과 "/bin/sh"주소를 획득하면 될 것 같았다. 필요한 ROPgadget을 모아보자 fwrite의 경우 인자가 4개이기 때문에 RDI, RSI, RDX, RCX 레지스터에 값을 전달할 수 있어야한다. pop rdi와 pop rsi는 존재하는데 나머지 gadget이 없기 때문에 return ..

Mitigation Vulnerability Analysis IDA disassembler를 가지고 main함수를 살펴보자 src([rbp-0x80])에 입력을 받고 src[0x31]까지는 0x1c와 xor를 수행 strncpy( &dest, src, 0x39) 1~3과정을 한번 더 수행할 것인지 아닌지 Yes/No 입력을 통해 결정 Exploit 과정 Canary Leak Libc Leak Exploit 1. Canary Leak canary가 존재하기 때문에 해당 canary 값을 변조하지 않고 BOF를 수행해야 한다. stack을 대충 그려보면 위와 같은데 canary 값의 첫 1byte는 \x00이므로 만약 dest의 부분을 0x39 size만큼 출력 가능한 값으로 채워진다면 printf("Enc..

Mitigation Vulnerability Analysis file 명령어로 바이너리 파일 보면 stripped가 되어있는 것을 확인할 수 있는데 이는 실행에 필요한 부분을 제외한 부분을 제거함으로써 실행파일의 크기를 줄이는 것이라고 한다. 그래서 debugging을 하기위해 gdb로 열어 보았을 때 main함수의 symbol이 존재하지 않아 해당 주소를 찾아봄 read 함수를 가지고 BOF가 가능하도록 되어 있다. 하지만 쓰기함수를 통해 leak가 불가능하다. syscall instruction을 이용해 exploit해보자 gadget을 살펴보면 pop rax; pop rdx; pop rdi; pop rsi; ret gadget으로 pop rax --> system call pop rdx; pop r..

Mitigation Vulnerability Analysis fgets를 이용해 BOF를 발생시킬 수 있다. 단 0x40 size의 입력을 받기 때문에 payload 작성시 size를 염두에 둬야 한다. Unexploitable_2 바이너리 파일에선 gift함수를 통해 system함수를 제공하고 있다. 1. system 함수 이용 system 함수의 인자로 명령을 전달할 때 잘못된 명령을 전달하면 해당 명령어를 출력해준다. 이를 이용해 어떤 함수의 got를 전달하면 해당함수의 주소를 출력하게 된다. 이 방식으로 system함수의 인자로 system_got를 전달하면 system함수 주소를 leak할 수 있다. 하위 12bit가 390임을 이용하여 서버가 어떤 libc파일을 사용하는지 libc_databa..

Mitigation Vulnerability Analysis IDA disassembler로 main함수를 살펴보자 time(NULL)을 seed를 주고 random한 값을 생성하고 있다. Input Key를 입력하고 이 값이 생성한 random 값과 일치하면 flag를 보여주는 그런 파일인데 random한 값을 어떻게 맞출 수 있을까...? 로컬과 해당 서버가 같은 seed 값을 가지고 random한 값을 생성한다면 같은 random 값을 얻을 수 있을 것이다. 이를 해결하기 위해 ";"라는 다중 명령어를 사용하면 된다 난수 생성 프로그램 ; nc ctf.j0n9hyun.xyz 3014 난수 생성프로그램과 서버 접속을 동시에 하도록해서 생성된 random 값을 적어주면 원하는 flag를 얻을 수 있을 ..

Mitigation Vulnerability Analysis gdb로 main함수를 보면 "Hey, ROP! What's Up?"을 출력하고 read함수가 실행된다 [rbp-0x40]에 0x200 size를 받을 수 있기 때문에 BOF 공격이 가능하다는 사실을 알 수 있다. RTC 문제이니 만큼 Return to csu 기법을 통해 exploit해보도록 하자 __libc_csu_init의 일부 코드를 gadget으로 사용하는 기법으로 64bit의 경우 rdi, rsi, rdx ...의 순으로 인자를 전달하는데 이때 해당 gadget이 존재하지 않을 경우 이를 이용한다. RTC payload write(1, write_got, 8) → write_address 획득 library_base_address =..