System&Write up/CTF 26

[LeagueOfGuardians 2] register_you

[LeagueOfGuardians 2] register_you 바이너리는 64bit고 NX가 걸려있습니다. v6에 malloc으로 동적 할당을 하고 v6 + 3 (v6은 *형이고 64bit이기 때문에 +3은 +24임)에 hello 함수를 넣습니다. 즉, v6 + 3은 함수 포인터입니다. 그리고 이 함수를 1번 메뉴 register에서 호출하게 됩니다. 마침 바이너리에서 bonus 함수를 제공합니다. 저 함수 포인터를 bonus 함수의 주소로 바꿔주면 됩니다. bonus 함수의 주소 : 0x400806 자, 다시 main의 3번 메뉴를 보면 v6에 %s로 입력 검증 없이 받고 있습니다. dummy 값 24byte와 보너스 함수의 주소를 넘겨주면 될 것 같네요.

System&Write up/CTF 2018.07.24

[LeagueOfGuardians 2] FOR

[LeagueOfGuardians 2] FOR 바이너리는 32bit이고 NX가 걸려있습니다. main은 간단합니다. WriteReview 함수에 취약점이 있을 것 같네요. BOF 취약점이 발생합니다. s에 0x6C(108) + 4(SFP)만큼 dummy를 넣어주면 return address를 변조할 수 있습니다. puts_plt로 puts_got를 Leak하고, 제공된 libc를 통해서 puts의 offset을 구해서 빼주면 libc_base를 알아낼 수 있습니다. 그리고 puts 함수는 인자가 1개이기 때문에 pr(pop ; ret)을 구해야 합니다. pr : 0x08048379 puts_offset : 0x5f140 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19..

System&Write up/CTF 2018.07.24

[Codegate 2016] watermelon

[Codegate 2016] watermelon 32bit 바이너리이고, Canary와 NX가 걸려있습니다. 바이너리를 실행하면 우선 이름을 입력 받습니다. 그 후 옵션을 입력 받네요. 이름을 scanf %s 입력 제한 없이 bss 영역에 받고 있네요. 원할 때 가져올 수 있는 부분이니 생각해 둡시다. 그 뒤로는 4294967295 -> -1이 있고, 순서대로 1일 때 Add, 2일 때 View, 3일 때 Modify입니다. -1일 때는 어떤 역할을 할까요? 암호화를 해줍니다… 이름을 변경해주고 Add부터 봅시다. music과 artist를 추가할 수 있습니다. main에서 봤던 저 친구가 playlist에 몇 개의 음악이 있는지 나타내는 count이고, v1이 playlist를 저장하는 공간이었네요! ..

System&Write up/CTF 2018.06.03

[Codegate 2018] catshop

[Codegate 2018] catshop 32bit 바이너리이고, Canary와 NX가 걸려있습니다. main 함수의 코드는 이렇습니다. 숫자를 입력 받을 때, scanf %d, 혹은 read로 입력 받은 후 atoi로 변환하는 것이 아니라, 그냥 read로만 읽기 때문에 python을 이용해서 입력을 줘야합니다. 처음에 1과 2 메뉴로 8byte fastbin을 할당하고 해제할 수 있습니다. 1번 메뉴에서 할당한 주소에 mew~! mew~!를 print 해주는 함수 포인터를 저장하죠. 그리고 3번 메뉴에서 그 함수 포인터를 이용해서 함수를 호출하게 됩니다. 4번 메뉴에서는 이름을 바꿀 수 있는 함수가 있습니다. 여기서도 read로 읽어와서 malloc으로 할당해주고, 거기에 원하는 내용을 fgets ..

System&Write up/CTF 2018.04.08

[Codegate 2018] DaysNote

