PangYourNameGuessDanceEnteredSHELLnervousCheerupGoPassDecryptGingerBoardOpen BoxRSAbeginning 제가 푼것 들입니다... ^^7....
https://github.com/juckchang/Exploit/tree/master/ctf/DIMI/_2018
붙었습니다 (grin)
PangYourNameGuessDanceEnteredSHELLnervousCheerupGoPassDecryptGingerBoardOpen BoxRSAbeginning 로 총 12문제 풀고 올클로 1등했습니다 (grin) 물론 아직 1회차라 남은 5번도 노력해보겠습니다...
b0f argv[0]을 덮으면 stack smash detect때 원하는 데이터를 꺼내 올수 있다는 걸로 canary를 leak 하고 orw로 플래그를 읽으면 되는 문제였다. pyjail ' ' = ' ' "A" + "B" == "A""B"; from module import * 하면 . 안써도 된다. 정도 트릭을 이용해서 플래그를 읽으면 된다. inspect 모듈을 사용하면 간단하게 된다. from inspect import *; print(stack())from wrapper import *; runCode("print(f""lag)") 후기사실상 처음으로 ctf 운영하는거였는데 많이 힘들었다ㅠㅠ.. 내려던 문제 하나가 문제생겨서 못낸것도 아쉽다. 다음에 내야지..
작년에 13등 했는데 올해는 1등 먹어서 성장이 눈에 보여 기분이 매우 좋습니다 ^^7
https://www.blackhat.com/docs/asia-18/asia-18-Marco-return-to-csu-a-new-method-to-bypass-the-64-bit-Linux-ASLR-wp.pdf 나중에 Tech blog에 예제 익스까지 해서 올려놓겠다. __libc_init_csu에 있는 가젯들을 사용해서 pop rdi, rsi, rdx 같은 가젯 없이 함수를 call 할수 있는 방법이다. 이 2개를 엮어서 사용하는건데, 먼저 pop rbx; pop rbp; ... ; ret 가젯으로 각 레지스터를 세팅한다. r12에는 원하는 함수의 ptr 주소 ( got )를 넣고, rbx 에는 0 을 넣는다. ( 상황에 따라 적당히 옵셋 계산해서 넣을 수 있다 ). 그리고 r15, r14, r13에 ..