Wargame/HackCTF
-
[HackCTF : Pwnable] Offset (150p)Wargame/HackCTF 2021. 6. 4. 10:25
[HackCTF : Pwnable] Offset (150p) 보호 기법이 엄청 많이 걸려있다. 일단 쉘 코드는 사용하지 못할 것 같다. 실행해보면 어떤 함수를 실행하고 싶냐고 묻고 입력을 받는다. 바로 gdb로 확인해보자. main 함수를 살펴보면 [ebp-0x27]부터 입력을 받고 그것을 인자로 select_func라는 함수를 호출한다. select_func 함수에서는 받아온 인자를 strncpy함수를 이용해 0x1f만큼 select_func 함수의 [ebp-0x2a]에 복사한다. strncpy(ebp-0x2a, ebp+0x8, 0x1f) 그리고 여기서 [ebp-0xc]를 call 한다. 이 부분을 변조해야 할 것 같은데 쉘 코드를 사용할 수 없기 때문에 함수를 살펴보았다. 누가 봐도 flag를 출력한..
-
[HackCTF : Pwnable] Simple_Overflow_ver_2 (150p)Wargame/HackCTF 2021. 6. 3. 17:23
[HackCTF : Pwnable] Simple_Overflow_ver_2 (150p) NX가 꺼져있어 쉘 코드를 사용할 수 있을 것 같다. 실행해보면 처음에 입력을 받고 입력받은 주소를 출력해주는 것 같다. 그리고 다시 실행할지를 묻는데 y를 누르면 반복되고 n을 누르면 종료한다. 한번 더 실행해보니 주소 값이 바뀌었다. 여기까지의 정보로 생각을 해보면 입력에 쉘 코드를 넣고 ret를 출력되는 주소로 변조시키면 쉘이 실행될 것 같다. 그럼 이제 dgb로 스택의 공간이 얼마나 생겼는지 확인해보자 scanf를 통해 [ebp-0x88]부터 입력을 받는다. shell code + dummy로 0x88 + 4byte(sfp)를 덮고 ret를 출력되는 주소로 덮어보자. payload는 아래와 같다. 1 2 3 4..
-
[HackCTF : Pwnable] x64 Simple_size_BOF (150p)Wargame/HackCTF 2021. 6. 1. 16:14
[HackCTF : Pwnable] x64 Simple_size_BOF (150p) 해당 문제는 NX가 꺼져있어 쉘 코드를 넣어 공격하는 것이 가능하다. 문제를 실행해봅시다. 엌 삐빅- 자살방지 문제입니다. buf: 0x7fff8f4b5570 를 출력하고 입력을 받는데 buf의 위치가 실행할 때마다 달라진다. gdb로 확인해보자. 이 부분에서 buf가 [rbp-0x6d30] 라고 알 수 있다. 이번에도 gets 함수에서 BOF가 발생하는데 [rbp-0x6d30]에서부터 입력을 받기 때문에 쉘 코드를 해당 영역에 넣고 ret까지를 dummy로 채운 뒤 ret를 [rbp-0x6d30]의 주소로 변조하면 된다. 1 2 3 4 5 6 7 8 9 10 11 12 13 from pwn import * p = rem..
-
[HackCTF : Pwnable] x64 Buffer Overflow (150p)Wargame/HackCTF 2021. 6. 1. 15:28
[HackCTF : Pwnable] x64 Buffer Overflow (150p) 파일을 실행해보면 입력을 받고 Hello [입력] 이런 식으로 출력해준다. 바로 gdb로 살펴보자. NX가 걸려있기 때문에 바로 함수들을 살펴보았는데, callMeMaybe라는 수상한 함수가 보였다. 역시 /bin/bash를 실행한다. 이제 main 함수를 살펴보자. scanf로 [rbp-0x110]부터 입력을 받아오는데 문자열 길이 검사를 하지 않아 Buffer Overflow가 일어난다. 0x110 + sfp[8byte] 만큼 dummy로 채우고 ret를 아까 확인한 callMeMaybe의 주소로 변조시키면 쉘이 실행될 것 같다. from pwn import * p=remote("ctf.j0n9hyun.xyz",300..
-
[HackCTF : Pwnable] 내 버퍼가 흘러넘친다!!! (150p)Wargame/HackCTF 2021. 6. 1. 10:28
[HackCTF : Pwnable] 내 버퍼가 흘러넘친다!!! (150p) 우선 문제 파일에 NX bit가 걸려있지 않기 때문에 쉘 코드를 삽입해 실행할 수 있을 것 같다. 파일을 실행해보면 Name : , input : 총 2번의 입력을 받는다. gdb로 살펴보자. read와 gets로 각각 한 번씩 입력을 받는데 gets로 입력 받을때 Buffer Overflow를 일으킬 수 있을 것 같다. 먼저 read 쪽을 살펴보면 name이라는 전역변수에 0x32byte만큼 입력을 받는 것을 알 수 있다. 그리고 gets 로 [ebp-0x14]부터 입력을 받는데 여기서 0x14 + sfp[4] 만큼 dummy로 채우고 ret 부분에 쉘 코드가 들어갈 name 즉 0x804a060로 변조시키면 쉘이 실행될 것 같..
-
[HackCTF : Pwnable] Basic_BOF #2 (100p)Wargame/HackCTF 2021. 5. 31. 17:15
[HackCTF : Pwnable] Basic_BOF #1 (100p) 주어진 문제 파일을 실행해보니 입력을 받은 후 이상한 문자열을 출력한다. gdb를 이용해 분석해보자. eax에 [ebp-0x8c]의 주소를 넣고 eax에 입력을 받는다. 즉 [ebp-0x8c]에 입력을 받는다. eax에 [ebp-0xc]의 주소를 넣고 eax를 call 한다. fget가 [ebp-0x8c]에서부터 입력받고, [ebp-0xc]를 call 하기 때문에 0x80(0x8c-0xc) 만큼 dummy로 채워주고 쉘 코드 주소를 넣어주면 쉘이 실행될 것 같다. 실제로 그러한지 확인해보자. b *main+53 r AAAAAAAA 입력 받은 곳의 주소는 0xffffcf3c이고 [ebp-0xc]는 0xffffcfbc로 0x80만큼의 공..
-
[HackCTF : Pwnable] Basic_BOF #1 (100p)Wargame/HackCTF 2021. 5. 28. 14:43
[HackCTF : Pwnable] Basic_BOF #1 (100p) 먼저 주어진 파일을 실행해보자 입력 값을 [buf]에 출력해주고 [check]에는 0x4030201이 출력된다. 여러 번 실행해봐도 [check]는 동일하다. gdb-peda$ pd main Dump of assembler code for function main: 0x080484cb :lea ecx,[esp+0x4] 0x080484cf :and esp,0xfffffff0 0x080484d2 :push DWORD PTR [ecx-0x4] 0x080484d5 :push ebp 0x080484d6 :mov ebp,esp 0x080484d8 :push ecx 0x080484d9 :sub esp,0x34 0x080484dc :mov DWOR..