Android N requires the IDE to be running with Java 1.8 or later


안드로이드 API 24 로 업데이트 하면 xml의 Preview에서 위와같은 오류메세지가 나타납니다.

이미 JDK는 1.8버전으로 깔려 있는데도 자꾸 1.8이상으로 설치하라고만 나옵니다.


간단하게 xml에서 기준 api버전을 23이하로 변경하면 바로 나오긴 하지만 여전히 거슬립니다.


아직 정확한 이유를 알수는 없지만 이렇게하면 정상적으로 해결되긴 합니다.


안드로이드의 Info.plist 파일을 수정하면 됩니다.

OX X의 경우 Android Studio.app에서 [패키지보기]를 선택한뒤 Contents폴더 아래에서 Info.plist파일을 찾아볼수 있다.(/Applications/Android\ Studio.app/Contents/Info.plist)


파일 내용중 아래 JVMVersion key를 찾습니다.


...
<key>JVMVersion</key>
<string>1.6+,1.7+</string>
...


출처 : http://gun0912.tistory.com/62



문제 화면입니다. bash에 관한 문제일듯 싶습니다.



4개의 파일이 있습니다.



bash파일을 실행하면 sub bashshell이 실행됩니다.



shellshock.c의 소스코드입니다. 권한상승 설정 후 system명령으로 shock_me라는 문자를 echo합니다.



이 문제의 이름이 힌트이자 취약점의 이름입니다. 구글링을 해봅니다.

이 취약점은 CVE-2014-6271로 등재되었습니다.


잠깐 설명하자면 bash 환경변수를 통한 코드인젝션이 가능한 취약점입니다.

1. Bash의 환경 변수에 함수정의를 이용해서 원하는 코드를 추가 할 수 있고, 다음 Bash가 사용될 때 추가된 코드가 실행됩니다.

2. CGI의 경우, HTTP Request 헤더가 환경변수에 저장이 되는 특성을 이용하여 원격 코드 인젝션이 가능합니다.


취약한 bash는 환경변수 세팅 후 ; 뒤에 임의의 코드를 집어넣으면 실행됩니다.


ex) env x='() { :; }; echo hi' bash -c "echo zz"

취약한 bash는 

hi

zz

로 출력 됩니다.



하지만 패치된 bash는 뒤의 zz만 실행됩니다.



문제 서버에는 패치가 되어서 zz만 나오지만 두번째 명령에 shellshock를 실행하도록 인자를 주면 둘 다 성공적으로 실행 됩니다.



따라서 exploit은 env x='() { :; }; /bin/cat flag' ./shellshock 입니다.


또한

$export x='() { :; }; /bin/cat flag'

$./shellshock

도 같은 방법입니다.



참고자료 : 

http://operatingsystems.tistory.com/entry/Shellshock-CVE20146271

http://juwon1405.tistory.com/6

'Wargame > pwnable.kr' 카테고리의 다른 글

pwnable.kr input  (0) 2018.06.14
pwnable.kr coin1  (0) 2018.02.19
[pwnable.kr] mistake 1p  (0) 2016.08.19
[pwnable.kr] uaf 8p  (0) 2016.08.15
[pnwable.kr] random 1pt  (0) 2016.07.29


힌트로 연산자 우선순위가 주어졌습니다.



홈에는 평소와 다르게 password라는 파일도 있습니다. 


소스파일을 살펴보겠습니다.

#include 
#include 

#define PW_LEN 10
#define XORKEY 1

void xor(char* s, int len){
        int i;
        for(i=0; i 0)){
                printf("read error\n");
                close(fd);
                return 0;
        }

        char pw_buf2[PW_LEN+1];
        printf("input password : ");
        scanf("%10s", pw_buf2);

        // xor your input
        xor(pw_buf2, 10);

        if(!strncmp(pw_buf, pw_buf2, PW_LEN)){
                printf("Password OK\n");
                system("/bin/cat flag\n");
        }
        else{
                printf("Wrong Password\n");
        }

소스코드 의도대로라면  /home/mistake/password 파일에서 10바이트 받아와 pw_buf 배열에 입력하고,

사용자로부터 입력받은 10바이트를 pw_buf배열에 입력한 후

1과 xor연산을 해 pw_buf와 같으면 /bin/flag를 출력할 수 있도록 쉘을 딸 수 있습니다.

하지만 /home/mistake/password 파일을 권한이 없어서 읽을 수 없으므로 gdb를 이용해 풀으려고 했으나

이 방법으로 풀리지 않았습니다.


hint인 연산자 우선순위를 key word로 코드를 자세히 살펴보면

open함수와 read함수가 있는 곳이 약간 이상하다는것을 확인할 수 있습니다.

먼저 open함수가 있는 라인에서 if문을 보면 = 과 < 이 같이 있는데 이 둘의 우선순위는 <이 높습니다.

우선순위를 따져서 코드를 읽으면 open함수는 양수를 반환하고 양수 < 0 이 되므로 fd에는 false가 입력됩니다.

read함수가 있는 부분도 마찬가지로 우선순위가 의도한바와 다르게 되어있습니다.

근데 전에 fd에는 false가 입력되었고 이 값은 파일디스크립터 0이됩니다.

결국 사용자가 입력한 값을 읽어들입니다.


그럼 미리 xor될 값을 알게되므로 먼저 1111111111 을 입력합니다. 이 값은 pw_buf배열에 들어갈 것 입니다.

두번째로 (어떠한 값) XOR 1 = 1111111111 이란 식이 성립하므로

(어떠한 값) = 1111111111 XOR 1 = 0000000000 이므로 두번째입력에는 0000000000을 입력합니다.



'Wargame > pwnable.kr' 카테고리의 다른 글

pwnable.kr coin1  (0) 2018.02.19
[pwnable.kr] shellshock 1p  (0) 2016.08.20
[pwnable.kr] uaf 8p  (0) 2016.08.15
[pnwable.kr] random 1pt  (0) 2016.07.29
[pwnable.kr] passcode 10p  (0) 2016.07.29

+ Recent posts