리눅스

 3916, 1/196 회원가입  로그인  
   ewqqw
   setuid를 이용한 권한 상승

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


./rc 를 실행시키면서 이 프로그램의 fget 함수를 발동시킬 수 있는 방법이 없나요?

./rc 만 실행시키면 그냥 /tmp/RC만 사라지고 끝납니다만...

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

int main() {
        FILE *fp,*fo;
        char key[40];
        
        
        system("rm /tmp/RC");

        fo=fopen("/home/rc/flag","r");
        fp=fopen("/tmp/RC","w");
        
        if(!fo)
                printf("failed to open flag ask to admin\n");
        if(!fp)
                printf("failed to open RC file ask to admin\n");

        fgets(key,40,fo);
        fprintf(fp,"%s\n",key);

        fclose(fp);
        fclose(fo);
        
        system("rm /tmp/RC");

        return 0;
}

  Hit : 4034     Date : 2017/03/29 02:14



    
해쿨러 fgets의 세번째인자가 fp인데 fp에 stdin이 아니라 fopen("flag")가 들어갔죠
플래그파일을 만들고 키를 쓰고 지우기를 반복하는겁니다
플래그가 /home/rc/flag에 원본이 있고 이걸 계속 /tmp/RC에 쓰고 삭제하고 쓰고 삭제하고 하는거죠
전형적인 레이스컨디션 문제인데
while [ 1 ] ; do ./rc; done 을 해놓으시고
하나에서는
while [ 1 ] ; do cat /tmp/RC; done 을 해놓으시면 두번째 터미널에서 플래그가 나옵니다
2017/03/29  
ewqqw 두 명령문의 차이를 파고들어서 setuid를 얻는 것이군요.... 감사합니다 2017/03/29