Werkzeug / Flask Debug
취약점 평가 및 침투 테스트를 위한 즉시 사용 가능한 설정. 20개 이상의 도구 및 기능을 사용하여 어디서나 전체 침투 테스트를 실행하세요. 우리는 침투 테스터를 대체하지 않습니다 - 우리는 그들이 더 깊이 파고들고, 쉘을 터뜨리고, 재미를 느낄 수 있도록 맞춤형 도구, 탐지 및 악용 모듈을 개발합니다.
Console RCE
디버그가 활성화되어 있으면 /console
에 접근하여 RCE를 얻으려고 시도할 수 있습니다.
인터넷에는 이것과 같은 여러 익스플로잇이 있습니다. 또는 메타스플로잇에서 하나를 찾을 수 있습니다.
핀 보호 - 경로 탐색
일부 경우 /console
엔드포인트는 핀으로 보호됩니다. 파일 탐색 취약점이 있는 경우 해당 핀을 생성하는 데 필요한 모든 정보를 유출할 수 있습니다.
Werkzeug 콘솔 PIN 익스플로잇
앱에서 디버그 오류 페이지를 강제로 표시하여 이를 확인하십시오:
"console locked" 시나리오에 대한 메시지가 Werkzeug의 디버그 인터페이스에 접근하려고 할 때 나타나며, 콘솔 잠금을 해제하기 위해 PIN이 필요함을 나타냅니다. 콘솔 PIN을 악용하기 위해 Werkzeug의 디버그 초기화 파일(__init__.py
)에서 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
). 불확실한 경우, **/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
의 첫 번째 줄과 연결합니다.
Last updated