윈도우충 콘치가 에러를 만났을 때(feat. SEH) – 번외 : 왕콘치 의식의 흐름

By conchi | December 21, 2016

왕콘치 의식의 흐름


한창 콘치선원이 BrokenWindow를 풀 때, 결과가 없으면 과정이라도 좀 적어둬봐라 어디서 실수 했는지 복기해보게- 라고 했더니 이런 의식의 흐름을 남겨두었습니다.

도대체 짤은 어디서 구하는건지 모르겠습니다. 짤공장인가…

인턴왕 혼자 보기 아까워 살포시 공개해봅니다.



부제 : brokenwindow풀다가 borken되버린 물고기

안녕!
나는 물꼬기얌!
내 이론은 완벽한데 쉘코드가 돌지를 않아서 내가 돌아버릴것 같아.
미래의 물꼬기야 잘 지내니?
이 글을 읽고 있는 미래의 나는 혹시 이 문제를 풀었니? ㅎㅎ…
뻐킹..




“못 풀어서 소스 합니다 디오니 죄송님”


“너 때문에 흥이 다 깨져버렸으니 책임져”


“네! 알겠습니다!”

그럼 그 동안 삽질 한 거라도 보여드리지요!




nc….AIVA… BIVA… CIVA…(욕 아님)



아직도 내가 이걸 왜 풀겠다고 했는지 후회만 남는다.
첫 분석이 완료되고 임의의 데이터를 300개 넘겨주면 내가 필요한 주소가 릭이 된다는 걸 확인했다.
릭을 하기 위해 데이터들을 넘겨주기로 했다.


이게 리모트 문제였기 때문에 설레는 마음으로 윈도우에서 nc를 깔고 리모트로 접속했다.


send(“A”*300)… send(500)…



하지만 내게 돌아온 건 A가 200개, 100개로 지 마음대로 나누어져 저장되어버린 처참한 결과뿐이었다.
아니 도대체 이게 왜 이러는 거지??????????
바이너리를 로컬에서 돌렸을 땐 잘만 들어갔는데!!!!
이거 때문에 꼬박 밤을 샜다.
아니 사실 그 전날부터 계속 이러고 있었으니 1박2일을 이거 때문에 삽질했군 ㅋ…



오죽 답답했으면 페북에 이딴식으로 도움 요청 글까지 썼다 ㅠㅠㅠㅠ..

이 글을 본 직원들이 우글우글 내 자리로 몰려들었고
이건 내 잘못이 아니라 nc가 병*이기 때문이란 걸 보여주기 위해 많은 사람들 앞에서 시연을 해보았다.
역시나..
nc가 내게 던진 똥을 보고는 모두가 보고 충격에 빠졌다.


” 아니 이게 무슨 일이지?”

” nc에 문자열 길이 제한이 있었나요? ”

” 잘 안 써봐서 모르겠어요 ”

” 웅성웅성”


뭔가.. 내 잘못이 아니란 걸 모두에게 알리고 싶었던 것 같다.
이 족같은 nc에서 단 한순간이라도 벗어나고 싶었다.
덕분에 nc로는 데이터를 300개 send하면 200개까지 밖에 안 날아간다는 걸 깨달았다.
두 번 입력을 받는 부분이 나와야 하는데 300개를 보내면 200개, 100개로 지 맘대로 입력 되서 들어간다니..
이 얼마나 획기적인 생각인가 시방탱..

이렇게 리모트가 안되니 이 문제는 던져버려야지! 라는 생각을 안 했다면 그건 개구라겠찌..
사실 머릿속은 ㅎㅎ 리모트도 안되는거 버려버려 ㅎㅎ 라는 생각으로 가득했다.

그런데 도움안되는 오리가 어 이거 nc말고 하는 방법 있을 텐데 기다려봐여
이러고는 어디론가 연락하더니 AppJailLauncher 라는게 있다고 요즘은 윈도우 문제 나오면 다 이걸로 환경 셋팅한다고 입사 하고 나서 처음 보는 친절함으로 내게 알려줬다.
ㅎㅎ…
……C…. 아니 P…PIPA…



눈물나게 고마워서 할말을 잃었다. 연휴라… 부산 가야 하는데 “누나 이거 해보고 가요!” 라며 막말을 내뱉었다. 오리야 군대 언제가니…




AppJailLauncher

오리가 알려준 대로 AppJailLauncher를 설치하기로 했다.
오오 깃헙에 코드가 있다능!!
코드를 내려 받았는데 ㅎㅎ.. exe가 아니라 sln이다.
ㅎㅎ…



더럽게 디테일 하게 환경을 제시하는걸 보니
저기서 실행 안 하면 안 될 것만 같은 느낌적인 느낌이 든다.
내 리얼머신은 window10이지만 하지도 않는 분석은 환경이 중요하다며
입사하자마자 각 버전별로 깔아둔 vm이미지의 덕을 보게 생겼다.



ㅎㅎ 그나저나 요즘 세상에 vs2013은 어디서 찾냐… 눈앞이 컴컴해졌다.
결국 vs는 구경도 못해보고 부산에 내려갔다.
엄마아빠는 나보고 내려오라고 닦달해놓고 막상 가니 집에 밥도 없어서 좀 서러웠지만
그 서러움을 AppJailLauncher를 사용하기 위한 환경을 셋팅하며 풀기로 했다.

사용방법은 다음과 같다.


1. gitgub에서 AppJailLauncher 다운받기.

https://github.com/trailofbits/AppJailLauncher


2. 알집을 풀면 AppJailLauncher.sln 라는 프로젝트 파일이 기다리고 있는데 이걸 vs2013으로 열어서 컴파일해주면 된다.
  • vs2013은 구하기가 힘드니 커뮤니티 버전을 잘 찾아서 쓰도록 하자.(혹시나 하는 마음에 2015랑 2010으로 컴파일 해봤는데 안됨ㅋ 개 철저함)


