본문 바로가기

CTF

Codegate 2018 writeup

https://github.com/yeonnic/CTF/tree/master/Codegate_2018_Final/pwnable



Betting:

BOF가 일어난다.

canary를 릭 하고, ret를 helper함수로 덮어서 플래그를 읽으면 된다.


Catshop:

Sell cat을 하면 UAF가 일어난다.

your name change를 선택해서 플래그를 읽는 함수주소로 함수 포인터를 덮은다음 3번메뉴로 플래그를 읽었다.


DaysNote:

윤년일때를 선택하면 1바이트 오버플로가 발생하는대 ebp 첫바이트를 덮어쓸수있다.

입력 받는 버퍼가 크므로 ret 슬라이딩을 해주고 rop체인을짜서 system함수를 릭하고 플래그를 읽었다.


Heapbabe:

이거도 UAF가 발생하는대 PIE가 걸려있어서 먼저 PIE_base를 구해야했다.

함수포인터의 주소는 PIE라 알수있는건 0x~~~cd7이렇게 3개인대 막상 건드릴수있는건 1바이트 뿐이라

오프셋 0xc00 ~ 0xcff 사이에 쓸만한 가젯을 찾아야 하는데 나는 0xcaa 오프셋에 puts을 호출하고 리턴하는 가젯을 사용해서 릭을했다.

그다음 버퍼에 rop체인을 남기고 다시한번더 함수포인터를 pop을 4번하고 ret를하는 가젯으로 덮어써서 릭을 하고 쉘을얻었다.


card:

각 난이도별로 크기가 다르게 생성되는 카드들의 짝을 맞추는 게임이다. time(0)시드를 사용해서 예측이 가능하고, 카드를 선택할때 oob가 일어나서 값을 1바이트씩 릭을 할수있고 카드끼리 짝을 맞춰주면 0으로 초기화 하기때문에 특정 위치에 1byte로 0을 넣을수있다.

게임을 클리어하면  전역변수 fd값을 가지고 버퍼에다가 문자열을 읽는데 fd를 표준입력으로 돌리면 오버플로가 일어난다.


oob를 이용해서 canary, libc_base, pie, stack addr을 릭한 다음 fd를 0초기화 한다음 게임클리어를 하고 쉘을 획득했다.



'CTF' 카테고리의 다른 글

CodeGate 2018 final 후기  (0) 2018.04.08
HarekazeCTF 2018 alnush  (0) 2018.02.11
HarekazeCTF 2018 Flea_attack  (0) 2018.02.11
HarekazeCTF 2018 Harekaze Farm  (0) 2018.02.11
CodeGate 2018 quals SuperFTP  (0) 2018.02.07