CTF
-
[Belluminar 2016] remuheapCTF 2016. 11. 27. 18:10
이 문제는 기본적으로 베이스를 깔아둬야할것은 다음과같다. 1. Ubuntu 16.04 LTS fgets ( 얼마전에 Allocate Heap with fgets 라는 제목으로 블로그에 글을 올린적이 있음 )2. Unsorted bin attack 위 두개를 이용해서 GOT를 덮고, format string 을 이용해서 릭한후, 다시한번 GOT를 덮어 호출하게되면 쉘이 따이는 문제이다.헉 스포 다해버렸띠.. 메뉴 선택은 위와 같은 함수를 이용해서 한다. 이 함수가 매우 쓸모있음 *_* ㅎㅎ 1번 메뉴는 malloc을 해주는 함수인데, size를 입력받는다, 512 ~ 4096 사이즈라면 할당 할 수 있다. read 도한 4095바이트를 입력받고, 할당을 하게되면 chunk_inuse를 나타내는 0x6020..
-
HITCON 2014 stkofCTF 2016. 11. 26. 23:39
fake chunk를 만들어주는 문제, 일단 unlink는 호출했고, 이게 fastbins 에서 익스하는 문제란다. malloc pointer를 fd와 bk에 넣어줘도 제대로 안되는거때문에 나중에 풀어야겠다 1번메뉴는 아래와 같다. fgets로 malloc size 를 입력하고 할당해준다. malloc pointer는 s 변수에 담긴다. s는 주소를 아는 변수이다. 2번메뉴는 다음과같다. 할당된곳에 fread로 입력을 받는다. 데이터를 채울 수 있는 부분이다. 여기서 fake chunk를 만들어 줄 수 있다. 3번 메뉴는 다음과같다. 만들어진 chunk를 free해주고 malloc_ptr을 초기화해주는 역할을 한다. 이 3개의 메뉴로 unlink를 호출하게끔 만들면된다. 다음 익스를 보면 이해가 빠르다...
-
HITCON 2016 secret_holderCTF 2016. 11. 23. 12:52
3일동안 삽질해서 풀었다. 진짜 엄청 고생했다. 해찬이와 힙을 같이 공부하고 풀어봤는데 이걸 풀면서 unsafe_unlink에 대해 이해하게됬다. 릭벡터를 못찾아서 하루동안 삽질했는데 간단하게 renew 로 릭이 됬었다 하하... GOT 덮으려고 unsafe_unlink를 1일 동안 삽질했다. 글고 아침에 일어나서 쉘땄다..... keep 메뉴와, wipe 메뉴, renew 메뉴가 존재한다. 각각의 함수에대해서 볼 예정이다. keep 메뉴는 각영역에 할당되었는지 검증을 하고, 각 영역에 할당을 한다. 그리고 INUSE 를 나타내는 전역변수를 1로 초기화한다. wipe 함수는 각각의 청크를 free 해주는 역할밖에 안한다. 그리고 inuse를 0으로 초기화해준다. renew 메뉴는 각 청크를 입력받는다. ..
-
[HSOC] Find Me!! (Reversing 400pt)CTF 2016. 11. 6. 01:12
py2exe 로 변환한 파일을 줌 unpy2exe 해주고 pyc 디컴파일해주면소스나옴 1234567891011121314151617181920212223242526# Embedded file name: reversing_150.pyimport hashlib def main(): print 'tool is start' flag_string = flag_text() flag = flag_hashing(flag_string) print flag print 'tools is ended' def flag_hashing(flag_string): string = hashlib.md5(flag_string).hexdigest() return string def flag_text(): string_1 = 'flag is..
-
[HSOC] ConsoleRPGCTF 2016. 11. 6. 01:06
앙 1등띠 그냥 전사키우기 게임이다. 플래그를 얻기위해서는 10000레벨을 달성해야하는데, 그냥 치트엔진으로 해도된다고 생각하겠지만 변조를 체크한다. > 32 쉬프트 연산을 하는곳이 데미지를 연산하는곳이다. adc로 연산을 하는데, 저거 코드패치해주면된다. 요리 해주고, 게임한후에 데미지 높여주고 사냥 겁나하면댐 데미지가 이렇게 됬으면 그냥 사냥해버린다. 몬스터가 때리기전에 걍 죽어서 HP관리는 따로 필요없다. 오토핫키같은거로 1번열라누르면 알아서 연산되고 레벨 10000이되면 플래그를 뿜는다 아 그리고 사냥이 Sleep(500) 걸려있어서 엄청느린데 그거 걍 패치하고 사냥 겁나해주면 빠름
-
[0ctf] freenoteCTF 2016. 11. 4. 03:51
우선 이문제에 대한 롸이트업은 올리지만, 아직까지 확실하게 이해하지못했고, 한번에 다 업로드하는것이 아닌 계속해서 수정할 롸이트업이기때문에 확실하게 이해될때까지 이 글은 계속 수정됩니다. 제가 확실히 이해하고 fake chunk를 확실하게 다룰 때 까지 이 문제는 포기하지않으렵니다. heapbase 릭과, LIBC Leak은 혼자서 쉽게 해냈지만 그 이후는 롸이트업을 봤기때문에 뒤쪽 부분에서 부실할수 있고, 자세히 아시는분은 피드백 부탁드립니다. 코드를 보면 5개의 메뉴가 존재하고, note를 관리하는 바이너리인것을 알 수 있다. 보기 쉽게 rename으로 처리 했다. 여기서 1,2,3,4 번 모두를 이용해서 익스플로잇을 해야한다. 첫번째 note_table 함수를 확인해보자 malloc_ptr에 0x1..
-
[Def-camp CTF] Warm HeapCTF 2016. 10. 31. 01:05
HEAP 기초 문제부터 하나하나 풀어보려다가 이 문제를 알게되어 그냥 풀어보았다. 간단한 문제엿다 각각 malloc을 하고 입력받는 구조를 가진다. 힙의 상태는 아래 사진과 같다. chunk 사이즈는 16바이트를 할당하면 64비트이기때문에 prev_size와 size가 추기때문에 16바이트가 추가로 생성된다. *(v3 + 1) = malloc(8); *(v4 + 1) = malloc(8); 이 두개의 코드 때문에 다음 청크의 주소가 malloc 데이터안에 들어가게된다. 다음 fgets로 입력받고, 두번째 malloc 영역부터 입력을 받는데, 40바이트를 입력하면 0x02045070전까지 도달할수있다. 만약 여기서 뒤에 호출되는 함수의 GOT를 넣으면 v4 + 1은 GOT가 된상태로, strcpy로 복사를..
-
WITHCON Finals - jnjnCTF 2016. 10. 25. 21:45
화이트햇 본선에서 600포인트로 나온 포너블 문제이다. 본선에선 쫄탱이 먹어서 손을 안대고 끝나고 풀생각으로 해서 끝나고 오늘 풀어봤는데 재밌는 문제였다. 300포인트가 더어려운듯. 300포인트 이거 롸업쓰고 풀러가야겠다. 그냥 대충 써도 보고 다 아실듯 익스플로잇 시나리오 1. LIBC LEAK 2. calculate offset3. Overwrite RETN 끝. 오버플로우 벡터 printf name leak 벡터 malloc, free후 list에서 name 에서 릭 가능 libc 얻어오고나서 모든 라이브러리와 비교해서 풀면됨 로컬에서 셋팅할땐 그냥 슥삭가능, 본선 리모트 환경만 줬을땐 우분투 64비트 db 좀 가져와서 쓱싹하면 될듯 RIP 그냥덮힘 free하면 그냥 릭됨 저거 libc주소임 fre..