[Codegate 2018] DaysNote 바이너리는 32bit이고 보호 기법은 걸려있지 않습니다. 실서버 ASLR 또한 꺼져 있습니다. 연도와 내용을 입력 받습니다. 그리고 CountDays 함수를 통해서 그 연도의 일수를 return 하게 합니다. 여기서 윤년이 아니면 365일, 윤년이면 366일을 반환하게 됩니다. 그 후 일수만큼 입력 받았던 내용을 dest에 복사하게 되는데, 여기서 0x16D는 365기 때문에 윤년일 경우 1byte overflow가 일어납니다. 즉, FPO가 가능할 것 같네요. 쉘코드를 내용에 박고 SFP를 쉘코드가 박힌 주소를 가리키는 주소의 -4로 변조해주면 됩니다. 그리고 저 배열의 시작 주소를 가리키는 곳이 있으니 저 부분 -4로 SFP를 변조하면 될 것 같습니다. 1..

System&Write up/CTF 2018.04.08

[Codegate 2018] betting

[Codegate 2018] betting 64bit 바이너리이고, canary와 NX가 걸려있습니다. 그리고 바이너리에 기분 좋게 helper라는 쉘을 띄워주는 함수가 있습니다. 보시면 s는 bp-0x20에 있고 입력은 s에 0x28만큼 받습니다. v24가 canary이고 밑에 printf로 s를 출력해 주기 때문에 중간에 있는 NULL byte를 제거해주면 canary를 leak 할 수 있습니다. canary는 bp-0x8이니 s와의 거리는 0x18이(24)겠죠. 마지막 byte는 NULL일 것이니 s에 “A”*24를 sendline으로 넘겨주면 “A”*24+”\x0a”가 전달되면서 NULL byte가 덮일 것입니다. 1 2 3 4 payload = "A"*40 + p64(canary) + "A"*8..

System&Write up/CTF 2018.04.06

[securinets CTF 2018] Boobs

[securinets CTF 2018] Boobs 이번에 풀어볼 문제는 2018 3 25 ~ 2018 3 26까지 진행되었던 securinets CTF의 pwn 중 가장 높은 배점을 가지고 있는 문제입니다. 바이너리는 32bit입니다. flag를 얻기 위해서는 check 함수를 실행시켜서 flag를 저 값으로 바꿔주고, get_boobs 함수를 실행시키면 flag가 출력됩니다. 어떻게 함수 flow를 바꿔줄 수 있을까요! main 함수를 분석해보면 우선 이렇게 classroom이 만들어지고, 이렇게 옵션에 따라 course를 create 할 수도, edit 할 수도, delete 할 수도, publish 할 수도 있습니다. 분석해보면 자체적으로 연결 리스트 자료구조를 통해서 course를 관리합니다. p..

System&Write up/CTF 2018.03.27

[TAMUctf 2018] pwn1 ~ pwn5

[TAMUctf 18] pwn1 32bit 바이너리입니다. gets로 s에 입력 받기 때문에, v5를 0xF007BA11로 덮어줍시다. 그럼 flag가 출력될 것입니다. 1 2 3 4 5 6 7 8 9 10 11 12 13 from pwn import * s = remote("pwn.ctf.tamu.edu", 4322) print_flag = 0x804854b payload = "A"*(0xEF + 4) payload += p32(print_flag) s.sendline(payload) sleep(1) print s.recv() cs ex 코드입니다. flag가 출력됩니다. -------------------------------------------------------------------------..

System&Write up/CTF 2018.02.27

[OpenCTF 2016] tyro_heap

[OpenCTF 2016] tyro_heap NX가 걸려있는 32bit 바이너리입니다. 이 부분이 main 함수의 중요 기능 부분입니다. create heap object : 힙 오브젝트 생성 malloc으로 36byte 할당해줍니다. 객체는 총 32개를 생성할 수 있습니다. 그리고 맨 앞부분에 puts 함수의 주소를 저장해줍니다. read는 a와 b가 있습니다. 둘 다 함수 주소가 저장되어 있는 부분은 건너뛰고 입력을 받습니다. a는 %35s로 35byte만큼 입력을 받습니다. b는 while에 getchar로 그냥 쭉 입력을 받습니다. b 입력을 받을 때, heap overflow가 일어나게 됩니다. free object는 말 그대로 선택한 object를 free 하는 기능을 합니다. 그리고 객체는 ..

System&Write up/CTF 2018.02.22
반응형