• 카테고리

    질문 & 답변
  • 세부 분야

    보안

  • 해결 여부

    미해결

38829.py에 대한 질문입니다

21.07.25 18:30 작성 조회수 123

0

38829.py 실습 중인데 pattern_create를 통해서 얼마나 패턴을 만들었는지가 생략되어있어서 찾으려고 했고, 실제로 강의를 복습하면서 찾는 방법을 연습하는데 도움이 되었습니다. 하지만 강의에서는 pattern_offset이 32744431으로 rop_offset이 2915가 나오는데, 아무리 해보아도 다른 offset이 나옵니다. 4063이 계속해서 나오게 됩니다. 그리고 실제로 공격을 해보면 웹서버 프로그램이 계산기가 실행되지 않고 죽어버립니다. 아마도 offset을 잘못 썼기 때문이겠지요. 그래서 이 부분에 대해서 질문드립니다. 각각의 환경이 달라서 그렇게 출력이 되더라도 공격은 성공하는게 정상인데, 어떻게 해야할지 잘 모르겠습니다. 모든 강의를 계속해서 보고 있지만, 답답해서 질문드립니다.
질문사항
1. pattern_create를 이용하여 얼만큼의 패턴을 만들었는지.
2. attach 한후, shift+f9를 눌러 실행하고, 공격코드를 실행하고, shift+f9를 눌러 예외를 발생시키고 EIP를 확인한 결과 - 66463466 = 이 과정이 맞는지.
3. 나타난 결과인 66463466을 pattern_offset 한 결과 4063이 나오는데, 공격코드를 rop_offset = 4063을 하면 계산기 실행 없이 웹서버 프로그램이 죽어버립니다. 2915가 왜 안 나오는지.
질문 드립니다!

답변 1

답변을 작성해보세요.

0

gasbugs님의 프로필

gasbugs

2021.07.28

안녕하세요 강사 최일선입니다.

해당 실습은 제작 실습이 아니라 분석 실습이라서 코드 그대로를 가져다가 분석만 진행해 수정사항이 없습니다.

시간이 많이 지나서 오늘 아침에 윈10을 통해서 설치하고 실행해보니 여전히 계산기가 잘 실행되었습니다 ㅎㅎ

따라서 질문 주신 내용 1~3번에서 물어보신 것처럼 과정을 진행하실 필요가 없습니다.

" 4063이 계속해서 나오게 됩니다. "라고 하셨는데 이부분이 맞습니다. 소스코드를 살펴보면 쉘코드 앞부분에 A를 4059개 만들어서 보내는 4059에 SEH chain이 포함되니 4063이 됩니다.

오프셋이 정확하게 측정되지 않는 것은, 보내신 offset length가 craftedreq와 일치하거나 유사한지 확인이 필요한 것으로 보입니다.

추가 질문은 언제든지 남겨주시기 바랍니다! 감사합니다.

※ 추신: 강의 제작한지 수년이 지나다보니 어디에서 무슨 내용을 진행했는지 가물가물 합니다 ㅠ  "pattern_offset이 32744431으로 rop_offset이 2915가 나오는데"라고 하셨는데 해당 강의 영상 제목과 진행되는 분초를 알려주시면 보다 정확하게 확인할 수 있을 것 같습니다.

오래된 강의에 대한 질문이라 답변이 없으실수도 있겠다고 걱정했는데, 너무너무 감사합니다.^^

"A * 4059 + SEH Chain = 4063"에 대한 답변은 이해가 됩니다. 그렇다면 기존의 Exploit-DB에서 온 코드인 "rop_offset = 2455 "에서 제가 찾은 "rop_offset = 4063"으로 수정하면 계산기가 실행되야하는것 아닌가요??? 하지만 강의에서 설명하신(38829.py 강의 중, 22:30 ~ 23:30 정도입니다.) "!mona pattern_offset 32744431"해서 나온 숫자인 "2915"라는 숫자로 rop_offset을 설정하면 이상하게도 계산기가 실행됩니다.

결론적으로 강의에서 보여주신 "2915"라는 rop_offset은 현재 제 환경에서도 계산기를 실행하는데, 제가 직접 찾은 EIP에서(!mona pattern_offset 66463466 = 4063)는 계산기가 실행되지 않고 프로그램이 종료되어버립니다.

제가 이상하게 실습을 진행했는지 잘 모르겠습니다... 강의를 그대로 따라했는데, 결과가 잘 안 나타나네요;; 처음에는 패턴을 강의에서 설명 안해주셔서 정말 많이 패턴을 수정해보고 했습니다. (삽질을 좀 했습니다;; 앞의 강의를 순차적으로 여러번 보니까 이해가 되었습니다.)

강의 중 결론이 도출되는 부분은 22:25 ~ 23:44 + 27:00 ~ 27:10 정도인것 같습니다 ^^

그리고 답변 주신 것중에서 "오프셋이 정확하게 측정되지 않는 것은, 보내신 offset length가 craftedreq와 일치하거나 유사한지 확인이 필요한 것으로 보입니다." 라는 말씀을 조금 더 자세히 설명해주셨으면 합니다.. craftedreq란 어떤 의미인지도.. 아직 잘 모르겠습니다.

gasbugs님의 프로필

gasbugs

2021.08.09

안녕하세요 강사최일선입니다.

먼저 죄송의 말씀을 드립니다. 제가 아버지가 응급실에 가시고 돌아가시면서 지난 2주간 정말 정신이 없어서 이제서야 답변을 추가합니다.

윈도우에는 정말 다양한 구성요소가 합쳐져 하나의 프로그램을 구성하도록 돕고 있습니다.  따라서 다양한 변수가 존재할 수 있습니다.  가장 유력한 것은 페이로드 길이에 있다고 생각합니다. py 파일을 분석해보면 페이로드 전체 길이가 4258에 불과하다는 사실을 알 수 있습니다. 따라서 패턴을 생성하실 때에는 4258로 생성하시는 것이 재연하기에 가장 좋습니다.

만약 이보다 더 많이 만들 시에 우리가 의도한 예외가 아닌, 또 다른 예외처리로 인해서 다른 루틴으로 프로그램이 흘러갈 수 있습니다. 오프셋을 4258로 만들어주면  저나 또는 py 파일에서 주는 내용과 유사한 오프셋을 얻으실 수 있을 것 같습니다.

강의를 보시면서 불편하셨던 내용이 많으셨던 것 같습니다. 제가 강의한 생애 첫번째 내용이기 때문에 강의 스킬이 많이 부족했습니다. 물론 지금도 많이 부족하고 성장하고 있습니다 ^^; 그럼에도 불구하고 수많은 노력을 통해 수강생 분의 스킬로 만드셨다니 무한한 감사를 드립니다.

혹시 제가 답변이 늦으면 isc0304@naver.com으로 말씀을 주시면 보다 빠른 응답이 가능합니다.

감사합니다.

아닙니다! 바쁘시고 힘드실텐데 그 와중에도 기억 해주시고, 이렇게 답변해주신것 만으로도 너무너무 감사합니다.

다시 도전 해보고 모르는 부분이 생기면 이번에는 이메일로 질문드리겠습니다 ^^