3. 컴파일하고 나면 디버깅폴더 안에 들어있음. brokenwindow.exe도 같은 폴더 안에 넣어주자.
  • 왜냐면 경로를 설정하기 너무 귀찮기 때문.


4. AppJailLauncher를 실행하고(cmd창으로 해야 함 더블클릭ㄴㄴ해) /port:임의의 번호 brokenwindow.exe해주면 해당 포트번호로 brokenwindow.exe가 돌아가고 있음을 확인할 수 있다.


영어를 너무나도 싫어하는 사람이라 영어로 된 설명을 안 봐서
내 마음대로 찾다 보니 찾음 ㅋㅋㅋㅋㅋ
ㄹㅇ나는 아무래도 전생에 조선 말 위정척사파가 아니었나 싶다.
서양 문물을 별로 안 좋아해서 영어를 별로 안 좋아하는 거임 진짜임

뭐 무튼 이렇게 포트를 열어주고 나니 send하면 넘나 잘 날아갑니다.
하아…





3. just-in-time-debugging

(뭔가 노래제목 같은데 아님) 쉘코드를 마구 잡아넣고 파이썬으로 익스 코드를 날리면 자꾸 에러가 뿜빰! 하고 뜬다. -ㅅ-? 원래 제대로 SEH핸들을 덮으면 이런 게 안 나와야 하는데?…



심지어 SEH코드도 제대로 잘 덮인다.
(참고로 이건 올리디버거로 해당 바이너리를 열어서 값을 직접 박아줬다.
파이썬 스크립트로 넘어가는 값들을 모두 print해서 그대로 넘겨줬음)
내가 원하는 주소로 릭도 잘되고, 계산도 용케 잘해서 잘 넘어간다.
그리고 저런 주소로 가면 쉘코드도 잘 들어있다.
뭐가 문제지

그런데 이게 겁나 짜증나는 게


  1. 익스코드 실행(brokenwindow.exe에 대한)
  2. 에러 터짐
  3. 어디서 터졌는지는 모름 ‘ㅅ’..뀨
  4. 다시 올리디버거로 brokenwindow.exe를 실행해서 값들을 넣어줌
  5. SEH Handler존나 잘 바뀌어져 있음
  6. 시발어쩌라고


의 반복이었다.
리눅스는 에러 터지면 core dump란걸 던져줘서 에러가 나면 분석하기가 편했는데
얘는 뭐 자비도 없고 ㅂㄷㅂㄷ…존나 ㅂㄷㅂㄷ…
처음으로 윈도우 바이너리를 보고 있는 내 자신에게 극혐하는 시간을 가지게 되었다.



점점 얼굴도 모르는 출제자에 대한 분노가 야금야금 쌓이기 시작했다.

점점 지쳐갈 때쯤 하루는 ㄹㅇ 윈도우충에게
와타시가 요즘 윈도우 바이너리를 보고 있는데…
디버그 하라고 창이 뜨는데 여기서 어떻게 해야 할지 모르겠다며.. 하소연을 했다.
(우리는 만나면 이런 이야기밖에 안 한다. 최근 보안 이슈나 게임, 컴퓨터에 관한 이야기가 주를 이룸.
데이트 맞음 컴퓨터 관련 단체 정모 아님;; )

올리디버거 없냐며 just-in-time-debugging 을 해보란다.
그리고 와타시는 신세계를 맞보게 되었다.
에러가 나면 올리디버거가 열리면서 에러가 난 부분에 멈춰있는 신세계를 경험하게 된다.



헤헤 넘나 행복한 것!
이제 어디서 문제가 생겼는지 확인가능!!!



오 저곳이란 말이지



오 잘 덮여있군 합격



ㅇㅇ 우선은 테스트를 위해 쉘코드 대신 A를 넣어두었다.
그러니 여기 A가 있는 게 맞지 합격



음.. 근데 EIP가 왜 이러지?
누구세요?
… ….? 꾸쥬워마이걸~~~




4. 그 뒤…★

내 삶은 왜 이렇게 방구 같을까 ㅎㅎ…
혼자 있고 싶으니 모두 나가줬으면 좋겠다…
라고 생각하고 있는데
뜻밖의 인물들이 등장해서 내게 정보를 알려주고 갔다.


레드후드님 : 야 이거 환경이 모냐
브로큰 되기 직전의 물고기 : 아… AppJailLauncher때문에여….
레드후드님 : 음… 이거 윈8아닐꺼같은데
브로큰된 물고기 : (동공지진)


음…
그들이 떠나고 나서 ㅎㅎ…
그냥 안 하기로 했다.
꺄륵!



하지만 와타시는 이 문제를 버린 게 아니다
ㅜㅜㅜㅜㅜ 언젠가는… 다시 풀고 말 거야….!!!! ㅠㅠㅠㅠㅠㅠㅠㅠ
두고 봐 씩씩 ㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠ
ㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠ
엉엉 ㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠ

<극 사실주의 윈도우 포너블 점령기 끝>
(정신이 박살난 상태)
뿅!




하지만 난 문제를 정ㅋ벅ㅋ했다!!! [뭐가 문제였을까?]

  • 실제 익스는 windows 7환경에서 진행되었다.
  • 그리고 그 당시 만들었던 익스코드를 대폭 수정하였다.
  • 아무래도 당시의 내 뇌와 익스코드가 문제였을 확률이 한 90%정도..

꺄륵!!!!
그래도 덕분에 여러가지 재밌는 사실들과 재밌는 삽질을 했으니!
만ㅋ족ㅋ 은무슨 ㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜ 자괴감들고 괴로ㅇ….. 주륵…

comments powered by Disqus