레벨 해킹

 2839, 1/142 회원가입  로그인  
   adiangrowif
   level12를 풀다가 쉘코드 구성에 대해 궁금증이 생겨서 질문올립니다.

http://www.hackerschool.org/HS_Boards/zboard.php?AllArticle=true&no=3223 [복사]


nop 썰매 타는 방식으로 풀고 있는데 아무리 해도 안풀려서 결국엔 풀이를 보고야 말았습니다.
(pern -e 'print ""';cat) ;cat의 용도를 모르는 것도 문제였습니다만,

쉘코드나 ret 주소는 정확하게 찾았는데도 불구하고 답이 나오질 않더군요.
다른 분의 풀이와의 차이점을 살펴보니

(perl -e 'print "\x90"x??, "쉘코드", "\x90"x??, "ret"';cat)|./attackme 에서

\x90의 배치 개수에 차이가 났었습니다. 저는
\x90, 쉘코드, ret 로 했었는데 풀이에서는
\x90, 쉘코드, \x90, ret 로 풀더군요.
쉘코드와 ret 사이에 일정 크기의 공간을 확보해야지만, 정상적으로 풀렸습니다.
얼마의 공간이 필요한지 시험해본 결과로는 쉘코드, ret 사이에 최소 16바이트가 필요했는데,
이것에 어떤 의미가 있는지는 이해가 가질 않습니다. 도와주세요!

  Hit : 4384     Date : 2011/07/18 05:07



    
rlatkddusdl 전텔넷에서 level2 가는법을 몰르겟든데요;어캐 level2되셧는지...

level1 시험도 어케보는지몰르겟구 ㅜ
2011/07/18  
별빛을담아 아 그 방법 혹시 제가 전에 다른분한테 댓글 달았던 거 아닌가요? ㅋ

다시 한번 설명드리죠.
대부분 사람들의 문제풀이가 nop+쉘코드 형식으로 성공하셨는데
저는 아무리 따라해도 되지않더군요
혹시나 하고 nop+쉘코드+nop 형식으로 입력했더니 성공했구요

저도 확실하게 왜 성공했는지는 모르지만...;;
아마도 컴퓨터가 착각을 일으킨게 아닐까 하는 생각이 듭니다.
만약 268+4byte를 채워야 한다면...

NOP 243byte+쉘코드 25byte + 주소값 4byte = 268+4byte....
하지만 실패, 제 멋대로 생각한 원인은
컴퓨터가 쉘코드 25byte + 주소값 4byte가 아닌 쉘코드 29byte로 인식했다고 생각했죠.
그래서 생각해 낸게...

NOP 143byte + 쉘코드 25byte + NOP 100byte + 주소값 4byte = 268+4byte
이번엔 성공! 이로써 제가 생각한 원인이 맞다고 생각했습니다.


rlatkddusdl// level 2가 아니라 level 12에요 ㅋㅋ
2011/07/19  
adiangrowif 왜 16바이트인지 쉘코드와 ret를 구분할 필요가 있는건지 궁금합니다.
뭣보다도 11레벨문제는 x90, 쉘코드, ret 로 풀 수 있었던 걸로 보아 실행환경의 특성(더미 8바이트 넣는다거나 하는)은 아닌 것 같은데요 ㅜㅜ
2011/07/19  
adiangrowif 아... 바로 밑에 "LOB 질문]] 왜! 16Byte이여야 하는가." 라는 게시글에 같은 질문이 올라왔고, 답변도 있었네요 ㅜㅜ 2011/07/20