SlowTurtle_

천천히 그러나 끝까지 완주

Webhacking-Write-Up/Dreamhack

[Dreamhack] File Vulnerability Advanced for linux

SlowTurtle_ 2023. 1. 11. 17:12
728x90

[Dreamhack] File Vulnerability Advanced for linux

필요한 코드만 가져와 봤다.

@app.route('/file', methods=['GET'])
def file():
    path = request.args.get('path', None)
    if path:
        data = open('./files/' + path).read()
        return data
    return 'Error !'

/file을 보자. path파라미터를 통해서 ./files/경로로 파일을 읽어온다. 그러나 path파라미터에서 아무런 필터링이 없기 때문에 Path Traversal 취약점이 발생한다.

@app.route('/admin', methods=['GET'])
@key_required
def admin():
    cmd = request.args.get('cmd', None)
    if cmd:
        result = subprocess.getoutput(cmd)
        return result
    else:
        return 'Error !'

/admin에서 cmd를 통해서 명령어를 실행한다. 그러나 @key_required로 인해 API_KEY를 아는 이용자만 사용이 가능하다.

def key_required(view):
    @wraps(view)
    def wrapped_view(**kwargs):
        apikey = request.args.get('API_KEY', None)
        if API_KEY and apikey:
            if apikey == API_KEY:
                return view(**kwargs)
        return 'Access Denined !'
    return wrapped_view

key_required 데코레이터 함수는 GET인자로 전달받은 API_KEY파라미터가 환경 변수에 설정되어 있는 API_KEY와 동일한지 확인한다.

우선 Path Traversal취약점을 이용해  /etc/passwd을 추출해봤다.

../../etc/passwd 볼 수 있었다. ../../ 디렉토리부터 시작함을 알 수 있었다.

위에서 말했듯이 환경 변수에 설정되어 있는 API_KEY와 동일한지 확인하기 때문에 환경 변수에 API_KEY가 있음을 알 수 있다. 따라서 /proc/self/environ 파일을 읽어오면 API_KEY를 알 수 있고 그것을 통해 /admin에 접근할 수 있다.

../../proc/self/environ으로 파일을 읽어왔고 API_KEY를 획득했다.

처음에 API_KEY만 넣었더니 Error가 떠서 당황했었다.

cmd를 통해 flag라는 파일이 존재함을 확인했다.

cmd=../../flag 를 통해 flag값을 획득할 수 있다.

728x90

'Webhacking-Write-Up > Dreamhack' 카테고리의 다른 글

[Dreamhack] Tomcat Manager  (0) 2023.01.22
[Dreamhack] Apache htaccess  (0) 2023.01.11
[Dreamhack] Command Injection Advanced  (0) 2023.01.11
[Dreamhack] phpMyRedis  (0) 2023.01.11
[Dreamhack] csrf-2  (0) 2023.01.11