Myprofileiscompleate/sql-ninja-injection-tool
0
1document.addEventListener('DOMContentLoaded', function() {2 // Check for dark mode preference3 if (localStorage.getItem('darkMode') === 'true') {4 document.documentElement.classList.add('dark');5 }6 7 // Initialize tooltips8 const tooltipTriggers = document.querySelectorAll('[data-tooltip]');9 tooltipTriggers.forEach(trigger => {10 trigger.addEventListener('mouseenter', showTooltip);11 trigger.addEventListener('mouseleave', hideTooltip);12 });13 14 // Load vulnerability data for each app15 if (window.location.pathname.includes('dvwa.html')) {16 loadDVWAData();17 } else if (window.location.pathname.includes('bwapp.html')) {18 loadBWAPPData();19 } else if (window.location.pathname.includes('juice.html')) {20 loadJuiceShopData();21 }22});23 24function showTooltip(e) {25 const tooltipText = e.target.getAttribute('data-tooltip');26 const tooltip = document.createElement('div');27 tooltip.className = 'absolute z-10 bg-gray-800 text-white text-xs rounded py-1 px-2 whitespace-nowrap';28 tooltip.textContent = tooltipText;29 document.body.appendChild(tooltip);30 31 const rect = e.target.getBoundingClientRect();32 tooltip.style.top = `${rect.top - 30}px`;33 tooltip.style.left = `${rect.left + rect.width / 2 - tooltip.offsetWidth / 2}px`;34 35 e.target._tooltip = tooltip;36}37 38function hideTooltip(e) {39 if (e.target._tooltip) {40 document.body.removeChild(e.target._tooltip);41 delete e.target._tooltip;42 }43}44 45async function loadDVWAData() {46 // In a real app, this would fetch data from an API47 const vulnerabilities = [48 { id: 1, name: 'Basic SQL Injection', severity: 'High', description: 'Standard SQL injection vulnerability allowing unauthorized database access.', payload: "' OR '1'='1" },49 { id: 2, name: 'Blind SQL Injection', severity: 'High', description: 'Time-based blind SQL injection allowing data extraction without visible errors.', payload: "' OR (SELECT SLEEP(5)) --" },50 { id: 3, name: 'Union-Based Injection', severity: 'Critical', description: 'Union-based SQL injection allowing data extraction from other tables.', payload: "' UNION SELECT username, password FROM users --" }51 ];52 renderVulnerabilities(vulnerabilities);53}54 55async function loadBWAPPData() {56 const vulnerabilities = [57 { id: 1, name: 'POST SQL Injection', severity: 'High', description: 'SQL injection via POST parameters.', payload: "admin' OR '1'='1' --" },58 { id: 2, name: 'Error-Based Injection', severity: 'High', description: 'SQL injection that reveals database errors.', payload: "' AND 1=CONVERT(int, (SELECT table_name FROM information_schema.tables)) --" },59 { id: 3, name: 'Second Order Injection', severity: 'Medium', description: 'Stored SQL injection that executes later.', payload: "'; UPDATE users SET password='hacked' WHERE username='admin' --" }60 ];61 renderVulnerabilities(vulnerabilities);62}63 64async function loadJuiceShopData() {65 const vulnerabilities = [66 { id: 1, name: 'NoSQL Injection', severity: 'High', description: 'MongoDB NoSQL injection vulnerability.', payload: "' || '1'=='1" },67 { id: 2, name: 'Login Bypass', severity: 'Critical', description: 'SQL injection in login form allowing admin access.', payload: "admin' --" },68 { id: 3, name: 'Search Field Injection', severity: 'Medium', description: 'SQL injection in product search feature.', payload: "%' AND 1=1 UNION SELECT null,username,password,null,null,null,null FROM Users --" }69 ];70 renderVulnerabilities(vulnerabilities);71}72 73function renderVulnerabilities(vulnerabilities) {74 const container = document.getElementById('vulnerabilities-container');75 if (!container) return;76 77 container.innerHTML = vulnerabilities.map(vuln => `78 <div class="vulnerability-card bg-white dark:bg-gray-800 rounded-lg shadow-md p-6 mb-4">79 <div class="flex justify-between items-start mb-2">80 <h3 class="text-xl font-bold text-gray-800 dark:text-white">${vuln.name}</h3>81 <span class="px-2 py-1 text-xs rounded-full ${82 vuln.severity === 'Critical' ? 'bg-red-500 text-white' : 83 vuln.severity === 'High' ? 'bg-orange-500 text-white' : 84 'bg-yellow-500 text-gray-800'85 }">${vuln.severity}</span>86 </div>87 <p class="text-gray-600 dark:text-gray-300 mb-4">${vuln.description}</p>88 <div class="bg-gray-100 dark:bg-gray-700 p-3 rounded mb-4">89 <code class="text-sm text-gray-800 dark:text-gray-200">${vuln.payload}</code>90 </div>91 <button class="bg-blue-500 hover:bg-blue-600 text-white px-4 py-2 rounded mr-2 test-btn" data-payload="${encodeURIComponent(vuln.payload)}">92 Test Vulnerability93 </button>94 <button class="bg-green-500 hover:bg-green-600 text-white px-4 py-2 rounded learn-more-btn" data-vuln-id="${vuln.id}">95 Learn Mitigation96 </button>97 </div>98 `).join('');99 100 // Add event listeners101 document.querySelectorAll('.test-btn').forEach(btn => {102 btn.addEventListener('click', function() {103 const payload = decodeURIComponent(this.getAttribute('data-payload'));104 testVulnerability(payload);105 });106 });107 108 document.querySelectorAll('.learn-more-btn').forEach(btn => {109 btn.addEventListener('click', function() {110 const vulnId = this.getAttribute('data-vuln-id');111 showMitigation(vulnId);112 });113 });114}115 116function testVulnerability(payload) {117 // In a real app, this would send the payload to the backend118 alert(`Testing with payload:\n\n${payload}\n\nThis would send the payload to the vulnerable application in a real scenario.`);119}120 121function showMitigation(vulnId) {122 const mitigations = {123 1: "Use prepared statements with parameterized queries to prevent SQL injection.",124 2: "Implement proper input validation and sanitization.",125 3: "Apply the principle of least privilege to database accounts."126 };127 alert(`Mitigation for this vulnerability:\n\n${mitigations[vulnId] || 'No specific mitigation information available.'}`);128}