Werkzeug / Flask Debug
취약점 평가 및 침투 테스트를 위한 즉시 사용 가능한 설정. 20가지 이상의 도구 및 기능을 사용하여 어디서든 전체 펜테스트를 실행하십시오. 우리는 펜테스터를 대체하지 않습니다 - 우리는 커스텀 도구, 탐지 및 악용 모듈을 개발하여 그들이 더 깊이 파고들고, 쉘을 열고, 즐길 수 있는 시간을 돌려줍니다.
콘솔 RCE
디버그가 활성화되어 있다면 /console
에 액세스하여 RCE를 얻을 수 있습니다.
인터넷에는 이것과 같은 여러 취약점이 있습니다. 또한 metasploit에도 하나가 있습니다.
Pin Protected - 경로 이탈
일부 경우에는 /console
엔드포인트가 핀으로 보호될 수 있습니다. 파일 이탈 취약점이 있는 경우, 해당 핀을 생성하는 데 필요한 모든 정보를 누출할 수 있습니다.
Werkzeug Console PIN Exploit
앱에서 디버그 오류 페이지를 강제로 표시하여 다음을 확인하세요:
Werkzeug의 디버그 인터페이스에 액세스하려고 할 때 "콘솔 잠금" 시나리오에 대한 메시지가 나타나며 콘솔을 잠금 해제하려면 PIN이 필요하다는 것을 나타냅니다. Werkzeug의 디버그 초기화 파일(__init__.py
)에서 PIN 생성 알고리즘을 분석하여 콘솔 PIN을 악용하는 것이 제안됩니다. PIN 생성 메커니즘은 Werkzeug 소스 코드 저장소에서 확인할 수 있지만 잠재적인 버전 불일치로 인해 실제 서버 코드를 파일 탐색 취약점을 통해 확보하는 것이 좋습니다.
콘솔 PIN을 악용하기 위해 probably_public_bits
와 private_bits
두 세트의 변수가 필요합니다:
probably_public_bits
probably_public_bits
username
: Flask 세션을 시작한 사용자를 가리킵니다.modname
: 일반적으로flask.app
으로 지정됩니다.getattr(app, '__name__', getattr(app.__class__, '__name__'))
: 일반적으로 Flask로 해석됩니다.getattr(mod, '__file__', None)
: Flask 디렉토리 내의app.py
의 전체 경로를 나타냅니다(예:/usr/local/lib/python3.5/dist-packages/flask/app.py
).app.py
가 해당되지 않는 경우app.pyc
를 시도해보세요.
private_bits
private_bits
uuid.getnode()
: 현재 컴퓨터의 MAC 주소를 가져와str(uuid.getnode())
를 사용하여 10진수 형식으로 변환합니다.서버의 MAC 주소를 결정하려면 앱에서 사용하는 활성 네트워크 인터페이스를 식별해야 합니다(예:
ens3
). 불확실한 경우, 장치 ID를 찾기 위해/proc/net/arp
를 누출하고, 그런 다음 **/sys/class/net/<device id>/address
**에서 MAC 주소를 추출해야 합니다.16진수 MAC 주소를 10진수로 변환하는 방법은 다음과 같습니다:
get_machine_id()
:/etc/machine-id
또는/proc/sys/kernel/random/boot_id
에서 데이터를 가져와/proc/self/cgroup
의 마지막 슬래시(/
) 이후 첫 번째 줄과 연결합니다.
Last updated