System&Write up 87

[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

[Codegate 2018] BaskinRobins31

[Codegate 2018] BaskinRobins31 -Jubil(|BAOBOB|) 64bit 바이너리이고, canary가 없습니다. main 함수입니다. 일단 소켓이 아니기 때문에 socket descriptor가 아닌 stdin과 stdout으로 입출력을 해줍시다. 밑에 Hint는 ROP라고 나옵니다.그리고 베라 게임 이기려고 하면 규칙을 어기고 숫자를 4개씩 불러버립니다. 하지만 신경 쓰지 말고 저희가 입력할 수 있는 함수, your_turn을 분석하겠습니다. 그냥 read에서 BOF가 터집니다.쉽게 취약점을 구했으니 ex 코드를 짜러 갑시다. 일단 0xb0(176)에 SFP(8)을 고려하면 return address는 184byte 뒤에 있을 것입니다. 64bit 리눅스에서는 RDI : 첫번째 ..

System&Write up/CTF 2018.02.09

[Codegate 2014] nuclear

[codegate_2014] nuclear (이 문제는 예전에 풀다가 놓고 다시 잡은 문제라서 코드나 여러 부분에서 불편함을 느끼실 수 있습니다. 양해 부탁드립니다.) 바이너리는 이렇습니다. 무슨 문제였을 지는 모르지만, 1129 포트로 소켓을 연결합니다. start_routine 함수에서, BOF 취약점이 발생합니다. 그래프로 따라 올라가보면, launch 명령을 입력하고, passcode를 맞췄을 때 호출하는 함수 속에, 있는 것을 확인 할 수 있습니다. 그럼 passcode를 일단 알아내야 합니다. passcode를 읽어서 변수에 저장하길래, 변수의 이름을 passcode로 바꿔줬습니다. 스택에는 이렇게 쌓입니다. v4, v5[4] 모두 0으로 초기화 되었습니다. s1을 %s로 출력합니다. “> “..

System&Write up/CTF 2018.01.31

[pwnable.kr] Toddler's Bottle - asm

[pwnable.kr] Toddler’s Bottle – asm how to make shellcodes… 일단 들어가보면 긴 파일 이름을 가진 flag 파일이 있습니다. 가짜 플래그이고 asm_pwn 디렉터리에도 실제로 저런 이름을 가지고 있다고 합니다. 실제 exploit은 nc 0 9026으로 하면 됩니다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 from pwn import * filename = "./this_is_pwnable.kr_flag_file_please_read_this_file.sorry_the_file_name_is_very_loooooooooooooooooooooooooooooooooooooooooooooooooooooooo..

[HDCON 2013] luckyzzang

[HDCON 2013] luckyzzang Binary는 이렇습니다. canary는 없네요. 포트는 7777번으로 연결해줍니다. 들어가면 MSG를 입력 받고 종료됩니다. 입력 받는 부분을 보면 BOF가 터집니다. 하지만 v2 % 100의 숫자가 클 때 공격이 성공할 것 같습니다. 바이너리에 system 함수가 없으니 ROP를 이용해서 system 함수의 주소를 구하고 리버스 커넥션으로 exploit 하겠습니다. buf과 Return address의 거리는 0x408 + 4입니다. 입출력으로 send, recv를 이용할 것이니 ppppr gadget을 구해주겠습니다. pppr : 0x080489cc send 함수와 system 함수의 차(offset)을 이용해서 exploit할 때 system 함수의 주소..

System&Write up/CTF 2018.01.30

[Codegate 2014] angry_doraemon

[Codegate 2014] angry_doraemon angry_doraemon 문제입니다. main 함수에서 8888 포트로 연결하네요. 이렇게 6가지의 Attack menu가 나옵니다. 여러 메뉴들을 입력해봤는데, 5. Fist attack에서 r을 입력하면 special attack이 나옵니다. 분석해봅시다. 이 부분인데, 4byte 받아서 call 해주지만 chaining을 못하고, 그것보다 맨 앞 바이트가 \x08이 아닌지 필터링합니다. 즉, plt를 쓰지 못 합니다. 안타깝지만 일단 pass 하겠습니다. 또 의심 가는 부분이 있습니다. 제가 뭘 선택했는지 알려줍니다. 개행 문자 때문에 출력도 이상하게 되는데… canary leak의 냄새가..? read 0x6E. BOF 취약점입니다! 일단 ..

System&Write up/CTF 2018.01.30
반응형