Pwnable/CTF
-
HITCON CTF 2017 babyfsPwnable/CTF 2018. 1. 30. 19:45
처음 문제를 잡았을때 어떤식으로 접근해야되는지 모르겠어서 /dev/fd/0을 open 하면 입력을 할수있다는것을 Write up에서 참고하고 문제를 풀었다. /dev/fd/0(/dev/stdin) 을 오픈하면 dup(0)과같은 현상이 일어나서 입력을 받을수 있다.open을하고 fseek 과같이 파일 사이즈를 확인하는 함수에서는 /dev/fd/0파일을 open할때 오류가나서 -1을 반환하기때문에 오버플로우를 할수있다. sendline을 할때 enter값이 stdin 버퍼에 아직 남아가지고 그것도 같이 복사를 해주는것때문에 -1,-2를 해주지 않으면 값이 내가 원하는것보다 더 많이 들어가버린다. 123456789101112131415161718192021222324252627282930313233343536..
-
defcon 2016 pillpusherPwnable/CTF 2018. 1. 24. 19:14
statically linked인데 strip이 걸린문제다 ..취약점이나 공격방법이나 엄청나게 간단한문제인데 분석이 힘든 문제인것같다 .. 12345678910111213141516171819202122232425262728293031323334353637fill { #pillchar* name 0int dosage 8int schedule 12int side_count 16int ?? 20char* side[] 24int Interactions_count 32int ?? 36char* Interactions[] 40int treats_count 48int ?? 52char* treats[] 56} pharmacy {char *nameint ?? 8int pill_count 12pill *Pill 16i..
-
insomnihack CTF 2018 sapeloshopPwnable/CTF 2018. 1. 23. 02:02
문제를 처음 잡을때 엄청 어려울줄 알았는데 그렇게 어려운편은 아니였다.대회당시에는 NULL값이 들어가면 malloc인자에 들어가는 사이즈크기가 증가를 안 해서 포기하고 다른 문제를 풀러갔는데 대회 끝나고 write up을 보니 %00을 이용하여서 풀수있었다.. 취약점은 sub함수에서 전역 포인터에 NULL값으로 덮지않고 free를 해주고 한번더 free를 하기위해서는 전역 포인터 옆에 숫자가 1이상이 되어야하는데 그 문제는 inc함수에서 0인지 확인을 하지 않고 +1를 해주기때문에 fastbin dup 취약점이생긴다. 익스는 함수를 안 써서 그런지 엄청 더럽다.. from pwn import * #p=process(["./sapeloshop"],env={'LD_PRELOAD':'./libc-2.23.so..
-
Codegate 2017 Final building_ownerPwnable/CTF 2018. 1. 21. 20:12
이 문제에서는 type confusion취약점이 있는데 manage함수 부분을보면 edit, change둘중 change부분을 보면 원래 company type라면 저 함수를 써서 restaurant type로 바꾼다면 두 type끼리 size가 안 맞아서 오버플로우가 되는것을 이용하여서 name 포인터 부분으로 heap 릭을하고 main_arena leak + 공격을 할수있다. string 객체는 "A"*17 을 넣으면 0x21사이즈로 할당이되고 25개를 넣으면 0x21사이즈를 free하고 0x31사이즈로 할당을 하는 특징을 이용하여서 main arena 릭을 할수있다. 123456789101112131415161718192021222324252627apart {string name 0int64_t f..
-
Christmas CTF 2017 BitcoinGalleryPwnable/CTF 2018. 1. 18. 23:09
add title입력부분에서 stack에 입력을하고 마지막에 널값을 넣지않은채 strcpy함수를 호출하기때문에 내가 title에 입력한 버퍼뒤쪽 스택에있는 주소들을 릭 할수있다. free를 시킬때 unlink를 하고 free를 시킬때 이전 청크 story를 free시키고 NULL로 채우지 않기때문에 fastbin dup 취약점이 생기고, modify size 부분에서 realloc를 하는데 size 1보다 작은값을 막지 않기때문에 fastbin dup취약점이 이 부분에도 생긴다. title입력부분에 fake prevsize (0), fake size(0x31)을 적고 fastbin dup를 이용하여서 fd를 그쪽 주소로 넘긴다음 그 주소에있는 story포인터가 가르키는 주소를 스택 주소로 바꿔서 라이브러..
-
Codeblue 2017 simple memo padPwnable/CTF 2018. 1. 17. 23:21
return to dl-resolve 기법 공부를 다 하지 않고 풀어버렷다 .. 대충 원리정도만 공부를 하고 find 명령어로 strtab주소를 가지고있는곳을 찾고그곳에 delete구문중 unlink가 있으니 delete를 이용하여서 strtab을 부르고있는? 주소인 0x601858에 2번째 청크 주소를 넣고 123456LOAD:0000000000400418 ; ELF String TableLOAD:0000000000400418 byte_400418 db 0 ; DATA XREF: LOAD:0000000000400298↑oLOAD:0000000000400418 ; LOAD:00000000004002B0↑o ... LOAD:000000000040047B aStrcmp db 'strcmp',0 ; DATA ..
-
Codegate 2017 huntingPwnable/CTF 2018. 1. 17. 18:26
레이스컨디션 관련 문제를 찾다가 찾은 문제다. 시간이 조금 오래 걸렷는데 attack에서 1 2 3 만드는것을 그냥 rand % 4값으로 넣는걸로 잘못봐가지고 그걸로 실수를 하였고, sleep부분이 1초밖에 안 되서 p.recvuntil이런걸로 하나하나 받고 입력하고하니깐 1초안에 잘 못들어가는거에서 바로 send 2\n3\n하는 방식을 생각을 못해서 오래걸린것같다.. 1초안에 안들어가는것같은데 어떻게하지 생각을 하다가 결국 풀이를 보고 send로 바로 보내는방법이 있다는것을 알았다. 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051from pwn import *from ctypes im..
-
WITHCON 2017 bankPwnable/CTF 2018. 1. 15. 23:58
레이스 컨디션 공부가 제대로 되어있지않아 공부하느라 오래걸리고 노트북이 맛이 가서 A/S 받고 하느라 푸는데 너무 오래걸린것같다레이스컨디션 부분은 WRITE UP을 참고하였다. 몇몇 함수들을 thread로 실행시키는것을 보자마자 레이스 컨디션이라는것을 예상을 하였다. 메인 4번 메뉴인 withdraw를 보면 0x603228 +1 -= a1를 하는데 black을 사용할때 쓰이는 pthread_rwlock_t 변수에서 rdlock을 걸면서 race condition 취약점이 생긴다. http://xnuclear.tistory.com/6 위 링크에서 rdlock 설명 부분을보면 같은 rdlock상태에서 또 다른 쓰레드에서 rdlock을 걸어도 블록이 되지않는다는 것을 볼 수 있는데 그 것을 이용하여서 문제를 ..