app.get('/api/local/flag', requireLocal, async (req, res) => { //Cproxy: forge
return res.send(await fs.readFile('/flag_forge', { encoding: 'ascii' }));
});
const requireLocal = async (req, res, next) => {
if (req.socket.remoteAddress === '127.0.0.1') {
next();
} else {
res.sendStatus(403);
}
}
(https://lock.cmpxchg8b.com/rebinder.html)
위 사이트를 공격에 이용하고 편의상 attack tool이라 부르겠습니다.
index.js의 일부 코드입니다. requireLocal 조건을 충족하기 위해서
단순하게 생각하면 /proxy페이지에서
attack tool의 2개의 입력 칸 중 한쪽에는 루프백 주소를 넣고
http://host3.dreamhack.games:(port)에 해당하는 ip를 넣으면 될텐데
이 ip를 직접 넣는건 어렵다고 판단했습니다.
그래서 개인서버 ip를 attack tool의 다른 한 쪽에 넣고
우분투 개인 서버의 페이지에 <script>location.href=host3.~/api/local/flag를 입력하고
(/proxy) - (내 개인서버 페이지에서 스크립트 실행) - (host3.dreamhack.games)로 redirect
과정으로 추측하고 있는데 개인서버가 반드시 필요한가요?
attack tool을 이용해서 공격한다면 반드시 입력되는 ip는 80포트인데, 이럼 또 모순이 생겨버려서 아닌 것 같기도 합니다.
생각한대로 시도해보려고 개인서버 우분투로 포트포워딩 시도했는데, 개인이 80포트를 여는건 어렵다는 것을 알게 되었고, 외부접속도 안되서 헤메다가 질문드립니다..
+)burp suite로 request 과정 하나씩 보다가 REFER: http://210.117.~.~/로 드림핵vm ip같아보여서 시도해봤지만 이것도 아닌 것 같네요..
Level 3이면 이렇게 복잡하진 않을 것같은데 말이죠....