2009-09-28 7 views
0

취약한 코드를 '중단'해야하는 과제가 있습니다. 미리보기 : 홈 디렉토리에cygwin에서 .exe 파일을 실행하는 printf

  • 실행 copypasta : 결국

    int main(int argc, char **argv) 
    { 
    
    /*...*/ 
    
        while(i < argc-1) 
        { 
        switch(argv[i][0]-48) 
        { 
         case 1: 
         SmashHeap(argc,argv); 
        break; 
    /*...*/ 
         case 8: 
         PrintfVulnerability(argv[++i]); 
        break; 
        default: 
         printf("%s is not recognized by this program",argv[i++]); 
    /*...*/ 
        } 
        i++; 
        } 
        return (1); 
    } 
    
    void PrintfVulnerability(char *F) 
    { 
        printf(F); 
    } 
    

    , 나는 내가 ... 내 솔루션을 가난한 등급을 얻을 수 있습니다 두려워 너무 놀라 울 정도로 간단했다 발견 ... 나는

$ ./VulnerableCode 8 `freecell.exe`

  • freecell.exe 휙을 사용! 나는 프리셀을하고있어. 왜이게 효과가 있니?

    +0

    sry, 형식이 내 명령 줄에서 백틱을 먹지 않았다는 것을 알지 못했습니다.[backtick]을 적절한 기호로 바꾸십시오. – rusl

    답변

    3

    편집 : 아, 편집을 참조하십시오. 불행히도 그 backticks은 bash (cygwin의 기본 셸) 백틱에서 셸 명령을 사용하여 문자열을 셸 명령으로 실행하도록 명령합니다. 그래서 당신의 모든 명령은 쉘에게 프리셀을 실행하라고 명령합니다. 따옴표없이 freecell.exe를 전달하면 실제로 문자열을 프로그램에 전달하게됩니다. 당신이 경우에 실행할 수 있습니다 악용 그것은 당신에게 8

    올드 대답을의 아이디어를 줄 수도로

    비록, 당신은 내가 아래 단락에 게시 된 링크를 살펴해야합니다 나 ' 당신의 커맨드 라인이 어떻게 freecell.exe가 시작될 수 있는지를 보지 못했기 때문에 윈도우 아키텍쳐에 대해 더 잘 알고있는 누군가에게 좀 더 깊이있는 대답을 남겨야합니다. (btw, "freecell.exe"도 콘솔에 인쇄됩니까?). 그러나 높은 수준의 경우 8은 Format string attacks에 취약합니다. print는 첫 번째 인수가 {인수가 있는지 여부, 인수의 유형}를 지정하는 형식 문자열임을 가정합니다. 이것은 패스 한 버퍼에 따라 다양한 익스플로잇에서 사용될 수 있습니다. 다시 말하지만, 귀하의 경우에 프로세스가 시작되는 방법을 알 수는 없습니다.

    +0

    명령 행에서 편집 된 서식을 사용하십시오. 위의 주석을 참조하십시오. – rusl

    +0

    그래, 그럼에도 관련해서는 아직 할 일이 남아 있습니다. 이를 악용 할 수있는 방법을 찾지 못하면 프로그램에서 다른 잠재적 인 악용 사례를 게시하는 것을 고려해보십시오. 그렇기 때문에 누군가가 SO를 올바른 방향으로 움직일 수 있습니다. – Falaina

    +0

    welll nutbunnies. 다시 드로잉 보드에. 도와 주셔서 감사합니다! – rusl

    0

    cygwin 또는 다른 bash 변형을 사용하고 있습니까? 명령의 시작에서 $ bash에 보이는하고 명령 때문에

    내가 물어

    ./VulnerableCode 8 역 따옴표] freecell.exe [백틱]

    은과 bash는 구문처럼 보이는 백틱.

    그렇다면 쉽게 설명 할 수 있습니다. bash는 백틱 사이의 명령을 별도의 명령으로 실행하고 결과 stdout 텍스트를 VulnerableCode 명령에 전달할 명령에 넣습니다.

    코드에는 "freecell.exe"라는 텍스트가 출력되지 않습니다. 따라서, 여러분이 제공 한 코드에 취약점이있는 것은 아닙니다. bash에서 명령을 함께 묶는 방법 일뿐입니다.

    +0

    oops, 광산을 보내기 전에 James의 의견을 보지 못했습니다. 속임수를 유감스럽게 생각합니다. – pxb

    0

    유닉스/리눅스 환경에서 백틱은 백틱에서 명령을 실행하고 앞의 명령에 명령의 출력을 제공하는 데 사용됩니다. 따라서 ls [backtick]echo .[backtick]은 현재 디렉토리를 ls 것입니다.

    cygwin에서 명령이 freecell.exe를 실행하여 freecell의 출력을 VulnerableCode에 제공하기 위해 freecell이 끝나기를 기다리고있었습니다.

    관련 문제