본문 바로가기

분류 전체보기

Python Challenge level 9 Python Challenge level 92016.12.28.우선 문제의 주석부분을 보면 좌표들이 있다.앞 문제에 벌의 윤곽을 나타낸 것처럼 first와 second를 더해서 좌표로 선잇기를 한 다음 그림을 나타내어야 하는 거 같다. 문제 이름도 connect the dots인 걸 보면.그래서 주석에 이전 문제의 풀이를 보기 위해선 주어진 사이트로 가라고 적혀있는 것 같다.그래서 사이트로 가보면 링크와 연결된 문장이 뜬다. 여기서 Put off by the bee부분을 보면 윤곽 그리는 부분이 나온다.우선 이걸 보아 8번 문제에 있던 coords에 숫자들은 차례대로 x,y,x,y,...을 나타낸 것이다. 그러니 이번에 주어진 first 또한 x,y,x,y,...순서일 것이고 second도 마찬가지일 것.. 더보기
2016 Christmas CTF [misc-50] who is santa? 2016 Christmas CTF [미스크-50] who is santa? 2016.12.26. 문제 속에는 주소가 있다. 이 주소로 들어가면 aaaaa.zip파일을 받을 수 있다. 파일을 열면 mac사용자를 위한 파일과 crypto라는 이름의 모나리자 사진이 있다. 우선 그냥 보았을 땐 원래 모나리자 그림과 달라 보이는 점도 없고 해서 헥스 디렉터(HxD)로 까보았다. 처음엔 시작하는 부분을 보았다가 잘못된 부분도 없고 끝부분에도 잘못된 것이 없어서 위로 올라가며 보고있었다. 그러다가 또다른 %PNG가 시작되는 부분을 찾았다. 저기부터 끝까지 복사한 뒤 또다른 PNG파일로 생성하여 보았더니 이렇게 떴다. 사실 CTF하는 중에는 =+A가 무엇인지 몰라서 flag를 제출하지 못했다. 논리연산자라 하기엔 +.. 더보기
Python Challenge level 8 Python Challenge level 8 2016.12.26. 우선 처음에 문제 접속하면 이렇게 뜬다. 그래서 사진 속 벌 중에 검은색으로 빗겨 나온 부분이 있길 레 눌러보면 벌이 저렇게 윤곽이 잡히고 이름과 비밀번호를 입력하는 창이 뜬다. 일단 페이지 소스코드를 보았다. 저기 coords는 벌의 윤곽 선을 잡기 위해 있는 좌표들이라고 한다. un이 사용자 이름이고 pw가 비밀번호인 것 같다. un과 pw앞에 있는 BZh91AY&SY는 bz2 파일의 헤더를 나타내는 것이라고 한다.bz2 모듈을 이용하면 사용자 이름과 비밀번호를 구할 수 있을 것이다. 그래서 코드를 이렇게 짜고 실행시켰는데 오류가 뜬다. ...^-^ 나중에 안 건데 파이썬 버전 차이 때문에 오류가 뜬거 같다. 그래서 print 부분을 .. 더보기
[reversing.kr] Easy Crack reversing.kr Easy Crack 2016.12.23. Easy_CrackMe.exe을 실행시켜보았다. 이렇게 무언 갈 입력받도록 되어있는데 입력한 값이 틀리면 이렇게 창이 뜬다. 이제 IDA로 까서 맞추었을 때 실행되는 곳을 찾아보았다. 이 부분에 esp+68h+String이 45h 즉, E와 같고 또 다른 조건들을 충족시켜주면 Congratulation!!이 뜨는 것 같다. 더 앞의 코드를 보면 esp+68h+var_63이 a와 같아야하고 그다음 5y, R3versing이 차례대로 온다.( 68h, 6Ch, 70h ) F5를 눌러 더 보기 쉽게 살펴보았다. 우선 ebp에서부터 위치를 기반으로 String, v3, v4, v5, v6이 차례대로 온다. Ea5yR3versing 더보기
Python Challenge level 7 Python challenge level 7 2016.12.23. 처음에 접속했을 때 그냥 이렇게만 되어있고 뭐 소스코드도 정말 저게 끝이고 그래서 그냥 가만히 보고만 있었다. 그러다 그냥 쿠키를 확인해봤는데 ...?뭐 어쩌라는 걸까. 다시 고이 접고 생각을 하다 it’s in the air에서 it을 찾으라는 건가 싶어서 설마하면서 oxygen을 입력해보았다. ...^^나만 oxygen.html 찾는 데만 10분 넘게 걸렸나 싶어 다른 사람들 풀이를 보았는데 나만 그런 것 같다. 이런 형식의 사진은 CTF에서도 종종 접하는 사진이다. 아마 저기 띠 부분 RGB값을 이용해 아스키코드로 바꿔서 어찌저찌 하다보면 글자가 나오겠지 우선 사진을 받고 코드를 짜자. Image 모듈을 사용하면 되는데 나는 우분투에.. 더보기
FTZ level 19 FTZ level 19 hint 갑자기 너무 간단해져서 당황스럽지만 해오던 방법대로 풀어보자 ebp-40부터 buf를 받는 것을 확인할 수 있다. 환경변수를 만들고 그 주소를 확인한다. 근데 id가 안바뀐다. 찾아보니 setreuid(,)이 빠져 이 부분이 추가된 쉘코드가 필요하다고 한다. 그렇다면 일단 level20의 uid를 찾아 쉘코드를 만든다. uid를 설정하는 코드 컴파일 시 –static –g옵션을 주어 컴파일 한다. 위 코드를 gdb로 까면 setreuid함수를 불러 인자를 넣는 부분이 있다. 그리고 disas setreuid를 해서 필요한 부분을 본다. 이 두 부분을 토대로 어셈블리 코드를 작성하면 mov ebx, 0xc1c mov ecx, 0xc1c mov eax, 0x46 int 0x8.. 더보기
FTZ level 18 FTZ level 18 hint while문 안의 내용을 무한반복한다. switch문에서 string에 데이터가 저장되면서 count값이 변하는데 100이상이면 what are you trying to do?를출력 check에 0xdeadbeef가 들어있으면 shellout함수 실행 FD_ZERO(&fds);부터 if(FD_ISSET(fileno(stdin),&fds))까지 키보드로 입력을 받아 입력버퍼에 저장하는 과정 read(fileno(stdin),&x,1); 입력버퍼에서 1byte를 읽어 &x에 저장하고 데이터에서 1byte만큼 옮겨 간다. while문 반복이 되면서 다음 1byte를 입력버퍼에서 읽어 &x에 저장하여 조건에 맞는 switch문이 실행 x값이 0x08 이면 count 1감소 우선 .. 더보기
FTZ level 17 FTZ level 17 hint 우선 gdb로 main함수를 까보자 우선 buf와 함수를 받는 부분까지의 크기는 전 문제들과 같이 40byte이다. 환경변수로 쉘코드를 짜서 printit함수를 불러오는 부분에 환경변수 주소를 넣는다. 앞문제와 달리 shell함수가 없으므로 직접 환경변수를 이용해 만들어 주는 것이다. hack이란 환경변수를 만들고 환경변수의 주소를 확인하면 40byte를 채우고 환경변수 주소로 덮는다. 더보기
FTZ level 16 FTZ level 16 hint call함수를 부르는 주소에 printit함수 주소가 들어가 “Hello there!”이 출력될 뿐 쉘코드를 딸 수 있는 shell함수는 실행되지 않는다. fgets함수가 BOF를 일으킬 수 있는 함수이므로 buf에 bof를 일으켜 call함수를 부르는 주소에 shell함수 주소로 덮는다. gdb를 통해 main함수를 보면 ebp-16에 printit함수 즉 call할 함수의 주소를 저장하고 있다. 그리고 ebp-56에 fgets함수를 부르므로 buf가 들어가기 시작한다. 40byte만큼을 채우고 shell함수의 주소로 덮자. shell함수의 주소는 0x080484d0이다. 더보기
FTZ level 15 FTZ level 15 hint 포인터 변수를 부른다. check주소에 저장된 값이 0xdeadbeef여야 하므로 check 주소를 찾아야한다. gdb로 확인해도 이전 문제와 비슷해 보이지만 ebp-16의 주소의 값이 0xdeadbeef와 같은지 확인하고 있다. 0xdeadbeef의 주소는 0x80484b2 더보기