Pwnable/CTF
-
Codegate 2017 final VMPwnable/CTF 2018. 3. 22. 23:50
비트 연산에 약한 탓에 분석 할때 너무 어려웠다..비트연산을 이용하여서 한자리 한자리 나누고 그 값이 몇인지 확인하면서 기능을 실행시킨다. info register, mov, add, sub, xor, swap, inc, dec, push, pop, syscall mov, push, syscall만 이용하여서 문제를 푼 것 같다.mov는 레지스터 배열에서 r0 r1 r2 ~ 인덱스를 받고 그곳에 값을 넣는 방식이고 push는 12345678910111213141516171819__int64 __fastcall push(__int64 a1, __int64 a2, __int64 a3, int a4, int a5){ __int64 result; // rax *(_DWORD *)(a2 + 28) -= 2; if..
-
Codegate 2017 final petshopPwnable/CTF 2018. 3. 22. 23:40
취약점은 힙 오버플로우가있고 난이도는 쉽다.string객체를 got로 덮어서 릭을하고 freehook을 시스템으로 덮고 (왜 freehook을 덮었는지 모르겠다 ㄷㄷ) ~basic string 같이 소멸자에서 free가 실행되기 때문에 이것을 이용하여서 문제를 풀었다. 123456789101112131415161718192021222324252627282930313233343536from pwn import * def set_pet(name,sound,feed): p.sendlineafter('select:','4') p.sendlineafter('set:','1') p.sendlineafter(':',name) p.sendlineafter(':',sound) p.sendlineafter(':',feed..
-
Codegate 2015 final yoctoPwnable/CTF 2018. 2. 21. 00:33
return to dl-resolve 문제다.웹 해킹 공부하다가 우연히 문제를 봐서 문제를 잡게 되었다. 계속 이상한 오류 때문에 삽질을 하다가 오류를 발견했는데 그 오류가 elf32_sym은 str_tab_offset 000000 000000 00000000이런 식으로 16byte씩 인덱스 한 개씩 가진다. 맨 처음이 0으로 시작하기 때문에 system_string - elf32_sym을하고 -1을 해줘야 되는데 -1을 해주지 않았다.. return_to_dl_resolve를 콜 하는 부분을 실행시키는 방법인데 그 때 call될때 바로 뒤에 있는 값이 인자가 된다.\ 14707로 인덱스가 되면 system문자열이 제대로 들어가도 undefined symbol: system, version GLIBC_2..
-
Codegate 2018 zooPwnable/CTF 2018. 2. 11. 02:05
(feed) (takeWalk) 취약점은 feed함수, takeWalk 함수에서 일어난다. description 배열크기는 104크기인데 16byte오버플로우로 인해 다음 청크 prevsize,size를 덮을수있다. 이렇게 되면 생각나는게 대표적으로 여러기법이있겠지만 이번문제 함수기능들을 보면 unsafe unlink문제인것을 알수있다.takeWalk함수를 보면 기본적인 feed포인터라면 가지고있어야될 food,Medicine 문자열 포인터가 아닐때 입력을 받는다. 저곳을 hook으로 덮어서 입력을 하라는것을 보여주고있다! feed에서 오버플로우를 일으키기위해서는 protected변수가 1이여야되는데 (takeAnimal함수)dung 포인터를 4개 free시키고 그리고 나서 allocate_dung - ..
-
코드게이트 2018 풀이 보고서Pwnable/CTF 2018. 2. 7. 18:40
재미있는 문제가 많았던 대회였다.ImpelDown문제도 게싱으로 막 넣다가 오류가 일어나면서 eval(you.'input'+()) 이런식으로 실행된다는것을 알게되었고 혹시나해서 name에 값을 넣어보고 name으로 입력받으니 변수 이름이 name이고 이걸로 호출이 되지않을까? 해서 해봤는데 찾지 못했다는 오류가 안 뜨고 eval안에서 하나 함수와 name에 입력한 함수를 같이 실행시킬려고해봤는데 결국 풀지못했다 ㅠㅠ나중에 풀이를 보니 dig이나 다른 아무 함수들과 파이프를 이용하여서 할수있고 dig안에다가 name을 이용하여서 문제를 풀수있었다 .. 대회 끝나고 FTP는 로컬에서 풀고 너무 동적분석을 위주로해가지고 나중에 다시 한번 풀어볼 예정이고 melong도 문제가 쉬운편이던데 어려울줄 알고 대회당시..
-
Codegate 2018 SuperFTPPwnable/CTF 2018. 2. 5. 18:51
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364from pwn import *import os p=process('./ftp')#p=remote('ch41l3ng3s.codegate.kr',2121)elf=ELF('./ftp') def join(name,age,id_,pw): p.sendafter('Choice:','\x01') p.sendlineafter(':',name) p.sendlineafter(':',str(age)) p.sendlineafter(':',id_) p.sendlineafter(':',pw) def printf(): p..