
.NET 포맷터 다양한 종류를 위한 역직렬화 페이로드 생성기
YSoNet은 원본 YSoSerial.Net의 포크로, 현재 @irsdl이 유지 관리하고 있습니다.
안전하지 않은 .NET 객체 역직렬화를 악용하는 페이로드를 생성하기 위한 개념 증명 도구입니다.
YSoNet(이전 명칭: ysoserial.net)은 일반적인 .NET 라이브러리에서 발견된 유틸리티 및 속성 지향 프로그래밍 "가젯 체인"의 모음으로, 적절한 조건에서 안전하지 않은 객체 역직렬화를 수행하는 .NET 애플리케이션을 악용할 수 있습니다. 명령과 가젯 체인을 제공하면 체인에 명령을 래핑하고 결과를 직렬화하여 stdout으로 출력합니다. 취약한 애플리케이션이 해당 데이터를 역직렬화하면 체인이 실행되고 명령이 호스트에서 실행됩니다.
취약점은 클래스패스에 가젯이 있는 것이 아니라 애플리케이션이 안전하지 않은 역직렬화를 수행하는 데 있습니다. 이 프로젝트는 Chris Frohoff의 ysoserial 프로젝트에서 영감을 받았습니다.
YSoNet의 가젯 및 플러그인 카탈로그를 역직렬화 차단 목록으로 사용하지 마십시오. 카탈로그에는 모든 비공개, 향후, 애플리케이션별 또는 다르게 구성된 체인을 포함할 수 없으므로 여기에 나열된 항목을 차단한다고 해서 안전하지 않은 역직렬화 도구가 안전해지지는 않습니다. 이는 공격을 지연시킬 뿐 잘못된 확신을 심어줄 수 있습니다.
애플리케이션을 강화하기 위해 이 저장소를 검토하는 경우, 가젯이나 플러그인을 검사하기 전에 방어자 및 리뷰어를 위한 보안 지침을 읽으십시오. 목표는 안전하지 않은 역직렬화를 제거하거나 고정 스키마의 데이터 전용 설계로 전환하는 것입니다. 엄격한 허용 목록은 마이그레이션이 즉시 불가능할 때의 임시 억제 수단이며, 차단 목록은 해결책이 아닙니다.
전체 문서는 docs/에 있습니다:
이 도구가 처음이신가요? 가장 쉬운 시작 방법은 대화형 모드입니다: 가젯과 플러그인을 나열하고 각 설정을 설명하며 페이로드를 직접 만들어 주는 메뉴 기반 마법사입니다 - 플래그를 먼저 외울 필요가 없습니다.
.\ysonet.exe -i
(interactive, wizard, --interactive도 작동합니다.) 먼저 ysonet.exe가 필요합니다 - 시작하기를 참조하십시오. 전체 마법사 안내도 거기에 있습니다.
./ysonet.exe -f Json.Net -g ObjectDataProvider -o raw -c "calc" -t
모든 옵션은 ysonet.exe --fullhelp로, 가젯별 또는 플러그인별 도움말은 -g NameHere -help 또는 -p NameHere -help로 확인할 수 있습니다. 자세한 내용은 사용법 및 예제를 참조하십시오.
Windows, Visual Studio 2022 또는 Build Tools의 MSBuild(".NET 데스크톱 개발" 워크로드), 그리고 nuget.exe가 필요합니다. 모든 프로젝트는 .NET Framework 4.7.2를 대상으로 합니다.
git clone https://github.com/irsdl/ysonet
cd ysonet
nuget restore ysonet.sln
msbuild ysonet.sln -p:Configuration=Release # 또는 Debug
.\ysonet\bin\Release\ysonet.exe -h
ysonet.exe를 문자열 암호화합니다. 페이로드 바이트는 변경되지 않습니다. -p:ObfuscateRelease=false로 건너뛸 수 있습니다. Debug는 절대 난독화되지 않습니다.Debug 빌드는 빠른 테스트 스위트를 자동으로 실행하며, 테스트 실패 시 빌드가 실패합니다(-p:RunYsonetTests=false로 건너뛸 수 있음). 포괄적인 FULL 스위트는 선택 사항입니다:
.\ysonet\bin\Debug\ysonet.Tests.exe --full
둘 다 안전합니다: 명령은 자체 종료되거나 실행되지 않으며, 리스너는 루프백 전용입니다. 자세한 내용 및 기타 선택적 계층: 시작하기 및 CONTRIBUTING.md.
ysonet.exe는 PowerShell에서 옵션, 가젯 이름(-g), 플러그인 이름(-p), 포맷터(-f) 및 출력 형식(-o)을 탭 완성할 수 있습니다. 완성 값은 도구에서 실시간으로 제공되므로 가젯과 플러그인이 추가되어도 정확하게 유지됩니다.
현재 세션에 대해 활성화합니다(모든 PowerShell에서 작동, 디스크에 기록되지 않음, 실행 정책의 영향을 받지 않음):
.\ysonet.exe completion powershell | Out-String | Invoke-Expression
그런 다음 Tab을 누르십시오. 예: .\ysonet.exe -g A 다음에 Tab.
PowerShell 7+ (pwsh)에서 영구적으로 설정하려면:
.\ysonet.exe completion install # 그런 다음 다시 로드: . $PROFILE
설치는 PowerShell 7+ (pwsh) 전용입니다. Windows PowerShell 5.1은 종종 AllSigned 또는 Restricted로 설정되어 서명되지 않은 프로필을 로드할 수 없기 때문입니다. 이 경우 위의 세션별 줄을 사용하십시오(정책 변경이 필요 없음). ysonet.exe completion status로 감지된 내용을 확인하고, ysonet.exe completion uninstall로 제거할 수 있습니다. 자세한 내용은 tools/completions/에 있습니다.
이 소프트웨어는 학술 연구 및 효과적인 방어 기술 개발 목적으로만 제작되었으며, 명시적으로 승인된 경우를 제외하고 시스템 공격에 사용하기 위한 것이 아닙니다. 프로젝트 유지 관리자는 소프트웨어의 오용에 대해 책임을 지지 않습니다. 책임감 있게 사용하십시오.
이 소프트웨어는 개인 프로젝트이며 프로젝트 소유자 및 기여자의 고용주를 포함한 어떤 회사와도 관련이 없습니다.
공식 저장소: https://github.com/irsdl/ysonet
master에서 브랜치를 만듭니다.YOUR_USER 및 YOUR_BRANCH를 바꾸십시오):
https://github.com/irsdl/ysonet/compare/master...YOUR_USER:ysonet:YOUR_BRANCH간단한 버전은 CONTRIBUTING.md를 참조하십시오. 가젯, 플러그인 또는 직렬 변환기를 추가하시겠습니까? docs/ARCHITECTURE.md의 코드 맵부터 시작하고, 테스트를 통과시키기 위해 테스트를 약화시키지 마십시오.
YSoNet은 Soroush Dalili(@irsdl)이 개발하고 유지 관리합니다. YSoSerial.Net은 원래 Alvaro Muñoz(@pwntester)가 개발했습니다. 전체 가젯 및 플러그인 크레딧은 ysonet.exe --credit를 실행하거나 크레딧을 참조하십시오. 기본 문제에 대해 자세히 알아보려면 참고 자료를 참조하십시오.
YSoNet은 MIT 라이선스에 따라 라이선스가 부여됩니다. 이 라이선스는 Alvaro Muñoz에 대한 원본 ysoserial.net 저작권 고지와 Soroush Dalili에 대한 YSoNet 저작권 고지를 보존합니다. 두 고지와 MIT 허가 고지는 소프트웨어의 모든 사본 또는 상당 부분에 유지되어야 합니다.