문제에 들어가보면 다음과 같이 플래그를 살 수 있는 화면이 나온다.
대충 파악해보면 ASIS Flag라는 True Flag를 사면 될 것 같았다. 현재 보유하고있는 Credit은 0원이고 쿠폰번호를 따로 입력해 사용할 수 있는 것 같았다.
일단 ASIS Flag 선택 후 Pay버튼을 눌러서 사보니 다음과 같은 메시지가 나왔다.
쿠폰값이 아무것도 없을 때 위와 같은 메시지가 떴고 임의의 쿠폰값을 입력해보면 다음과 같이 coupon값이 Base64로 인코딩되서 전송되고 있었고 응답결과 Credit 금액이 부족하다고 나오는 걸 볼 수 있었다.
여기서 생각해볼 수 있는 방법으로는 사용가능한 쿠폰을 찾아 이를 사용해 구입하는 방법, 내가 보유한 Credit금액을 flag가격인 110보다 크게 만들거나 flag가격을 0이하로 만드는 방법 3가지 정도였는데 쿠폰 번호 같은 경우 SQLi도 따로 터지지 않고 게싱으로 때려 맞추기는 좀 힘들어 보여서 일단 패스를 했다. 그리고
Credit금액을 조작하기위해서는 별다른 로그인 기능이라 이런게 없어서 기본적으로 사이트 접근시 할당받는 세션에 Oracle Padding Attack이 터지나 시도해봤지만 해당사이트 접근 시 세션값이 별다른 의미가 없어 통하지 않았다. 마지막으로 구입할 flag가격을 0원으로 만들기 위해 상품 개수를 -1 , 0 같은 값을 줘서 상품 가격*개수를 했을때 0이하가 나오게 만들어 바이패스를 하려고 하니 다음과 같이 상품개수를 체크하고 있는 걸 볼 수 있었다.
여기서 생각해 볼 수 있는 로직은 대충 아래와 같았다.
if (상품개수<=0){
print "제로";
}
else if (상품개수*상품가격>credit_value){
print "크레딧이 충분하지 않음";
}
else{
print "성공";
}
여기서 문제가되는게 첫번째 분기문이었는데 이것저것 테스트해보다가 NaN이 정수형이랑 비교될때 false를 리턴하는걸 통해 첫번째 분기문에서 false가 리턴되면서 상품이 구매되고 플래그가 나오는걸 볼 수 있었다.
약간 운좋게 얻어걸린감이 있었고 NaN Trick에 대해서는 좀 더 찾아봐야 할 것 같다.
'CTF > Writeup' 카테고리의 다른 글
Meepwn CTF Quals 2018 Ezchallz (0) | 2018.07.16 |
---|---|
ASIS 2018 CTF Good WAF (0) | 2018.05.01 |
HITB-XCTF 2018 upload (0) | 2018.04.14 |
Byte Bandits CTF R3M3MB3R (0) | 2018.04.08 |
INS'HACK CTF 2018 Crimemail (0) | 2018.04.08 |