
다양한 웹 프레임워크에서 알려진 시크릿을 탐지하는 라이브러리
mkdir -p ~/ctools/ cd ~/ctools/ git clone https://github.com/irsdl/crapsecrets/ cd ~/ctools/crapsecrets pip3 install -r requirements.txt export PYTHONPATH=$(pwd):$PYTHONPATH python3 ./crapsecrets/examples/cli.py -u http://update.microsoft.com/ -r python3 ./crapsecrets/examples/cli.py -u http://update.microsoft.com/ -mrd 5 python3 ./crapsecrets/examples/cli.py -mrd 5 -avsk -fvsp -u http://update.microsoft.com/ python3 ./crapsecrets/examples/cli.py -mrd 5 -avsk -fvsp -mkf ./local/aspnet_machinekeys_local.txt -u http://192.168.6.22:8080/ python3 ./crapsecrets/examples/cli.py -mrd 5 -avsk -fvsp -mkf ./local/aspnet_machinekeys_local.txt -mkf ./crapsecrets/resources/aspnet_machinekeys.txt -u http://192.168.6.22:8080/a1/b/c1/
## Viewstate에 대한 팁
- `-mrd 5` 옵션과 함께 명령을 실행하여 긴 리다이렉트 응답을 분석할 수 있습니다.
- 검증 키 및 암호화 키로 모든 키 조합을 시도하려면 `--allviewstatekeys` 또는 `-avsk`를 사용하세요.
- URL에 .aspx가 없는 경우 기본 페이지 집합을 시도하려면 `--findviewstatepage` 또는 `-fvsp`를 사용하세요.
## 일반적인 변경 사항:
- requests 대신 httpx를 사용합니다(AI가 주로 변경했으며 테스트가 최소화되어 정확하지 않을 수 있음).
- 리다이렉션에 깊이를 추가합니다(수동 리다이렉트를 위한 `--max-redirect-depth` 인자).
- 추가 헤더를 지원합니다.
- 요청 시간 제한은 `--timeout` 또는 `-t` 인자를 사용하여 설정할 수 있습니다.
## Viewstate 변경 사항:
- 일부 논리적 변경 사항이 포함되어 있습니다.
- 암호화된 .NET 4.0 viewstate의 검증 키에 대해 AES 및 3DES 가능성을 표시합니다.
- 경로에서 cookieless 값을 제거합니다.
- .aspx 이후의 매개변수를 제거합니다.
- 여러 개의 슬래시 및 백슬래시 문자를 제거합니다.
- 하위 디렉터리에서 애플리케이션 이름을 사용하도록 .NET4.5 로직을 개선합니다.
- "MAC is not enabled"를 감지합니다.
- 응답이 있을 때 긴 리다이렉션을 처리합니다(`-r`로 리다이렉트를 따르지 않을 때).
- 다른 ASPX 페이지로의 리다이렉션을 처리합니다(`-r`로 리다이렉트를 따를 때).
- 리다이렉트 대신 Server.Transfer가 사용되는 경우를 처리합니다(생성자가 대상과 다름).
- MaxPageStateFieldLength가 사용되고 __VIEWSTATEFIELDCOUNT가 있는 경우를 감지합니다.
- 응답에서 asp.net_sessionid 및 __antixsrftoken 쿠키를 확인하는 것 외에도 몇 가지 사전 정의된 ViewStateUserKey를 지원합니다.
- ASPNET4.5에서 3DES 암호화 키를 올바르게 감지합니다.
- aspnet_machinekeys.txt의 모든 문자열을 검증 키로 한 번, 암호 해독 키로 한 번 확인하는 옵션을 추가합니다. `--allviewstatekeys` 플래그를 사용하면 도구가 모든 잠재적 암호화 키를 찾아 데이터를 해독하기 위해 각 키를 무작위 순서로 시도합니다. 많은 키가 테스트되므로 단일 실행에서 잘못된 키가 발생할 가능성이 있습니다. 그러나 도구는 감지된 모든 가능한 키를 나열합니다. 도구를 두 번 실행하면 유효한 암호화 키를 찾을 가능성이 크게 높아집니다. 두 실행 모두에서 동일한 키가 나타나면 해당 키가 올바르다는 것이 거의 100% 보장되기 때문입니다.
- 주어진 URL에 .aspx가 포함되지 않은 경우 기본 페이지 배열을 사용합니다: `["default.aspx", "index.aspx", "main.aspx", "home.aspx" , "start.aspx", "welcome.aspx", "default2.aspx"]` - 이로 인해 테스트 시간이 크게 증가하지만 더 많은 결과를 얻을 수 있습니다.
- `-mkf` 또는 `--machinekeyfile`을 machinekey 리소스 파일로 사용하여 민감한 키가 포함된 경우 로컬 버전을 사용할 수 있습니다.
- viewstate 파싱 시 더 많은 객체를 지원하기 위해 커스터마이즈된 버전의 python viewstate 라이브러리를 사용합니다.
- 검증 키를 찾지 못한 경우에도 암호 해독 키를 확인하는 `-evsd` 또는 `--enable-viewstate-decryption` 인자를 추가했습니다. 이는 검증 키가 목록의 원래 키와 약간 다를 때 유용할 수 있습니다.
- 해시 코드를 식별하여 `__VIEWSTATEGENERATOR`를 계산합니다. 또한 `__VIEWSTATEGENERATOR`와 URL이 제공된 경우 실제 경로와 앱 경로를 조기에 찾으려고 시도합니다. 이는 특히 식별 가능한 기본 ASPX 페이지가 URL에 없는 경우 성능을 향상시킬 수 있습니다.
- 사용자는 `-nt` 또는 `--num-threads` 옵션으로 사용할 스레드 수를 지정할 수 있습니다(viewstate 모듈에만 적용). 기본값은 1이며 대부분의 경우 10보다 놀랍게도 더 빠릅니다!
- 확장자가 없는 파일을 지원해야 하지만 오류가 보고되면 수정해야 합니다.
- IsolateApps를 지원합니다(.NET40 레거시에 유용). 이는 검증 또는 암호 해독 키 뒤에 ",IsolateApps"가 있는 경우입니다.
- https://soroush.me/blog/2019/07/iis-application-vs-folder-detection-during-blackbox-testing/ 를 기반으로 적극적으로 테스트하여 apppath 수를 줄입니다. `-dap` 또는 `--disable-active-path-check`로 비활성화할 수 있습니다.
- 응답 본문에서 __VIEWSTATE_KEY를 확인하고 이를 viewstatekey로도 사용합니다.
- 세션 ID 또는 anti-XSRF 토큰을 기반으로 viewstate 키에 공용 IP 주소를 추가합니다.
- __VIEWSTATE가 없을 때 __EVENTVALIDATION을 사용합니다.
- "aspnet_resource.py"라는 새 모듈에서 `/WebResource.axd?d=` 또는 `/ScriptResource.axd?d=`의 암호화된 리소스 값을 사용합니다. 또한 IsolateApps 기능도 지원합니다. 이는 __VIEWSTATE와 __EVENTVALIDATION이 없을 때 유용합니다.
## TODO:
- viewstate 계산 시 일반적인 페이지 및 디렉터리 사전 추가
- IsolateByAppId 지원 구현(레지스트리의 비밀 키가 필요하므로 아마 불가능할 것임!)
- 오류 발생 시 재시도 지원 추가
- requests를 httpx로 교체하여 발생한 오류 테스트
- requests에서 httpx로의 전환과 AI 사용으로 인해 실패한 테스트가 일부 있습니다. 프로젝트 루트에서 `pytest`를 실행하면 확인할 수 있습니다. 일부는 수정되었지만 여전히 해결해야 할 테스트 오류가 남아 있습니다. 또한 원본 저장소에서도 pytest를 실행하여 비교해야 합니다!```
FAILED tests/all_modules_test.py::test_carve_all_cookies - AssertionError: assert 2 == 7
FAILED tests/examples_blacklist3r_test.py::test_examples_blacklist3r_offline - AssertionError: assert 'Did not find viewstate in repsonse from URL' in 'Did not find viewstate in response...
FAILED tests/examples_cli_test.py::test_example_cli_hashcat_telerikhashkey - AssertionError: assert 'Module: [Te...ture Command' not in '\x1b[32m\n ...y_file>]\n\n'
FAILED tests/examples_cli_test.py::test_example_cli_hashcat_telerikhashkey_invalid2 - AssertionError: assert 'Known Secret Found!' in '\x1b[32m\n __ ) | ...
FAILED tests/examples_symfony_signedurl_test.py::test_symfony_brute_success - AssertionError: assert 'Found Symfony Secret! [50c8215b436ebfcc1d568effb624a40e]' in 'Target appears to be ...
FAILED tests/examples_telerik_knownkey_test.py::test_fullrun_PBKDF2 - KeyError: "'additional_matcher' is not a valid Pattern"
FAILED tests/examples_telerik_knownkey_test.py::test_badoutput_PBKDF1_MS - KeyError: "'additional_matcher' is not a valid Pattern"
FAILED tests/examples_telerik_knownkey_test.py::test_fullrun_asyncupload_earlydetection - KeyError: "'additional_matcher' is not a valid Pattern"
FAILED tests/examples_telerik_knownkey_test.py::test_fullrun_asyncupload_success - KeyError: "'additional_matcher' is not a valid Pattern"
FAILED tests/examples_telerik_knownkey_test.py::test_fullrun_asyncupload_PBKDF1_MS - KeyError: "'additional_matcher' is not a valid Pattern"
이 소프트웨어는 학술 연구와 효과적인 방어 기법 개발을 위한 목적으로만 제작되었으며, 명시적으로 승인된 경우를 제외하고 시스템을 공격하는 데 사용하도록 의도되지 않았습니다. 프로젝트 유지관리자는 소프트웨어의 오용에 대해 책임을 지지 않습니다. 책임감 있게 사용하십시오.
이 소프트웨어는 개인 프로젝트이며, 프로젝트 소유자 및 기여자의 고용주를 포함한 어떤 회사와도 관련이 없습니다.

다양한 플랫폼에서 알려졌거나 매우 취약한 암호화 비밀값의 사용을 식별하기 위한 순수 파이썬 라이브러리입니다. 이 프로젝트는 다양한 "알려진 비밀값"(예: 튜토리얼 예제에서 발견된 ASP.NET machine key)의 저장소 역할을 하면서, 해당 비밀값의 사용을 식별하기 위한 언어에 구애받지 않는 추상화 계층을 제공하도록 설계되었습니다.
'나쁜 비밀값'이 사용되었는지 확인하는 것은 일반적으로 해당 비밀값이 사용된 일부 암호화 산출물(예: 키 기반 해시 알고리즘으로 서명된 쿠키)을 검사하는 문제입니다. 각 플랫폼이 제공하는 개별 구현의 특이점을 살펴보면 상황이 복잡해질 수 있으며, 이 라이브러리는 이러한 문제를 완화하는 것을 목표로 합니다.
Black Lantern Security 블로그의 전체 블로그 게시물을 확인해 보세요!
Blacklist3r에서 영감을 받았으며, 지원 플랫폼을 확장하고 언어 및 운영 체제 종속성을 제거하고자 하는 목표를 가지고 있습니다.