Stage 2: 이제, 당신의 모든 주문을 무료로 얻기 위한 시도를 하십시오.
풀이
프록시 툴을 이용한 방법과 개발자 도구를 이용한 방법, 두 가지가 있습니다.
방법을 소개하기 앞서, 알고리즘을 파악하도록 하겠습니다.
Quantity 열에 값을 입력하면 각 금액들이 변하게 됩니다.
이를 개발자 도구로 확인하면, updateTotals 함수를 실행하는 것을 볼 수 있습니다.
이는 Stage 1과 같은 파일에 있습니다.
http://<WebGoat접속 주소> :8080/WebGoat
/plugin_extracted/plugin/ClientSideValidation/js/clientSideValidation.js
function updateTotals(){ f = document.form; f.TOT1.value = calcTot(f.PRC1.value , f.QTY1.value); f.TOT2.value = calcTot(f.PRC2.value , f.QTY2.value); f.TOT3.value = calcTot(f.PRC3.value , f.QTY3.value); f.TOT4.value = calcTot(f.PRC4.value , f.QTY4.value); f.SUBTOT.value = formatCurrency(unFormat(f.TOT1.value) + unFormat(f.TOT2.value) + unFormat(f.TOT3.value) + unFormat(f.TOT4.value)); f.GRANDTOT.value = f.SUBTOT.value; isValidCoupon(f.field1.value); }
이 함수는 각 Items 들의 가격을 계산하여, 결제 금액을 표시한 후(f.GRANDTOT.value),
isValidCoupon(f.field1.value);
를 통해 쿠폰 할인 값을 적용하고 있습니다.
isValidCoupon 함수는 쿠폰 값을 비교한 다음에 ajax를 통해 할인된 가격을 받은 후에
할인을 적용한 결제 금액을 표시하게 됩니다.
이를 이용하여 우리는 두 가지 풀이가 가능하게 됩니다
방법 1: 프록시 툴을 이용한 방법
구매할 개수를 적으면 알고리즘에 의해 할인율을 받게 됩니다. 이 할인된 가격을 0%로 수정하면 결제할 가격은 $0.00 가 됩니다.
단, 이 방법은 올바른 쿠폰을 입력해야 합니다. 그래야 ajax 통신을 합니다.
할인하고 있는 모습입니다. Response의 값을 .0으로 바꿔주세요.
결제 금액이 $0.00으로 바뀌며, Purchase를 누르면 문제가 풀리게 됩니다.
방법 2: 개발자 도구를 이용한 방법
스크립트 파일을 보면 결제 금액을 document.form.GRANDTOT.value 로 제어하는 것을 볼 수 있습니다.
즉, document.form.GRANDTOT.value 값을 0으로 바꿔주면 쉽게 풀 수 있습니다.
개발자 도구 -> 아래 콘솔 입력창에 아래와 같이 입력.
document.form.GRANDTOT.value = "$0.00";
또는, URL 입력창에 다음과 같이 입력.
javascript:document.form.GRANDTOT.value=0;
결제 금액이 0으로 바뀌며, Purchase를 누르면 문제가 풀리게 됩니다.