반응형

Write-up 119

[CODEGATE 2018] BaskinRobins31 write-up

문제는 BaskinRobs31 게임입니다.게임의 규칙은 다들 아시다시피, 31이라는 카운트에서 서로 1~3 까지의 수를 말하고 그에 해당하는 값만큼 값을 깎는 것을 반복하는 겁니다. 자신의 차례에 이미 카운트가 0이 되어있다면 지는 게임입니다. 하지만 모든 게임에는 잔머리가 있듯이, 필!승!전1략1이 있는데요. 제가 한 번 해보겠습니다. 이 게임은 선빵을 먼저 때릴 수 있으면 이기는 게임입니다. 3만 계속 외치다보면 어느순간 상대방의 차례에는 4가 남아, 상대방은 어떤 수를 내도 다음 차례에 질 수 밖에 없기 때문이져. 근데 이놈이 사기를 칩니다; ㅎ..ㅎㅎ프로그램 따위에게 농락을 당해버렸지만, 그 복수는 쉘을 따버리는 것으로 갚겠습니다. 친절하시게도 제일 먼저, ROP가 힌트라고 알려줍니다. 문제를 분..

Write-up 2018.02.06

[pwnable.kr] random write-up

문제를 봅시당. 딱히 뭔가 특별한 정보는 없는 듯 합니다. 접속해 봅시다. 평범한 구조네요. 소스 코드를 읽어 봅시당. 결국, 사용자가 입력한 값과 random 값이 XOR 연산을 한 값이 0xdeadbeef 가 되도록 하면 되겠습니다. XOR 연산의 특징 덕분에 random 과 0xdeadbeef 가 XOR 연산하면 사용자가 입력해야 하는 값을 알 수 있겠네요. random 값을 구하는게 핵심이군요! random 값을 구해야 하는데, 위의 소스 코드에서 알 수 있는 사실하나는 rand() 함수의 시드 값이 없다는 점입니다. 컴퓨터는 기본적으로 난수를 생성하지 못합니다. 그래서 컴퓨터의 시간이나 마우스 포인터 같은 정보들에 기반한 값으로 시드 값을 생성하여, 특정 알고리즘에 넣은 뒤 난수를 구하는데요. ..

Write-up 2018.01.23

[pwnable.kr] blackjack write-up

문제는 위와 같습니다. 백만장자에게 플래그를 준다고 하네요. 서버에 접속해보면 블랙잭 게임을 진행하고 있다는 것을 알 수 있습니다. 대충 몇 몇 단서들을 종합해보면, 게임을 진행하면서 보이는 Cash 값, 즉 플레이어의 보유 자산이 1,000,000 이 넘으면 플래그를 준다는 것 같습니다. 문제에서 주어진 소스코드를 살펴보겠습니다. 플레이어의 카드 합이 딜러의 카드 합보다 작으면 배팅한 금액에서 차감하네요. 당연하네요. 근데, 여기서 한가지 생각해야 하는 점은 이게 프로그램이고, bet 가 int 형이라는 겁니다. 만약 배팅하는 금액인 bet 가 음수라면 어떻게 될까요? " - (-) = + " 아닌가요? 머릿속의 꽃밭이 실제로 실현이 가능할지, 혹여나있을지 모르는 점검 루틴을 살펴봐야겠습니다. 실제로 ..

Write-up 2018.01.22

[pwnable.kr] cmd1 write-up

문제는 위와 같습니당. PATH 환경변수와 관련이 있는 문제인가 봅니당.요구하시는 대로 ssh로 접속하면 다음과 같은 코드를 볼 수 있습니당.1234567891011121314151617#include #include int filter(char* cmd){ int r=0; r += strstr(cmd, "flag")!=0; r += strstr(cmd, "sh")!=0; r += strstr(cmd, "tmp")!=0; return r;}int main(int argc, char* argv[], char** envp){ putenv("PATH=/fuckyouverymuch"); if(filter(argv[1])) return 0; system( argv[1] ); return 0;} Colored by..

Write-up 2018.01.17

[angr tutorial] ais3_crackme writeup

angr 사용을 연습하도록 제공해주신 tutorial 문제 ais3_crackme에 관한 글입니다. 문제 링크는 다음과 같습니당.https://github.com/angr/angr-doc/tree/master/examples/ais3_crackme 문제를 받았으니, 한 번 실행시켜 봅시다.오잉? 뭔가를 입력하라고 하는 군요!그래서 한 번 줘봤습니다.사용자의 입력을 먼저 받아서 작동하는 프로그램인 겁니다. 그 입력 값이 뭔지를 찾아야겠습니다.IDA는 너무 치트인거 같아서 일단 objdump 로 까봤습니다. 아 학습했듯이 objdump -M intel -d [file] 이런 식으로 사용해주시면 되겠습니다.어라, 심볼들이 살아있을 줄 몰랐습니다. main 심볼이 지워지지 않았었네요. gdb 를 사용하면 더 편..

