Pwnable/CTF
-
SECCON 2017 video_playerPwnable/CTF 2018. 1. 11. 23:08
#C++문제다. 처음 문제풀때 main시작부분에서 랜덤 사이즈로 257개 청크를 만드는데 free되어있는거 마음에 안 든다고 for문으로 막 할당을 시켜줘서 없애버렸다.. 덕분에 for문이 많이 돌아가는바람에 서버에서 쉘은 안 따진다 ㅠㅠㅠㅠㅠ물론 for문 제거하고 그에 맞게 heap 오프셋 다시 구하면 따질것이다. (너무 귀찮다 ㄷㄷ..) 로컬에서 LD_PRELOAD설정하고는 바로 따진다. 취약점은 video edit부분에서 생긴다. 새로 할당을 해주고 그것을 구조체 포인터에 넣고 free를 시키고 NULL로 덮지않고 입력을 받는다. fastbin dup !audio같은 부분은 제대로 되어있는것을 볼수있다. (free를 시키고 값을 넣는다) 출력은 video play를 이용하여서 릭을 할 수 있는데 p..
-
SECCON 2017 secure Keymanager, ElectionPwnable/CTF 2018. 1. 10. 13:41
fastbin dup, malloc_usable_size 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869from pwn import * p=process("./secure_keymanager")elf=ELF("./secure_keymanager") def init(name,master): p.sendafter('>> ',name) p.sendlineafter('>> ',master) def add(length,title,key): p.sendlineafter('>> ','1') p.sendlineafter('...',str..
-
Christmas CTF 2017 bookstorePwnable/CTF 2017. 12. 30. 22:21
여태까지 C++ 경험이 적어서 문제를 잡았을때 너무 어려웠던문제였다 .. 123456789101112131415161718publisher { string name string description } book {string name string description int price publisher* Publisher }cs 구조체는 위와같다. 여기서는 string 객체를 이용하였을때 힙으로 할당을하고 book 구조체를 operator new를 할때 publisher 포인터부분을 초기화를 하지 않아서취약점이 생기는문제였다.string 객체는 16byte 정도입력하면 0x31로 할당을하고 16byte를 또 더하면 31byte힙을 free시키고 0x41로 할당을하고 또 사이즈가 모자르다고 생각되면 다시 ..
-
Christmas CTF 2017 infinite catPwnable/CTF 2017. 12. 30. 22:14
init_array 주소에서 nyang함수를 호출하는데 함수에서는 mmap을 이용하여서 7권한을 이용하여서 주소를 맵핑해주고 paper 전역변수에 맵핑 주소를 넣어준다. 7 권한이면 4 2 1 순서대로 실행 쓰기 읽기 순서다. 여기서부터 누가봐도 쉘코드로 쉘을따는 문제라는것을 예상할수있다. 이전에 read_int로 정수입력을 받고 매개변수로 받는다. 그 매개변수 만큼 rand를 돌리면서 아까 읽기권한이 있는 맵핑된주소에 rand값을 넣는데 buf에 0x34만큼입력을 받는다.0x34면 v4 함수포인터, seed, i, sfp,ret 6byte 오버플로우가된다.한번에 모든 쉘코드가 랜덤으로 짜질확률은 매우 낮기때문에 한개한개 만들어나갈것이다.count로 전역변수로 입력이되기때문에 main으로 돌아갔다가 1b..
-
HITCON 2016 house_of_orangePwnable/CTF 2017. 12. 11. 22:00
일단 기본적으로 힙 오버플로우 취약점이있다. 그것을 이용하여서 house of orange기법을 써서 푸는문제인데 기법만 이해했으면 쉬운문제인것같다. 사이즈를 0X20FA1 이라면 0xfa1로 만들어주면 탑 청크 사이즈를 조작했을때 오류가 나지 않는다. 탑 청크사이즈가 제대로 정렬되어있는지 확인을하는곳 때문에 이상하게 조작하면 오류가 난다. 그리고 top_chunk보다 큰 사이즈를 할당하면 sysmalloc를 하는데 이때 malloc하는 값이 mmap 크기만큼 크지 않으니 할당할려던 청크를 free를 시키고 탑 청크를 새로 배치한다.house of orange를 할때 라이브러리는 물론 힙 주소도 필요하다.힙 주소는 large chunk에는 힙 주소를 가르키고있는 fd_nextsize와 bk_nextsiz..
-
BCTF 2017 BabyusePwnable/CTF 2017. 12. 1. 13:51
Exploit ONLY 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889from pwn import * p=process("./babyuse")elf=ELF("./babyuse") def buy(gun,length,name): p.recvuntil('Exit') p.sendline("1") p.recvuntil('95') p.sendline(str(gun)) p.recv(1024) p.sendline(str(length)) p.recvuntil(':') ..
-
TUCTF 2017 Write upPwnable/CTF 2017. 11. 27. 09:32
PWN 50 VULN_CHAT v5[0x19]sfp 만큼 거리가 있고 v6 "%30s" 를 이용하여서 30byte입력하는데 sfp 하고 ret 1byte를 입력할수있다. 그래서 선택한방법이 v5를 oveflow를 해서 v6 "%30s"를 "%s"로 바꾸면 v4입력부분에서 ENTER,NULL값을 입력받을때까지 입력할수있다.즉, eip 4byte 변조가능 ret에 printFlag에 넣는다면 플래그를 얻을 수 있을것이다. 123456789101112131415161718from pwn import * #p=process("./vuln-chat")p=remote("vulnchat.tuctf.com",4141) print p.recv(1024) payload = "A"*0x14payload += p32(0x73..