도와주세요.. 진짜 모르겠어요..
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이면 이렇게 복잡하진 않을 것같은데 말이죠....

#web
작성자 정보
답변 1
avatar
hoppi_
대표 업적 없음

안녕하세요 zkvlkat님!
해당 attack tool을 이용해야겠다고 생각했다면, 문제의 취약점을 이해하신거라고 생각됩니다.
물론 생략된 부분도 있지만 올려주신 코드상에서 검증하는 부분은 ip지 포트는 따로 검증하지 않습니다.

  • 개인서버는 반드시 필요하지 않습니다.
2024.02.16. 18:16
질문에 대한 답을 알고 계신가요?
지식을 나누고 포인트를 획득해보세요.
답변하고 포인트 받기