Write-up 2018.01.14

[SECCON 2017] Powerful_Shell writeup

문제를 실행하면 다음과 같은 실행화면을 볼 수 있습니다. 피아노 건반이 참 예쁘네요. 피아노 건반을 눌러보고 싶은 욕망대로 한 번 눌러 봅시다. 소리가 들리는 것을 보니 참 재밌습니다. 언젠가 이런 비프음을 이용해서 작곡을 해보고 싶은 마음이 듭니다. 아무튼 사용자의 입력을 받아 어쩌구 작동을 하므로 사용자의 입력이 플래그를 구하는데 있어서 꽤나 중요할 듯 싶습니다. 스크립트의 내용을 한 번 봅시다........... 정말 신박한 문제인 것 같습니다. 절로 일어나는 출제자에대한 존경심을 느끼며 세상이 넓음을 다시 한번 깨달아봅니다. 코드의 아래를 보니, 뭔가 스크립트를 추출하는 것을 알 수 있습니다. 위의 이러저러한 과정들을 통해 ECCON 이라는 변수에 어떤 스크립트를 만드는 것 같습니다. 한 번 추출..

Write-up 2018.01.14

[reversing.kr] ImagePrc writeup

프로그램을 실행하면 다음과 같은 화면을 볼 수 있습니다.프로그램을 대충 분석해보면, 다음 창에 사용자가 그림을 그리게하고, Check 버튼을 눌러 그림을 검증하는 루틴을 띄고 있는 듯 합니다. 아무 그림이나 입력한 결과, 틀렸다는 창을 볼 수 있었습니다.그렇다면, 우선 일차적인 목표를 Wrong을 출력하지 않는 것으로 잡아봅시다. 그러기 위해서 일단 Wrong 창을 뜨는 부분과 굉장히 유력하게 관련이 있는 찾아 브레이크 포인트를 걸어 확인해봅시다. 우선 0x00413CD 영역에 브레이크 포인트를 걸었습니다. 디버깅을 해본 결과, 다행히 0x004013CD 영역(제가 Wrong으로 표시한 영역)은 Wrong 창과 관련이 있었습니다. 우리의 목표는 Wrong이 아닌 다른 창 예를 들면 Correct 라던가 ..

Write-up 2018.01.09

[reversing.kr] Easy_CrackMe writeup

문제를 분석해보자면, 무언가를 입력하는 창이 뜨고, 그 창에 적당한 값을 입력해주면, 해당 값에 맞는 결과를 내뱉어주는 형식입니다.일단 아무 글자를 넣어본 결과 Incorrect 라는 창을 볼 수 있었습니다.그렇다면, 우리는 우선 저 Incorrect 라는 창을 보지 않을 수 있는 경로를 찾아봐야겠습니다.바이너리를 분석해서 Incorrect 경로와 관련이 있는 분기문 중에서도, 입력한 값과 연관이 있는 분기문들을 찾아보았습니다. 각각의 조건들에서,string[0] == 'E'string[4:] == "R3versing"string[2:4] == "5y"string[1] == 'a'들을 확인할 수 있었습니다.정리해보면, 다음과 같습니다. #string은 창에 입력한 문자열입니다. string[0] == '..

Write-up 2018.01.08

[CSAW 2017] SCV writeup

64bit ELF 파일과 해당 실행파일에서 사용되는 라이브러리가 주어졌다. 먼저 실행파일을 분석해보면, 선택지 리스트를 출력하고 선택된 작업을 수행하는, 반복 구조임을 알 수 있다. 보호 기법은 Canary와 NX(no execute)가 걸려있다. - 메모리 보호 기법 확인 IDA로 확인해보면, 역시 while 문으로 반복 구조를 가지고 있고, switch-case문으로 선택된 작업을수행하는 것을 알 수 있다. 사용되는 함수도 몇 개 없지만, 특히 눈에 띄는 함수는 read() 함수와 puts() 함수이다. read() 함수는 사용자의 입력이 이루어 질 수 있는 함수인 만큼 Buffer overflow와같은 취약점이 발생할 수 있고, puts() 함수는 널문자(‘\x00’)를 만나기 전까지의 값들을 출력..

Write-up 2017.12.27
반응형