Werkzeug / Flask Debug
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
웹 앱, 네트워크 및 클라우드에 대한 해커의 관점을 얻으세요
실제 비즈니스에 영향을 미치는 중요한, 악용 가능한 취약점을 찾아보고 보고하세요. 공격 표면을 매핑하고 권한 상승을 허용하는 보안 문제를 찾아내며, 필수 증거를 수집하기 위해 자동화된 익스플로잇을 사용하여 귀하의 노력을 설득력 있는 보고서로 전환하는 20개 이상의 맞춤형 도구를 사용하세요.
디버그가 활성화되어 있으면 /console
에 접근하여 RCE를 얻으려고 시도할 수 있습니다.
인터넷에는 이와 같은 여러 가지 익스플로잇이 있습니다. 또는 메타스플로잇에서 하나를 찾을 수 있습니다.
일부 경우 /console
엔드포인트는 핀으로 보호됩니다. 파일 탐색 취약점이 있는 경우 해당 핀을 생성하는 데 필요한 모든 정보를 유출할 수 있습니다.
앱에서 디버그 오류 페이지를 강제로 표시하여 이를 확인하십시오:
"console locked" 시나리오에 대한 메시지가 Werkzeug의 디버그 인터페이스에 접근하려고 할 때 나타나며, 콘솔을 잠금 해제하기 위한 PIN이 필요함을 나타냅니다. PIN 생성 알고리즘을 분석하여 콘솔 PIN을 악용할 것을 제안합니다. PIN 생성 메커니즘은 Werkzeug 소스 코드 저장소에서 연구할 수 있지만, 버전 불일치 가능성으로 인해 실제 서버 코드를 파일 탐색 취약점을 통해 확보하는 것이 좋습니다.
콘솔 PIN을 악용하기 위해 두 세트의 변수가 필요합니다: probably_public_bits
와 private_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
uuid.getnode()
: 현재 머신의 MAC 주소를 가져오며, str(uuid.getnode())
는 이를 10진수 형식으로 변환합니다.
서버의 MAC 주소를 결정하기 위해, 앱에서 사용되는 활성 네트워크 인터페이스를 식별해야 합니다 (예: ens3
). 불확실한 경우, /proc/net/arp
를 누출하여 장치 ID를 찾고, /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
의 마지막 슬래시(/
) 이후 첫 번째 줄과 연결합니다.
AWS 해킹 배우기 및 연습하기:HackTricks Training AWS Red Team Expert (ARTE) GCP 해킹 배우기 및 연습하기: HackTricks Training GCP Red Team Expert (GRTE)