TODAY TOTAL
디미CTF 풀이 (총 8문제 풀이)

Misc

1. Mic Check

쓰여 있다. 보고 복붙.

 

2. reader 

파일을 받아서 보면 fd에 이미 flag는 연결되어 있는데 그걸 읽어야 한다.

 

힌트를 보고 맞출 수 있었다. /dev에 가보니까 fd가 있어서 조금 더 찾아보니 /dev/fd/3에 가면 읽을 수 있다는 것을

알았다.

 

3. dimi-contract

파일 다운받아서 flag를 구하려면 어떻게 해야하는지 보니까

이렇게 되어있다.

payBack 함수에서 취약점이 있다. -, + 확인을 안하기 때문에 payback에 - 값 넣으면 돈을 많이 얻을 수 있다.

 

근데 그 전에 debt가 0이면 안되니까 debt로 돈을 좀 꾸고 해야 한다.

 

4. CTFind

CTFind을 다운받고 /org/dimigo/gui에 있는 파일을 읽으면 안에 flag가 있다.

 

Web Hacking

 

5. 5shared

 

웹이 어떻게 구성되어 있는 지 소스파일을 준다.

보면 .png.pht가 가능하다.

.pht에다가 웹쉘 코드 작성해서 올리면 된다.

 

웹쉘 코드는 system($_GET[cmd]);로 작성했다.

저기에 flag가 있는 것을 확인하고 출력해주면 된다.

Reversing

 

6. gorev

flag가 안에 하드코딩 되어있다.

Pwnable

 

7. ezheap

첨 풀어보는 uaf 문제. 솔직히 그냥 디버깅하면서 분석하다가 얻어걸렸다.

익스 코ㅇ

2개를 Free하고 다시 Add를 하는 순간

 

하나는 top chunk에 병합되고 fastbin 하나 남고 하나는 fastbin이랑 small bin이랑 병합된다.

여기서 Add하면 비어있는 32에 다시 malloc 되고 353 크기의 청크를 떼어서 50크기의 청크를 malloc 해준다.

 

그 상태에서 0을 보면 2번 인덱스 청크의 내용중 하나가 실행되기에 그걸 이용하면 된다.

8. ropsaurusrex2

첨에 봤을 때도 하위 몇바이트 overwrite 하는거구나 감은 왔는데도 솔브가 적어 다른 문제 보다가

나는 포너라는 것을 깨닫고(다른 말로 "다른 문제는 못 풀겠어서")다시 시도해 봤다.

꽤 운이 따라준 문제다.

소스코드를 보면 매우 쉬워보인다.

write를 이용해 아무 주소나 릭해서 ROP 해주면 될 것 같다.

 

하지만 여기서 문제는 PIE가 걸려있어서 만약 libc 주소를 구했다면 main으로 다시 어떻게 돌아가야 하나 고민했는데

 

hint를 보고 "ret의 하위 바이트 조작하면 main으로 갈 수 있는 코드가 있구나" 생각이 들어서

 

일단 A를 56개 넣어서 "56개 이후에 ret 주소가 덮히나?" 확인하려는데

신기하게도 엔터값 0x0a가 들어갔는데 libc_start_main으로 가게 되었다.

 

개꿀인데? 생각으로 쭉 가보니까

main으로 가게 되었다.

 

이걸 이용하여 다시 main으로 온 후에 leak 한 libc 주소를 이용하여 ROP 해주면 된다.

돌려보면

flag가 나온다. 솔직히 좀 많이 쉬웠던 문제 같은데 왜 솔브가 적은 지 잘 모르겠다.

  Comments,     Trackbacks
최근 작성 글
글 보관함
검색