ctf
-
[HackCTF : Pwnable] RTL_World (200p)Wargame/HackCTF 2021. 6. 8. 00:23
[HackCTF : Pwnable] RTL_World (200p) NX bit가 걸려있는데 문제 이름처럼 RTL기법을 이용해 우회하면 될 것 같다. 바로 실행해보면 이렇게 여러 개의 선택지가 있는데 2번에서 돈을 벌고 3,4에서 system 주소와 shell 주소를 구하여 5번에서 rtl을 이용하여 공격하면 된다. 해당 문제를 gdb로 보기에는 너무 길기 때문에 ida를 이용했다. 여기서 v6에 system, s1에 /bin/sh의 주소가 들어가는 것을 알 수 있다. 그리고 3번과 4번에서 각각 v6, s1을 출력해준다. 여기서 gold가 1999, 2999씩 있어야 하는데 2번에서 돈을 벌어야 한다. 그래서 Get_Money 함수를 보니 4번을 눌렀을 때 Hidden number를 찾았다고 출력하고 v..
-
[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..