[LOB] nightmare -> xavious

Posted by dw0rdptr
2015. 6. 27. 21:31 System/LOB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#include <stdio.h>
#include <stdlib.h>
#include <dumpcode.h>
 
main()
{
    char buffer[40];
    char *ret_addr;
 
    // overflow!
    fgets(buffer, 256, stdin);
    printf("%s\n", buffer);
 
    if(*(buffer+47== '\xbf')
    {
        printf("stack retbayed you!\n");
        exit(0);
    }
 
    if(*(buffer+47== '\x08')
        {
                printf("binary image retbayed you, too!!\n");
                exit(0);
        }
 
    // check if the ret_addr is library function or not
    memcpy(&ret_addr, buffer+444);
    while(memcmp(ret_addr, "\x90\x90"2!= 0)    // end point of function
    {
        if(*ret_addr == '\xc9'){        // leave
            if(*(ret_addr+1== '\xc3'){    // ret
                printf("You cannot use library function!\n");
                exit(0);
            }
        }
        ret_addr++
    }
 
        // stack destroyer
        memset(buffer, 044);
    memset(buffer+4800xbfffffff - (int)(buffer+48));
 
    // LD_* eraser
    // 40 : extra space for memset function
    memset(buffer-300003000-40);
}
cs


쓸수 있는게 별로없다.

스택사용불가, leave ret사용불가, 라이브러리사용불가, LD_PRELOAD 사용불가

뭘쓰라는거야



stdin 임시입력버퍼 찾으면됨


strace ./xavius로 찾아보면 mmap으로 메모리 공간 확보하고 read()로 입력받는다
-> fets()는 read()를 사용한다.
-> 확보된 메모리공간 찾아가보면 입력받은 string이 남아있을 것.



페이로드와 Password


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

[LOB] succubus -> nightmare  (0) 2015.06.01
[LOB] zombie_assassin -> succubus  (0) 2015.04.30
[LOB] assassin -> zombie_assassin  (0) 2015.04.18
[LOB] giant -> assassin  (0) 2015.04.14
[LOB] bugbear -> giant  (2) 2015.04.14

쿼드콥터 제작기 02 - 아두이노IDE, 모터구동테스트

Posted by dw0rdptr
2015. 6. 27. 04:24 IoT/QuadCopter

하비킹에서 산 파워분배기에 배터리를 연결했더니 타는냄새가 나서 얼른 이베이에서 새 파워분배기를 구매했다. 다행히 늦지 않게 와서 금방 납땜하고 다음단계로 넘어갈 수 있었음


일단 아두이노 우노를 당분간 쓸 예정..

아두이노에 프로그래밍을 하려면 아두이노 통합개발환경(IDE)가 필요하다 아두이노 공식 홈페이지에 있으니 다운받자

스케치라는 개발 언어를 사용하는데 c와 많이 다르지 않다


모터가 잘 돌아가는지 구동테스트부터 하자


모터 구동코드


아두이노에 업로드 후 PWM 9번과 GND에 각각 ESC 핀을 연결

*프로펠러 장착하지 말고 테스트합시다




모터구동 테스트



아 기말고사가 코앞인데 이걸 놓을수가없다ㅠㅠ

[LOB] succubus -> nightmare

Posted by dw0rdptr
2015. 6. 1. 21:44 System/LOB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
/*
        The Lord of the BOF : The Fellowship of the BOF
        - nightmare
        - PLT
*/
 
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <dumpcode.h>
 
main(int argc, char *argv[])
{
    char buffer[40];
    char *addr;
 
    if(argc < 2){
        printf("argv error\n");
        exit(0);
    }
 
    // check address
    addr = (char *)&strcpy;
    if(memcmp(argv[1]+44, &addr, 4!= 0){
           printf("You must fall in love with strcpy()\n");
           exit(0);
    }
 
    // overflow!
   strcpy(buffer, argv[1]);
    printf("%s\n", buffer);
   
 
    // dangerous waterfall
    memset(buffer+40+8'A'4);
}
cs

빨리 LOB끝내고 pwnable.kr를 풀어야하므로 간단하게 정리한다


ret주소엔 strcpy(*dst, *src)주소인지 확인한다. 그리고 아래 memset은 strcpy()의 ret를 AAAA로 초기화시킨다.

[buffer][sfp][ret(strcpy@plt)][AAAA(strcpy()의 ret)][dest][src]


페이로드는
argv[1] : [buffer][sfp][strcpy()][AAAA][&AAAA][argv[2]]
argv[2] : [system()][BBBB or exit()][/bin/sh]


strcpy()함수를 사용해 AAAA로 초기화되어있는 strcpy()의 ret주소에 argv[2], system()함수가 있는 두번째 인자값을 복사한다.

strcpy함수가 종료되면서 ret에 의해 argv[2]로 뛰면 성공


&AAAA(strcpy() ret)와 argv[2]의 주소를 구하면 끝. 주소는 소스코드를 수정해 구함


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <dumpcode.h>
 
main(int argc, char *argv[])
{
        char buffer[40];
        char *addr;
        printf("buffer:%p\n",buffer);
        printf("argv[2]:%p\n",argv[2]);
 
        if(argc < 2){
                printf("argv error\n");
                exit(0);
        }
 
        // check address
        addr = (char *)&strcpy;
        if(memcmp(argv[1]+44, &addr, 4!= 0){
                printf("You must fall in love with strcpy()\n");
                exit(0);
        }
 
        // overflow!
        strcpy(buffer, argv[1]);
        printf("%s\n", buffer);
 
        // dangerous waterfall
        memset(buffer+40+8'A'4);
}
 
 
cs

 - 수정된 코드



&AAAA : 0xbffffa60+44= 0xbffffa90

argv[2] : 0xbffffc22


페이로드와 Password



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

[LOB] nightmare -> xavious  (1) 2015.06.27
[LOB] zombie_assassin -> succubus  (0) 2015.04.30
[LOB] assassin -> zombie_assassin  (0) 2015.04.18
[LOB] giant -> assassin  (0) 2015.04.14
[LOB] bugbear -> giant  (2) 2015.04.14