WAAP Labv2.0

ETC · 비-JSON Body 요청

JSON 이외의 Content-Type(application/x-www-form-urlencoded, text/plain, text/xml) 로 body 있는 요청을 발사. Burp 로 인터셉트해서 헤더·바디 사이 CRLF 조작, 헤더 이상값 주입 등 HTTP 프로토콜 이상 케이스를 테스트할 대상.

💡 사용 팁
1. 아래 프리셋 중 하나 눌러 body 채우기 → 보내기 클릭
2. Burp Repeater 로 요청 잡아서 헤더바디 사이 CRLF 를 여러 개(3개 이상) 넣거나, 헤더 순서·값 변조
3. WAAP 가 payload 를 탐지·차단하는지, 아니면 통과시켜서 origin 응답에 payload 가 그대로 echo 되는지 관찰
form 정상 form + XSS form + SQLi XML 정상 XML XXE text 정상
&role=user' }, 'form-sqli': { ct: 'application/x-www-form-urlencoded', body: "username=admin' OR 1=1--&password=x" }, 'xml-normal': { ct: 'text/xml', body: '\n\n derek\n user\n' }, 'xml-xxe': { ct: 'text/xml', body: '\n]>\n\n &xxe;\n' }, 'text-plain': { ct: 'text/plain', body: 'Just a plain body payload, no structure.\nSecond line here.' }, }; function loadPreset(id) { const p = PRESETS[id]; if (!p) return; document.getElementById('etc-ct').value = p.ct; document.getElementById('etc-body').value = p.body; } async function sendReq() { const ct = document.getElementById('etc-ct').value; const body = document.getElementById('etc-body').value; const token = localStorage.getItem('accessToken') || ''; const resultBox = document.getElementById('etc-result'); const resultStatus = document.getElementById('etc-result-status'); const resultPre = document.getElementById('etc-result-pre'); resultBox.style.display = ''; resultStatus.className = 'etc-result-status'; resultStatus.textContent = '요청 중...'; resultPre.textContent = ''; try { const r = await fetch('/api/etc', { method: 'POST', headers: { 'Content-Type': ct, 'Authorization': token ? `Bearer ${token}` : '' }, body, }); const txt = await r.text(); let data; try { data = JSON.parse(txt); } catch { data = { raw: txt }; } resultStatus.textContent = `HTTP ${r.status}`; resultStatus.classList.add(r.ok ? 'ok' : 'err'); resultPre.textContent = JSON.stringify(data, null, 2); } catch (e) { resultStatus.textContent = '네트워크 오류'; resultStatus.classList.add('err'); resultPre.textContent = String(e); } } function clearResult() { document.getElementById('etc-result').style.display = 'none'; } function handleLogout() { localStorage.clear(); window.location.href = '/login'; }