본문 바로가기

CodeGate 2015 Quals - Sokoban CodeGate 2015 Quals - Pwnable 1000pt, sokoban 로컬 환경 구성 -> Ubuntu Linux 14.04 x86_64 ( 라이브러리 : libc-2.19.so ) 코드게이트 예선 때 못 푼 문제였는데, 롸업이 올라왔길래 정독해보고 다시 풀어보았다. 바이너리로 주어진 파일을 실행시켜보니 위와 같이 "[]"를 골인 지점으로 옮기는 게임 형식이다.소스 분석 중, 가장 먼저 눈에 띈 부분은 아래 그림과 같이 stage 6 에서 게임 모드를 선택하는 부분이 있다. 랜덤-무한 모드를 선택할 경우, 낮은 확률로 아래와 같이 히든 맵(공간이 막혀있지 않은 맵)이 나온다.코드게이트 때는 저 부분도 발견하지 못했었는데, 롸업을 보고 발견하니 허탈했다. 이걸 발견했어도 풀진 못했을 것 같긴 .. 더보기
Code Engn - Basic 10 RCE UPX 패킹된건줄 알고 많이 헤맸다.. 디버깅보다 언패킹이 어려운 느낌 더보기
pwnable.kr :: dos4fun_444pt by ORANG. 보호되어 있는 글입니다. 더보기
Code Engn - Basic 09 RCE ( 출처 : http://muhan56.tistory.com/80 ) 더보기
Code Engn - Basic 08 RCE UPX 패킹의 특징 -> pushad ~ popad로 EP코드가 둘러쌓여 있고, OEP 코드는 popad 이후 점프하는 주소가 된다. 더보기
Code Engn - Basic 07 RCE 처음에는 문제 지문에 나온 내용이 무슨 말인지 몰랐었는데, GetVolumeInformation() 함수에 대한 내용을 찾아보니 대충 알 것 같다.GetVolumeInformation()을 통해서 2번째 인자로 전달되는 0x40225C(여기에 하드디스크 이름이 저장된다.)가아래 명령어들이 실행되면서 문자열이 추가로 덧붙여지거나, 수정된다 -> 이게 시리얼이 됨. 먼저 C드라이브 이름을 바꿔주고, 문자열 비교 직전 시리얼의 내용을 확인해보면.. 그리고 해당 시리얼을 넣어보면 성공 더보기
Code Engn - Basic 06 RCE UPX로 패킹되어 있다.UPX 특성상 EP코드는 pushad ~ popad로 이루어져 있는데OEP 코드는 popad 이후에 나타나는 JMP 주소가 되므로 먼저 OEP 코드를 찾았다. 이전에 사용했던 툴을 이용해 언패킹한후 실행해보니 아래와 같은 문자열이 나타났다. 문자열이 호출되는 시점을 찾고, 평문으로 들어간 시리얼을 찾았다. 더보기
Code Engn - Basic 05 RCE 이뮤니티 디버거로 뜯어보니 제대로 안보이길래 헥스에디터로 열어보았다.아래와 같이 UPX로 패킹되어있다는 메세지를 보고 unpacking 함. (http://bbolmin.tistory.com/47 참고) "Wrong Serial" 문자열이 호출되는 시점을 찾아보니 Serial 정보가 평문으로 들어있었다. 입력해보니 정답 더보기
Code Engn - Basic 04 RCE 실행해보니 계속해서 "디버깅 당함" 이라고 출력되었다. 이뮤니티 디버거를 통해서 확인하다보니 딱 봐도 의심스러운 "IsDebuggerPresent"라는 이름의 함수를 발견했다. 아래에 호출되는 0x408190은 문자열 출력부분이고, 0x431024와 0x43101c는 디버깅 여부에 대한 문자열인 듯 하다. JE를 JMP로 바꿔서 우회하였다. (디버깅 중일 때, IsDebuggerPresent()의 반환값은 1 이다.) 더보기
Code Engn - Basic 03 RCE 실행해보니 저런 오류가 나길래 MSVBVM50.DLL을 따로 설치했다. 아무 값이나 넣어보니 틀렸다는 문자열이 나타났길래 이뮤니티 디버거에서 문자열을 찾았다. 에러 문자열이 호출되는 시점을 찾아보니 아래와 같았다. 위아래로 좀더 살펴보니 Key값으로 보이는 문자열과, 아마도 문자열을 비교하는 함수..를 호출하는 부분이 존재했다.확인해보니 맞았다. 더보기