김승현

[PicoGym] picoCTF Client-side-again 풀이 본문

Web/PicoGym

[PicoGym] picoCTF Client-side-again 풀이

kshind 2023. 5. 23. 15:14

그냥 플래그를 찾는 문제인 것 같다.

난독화란 무엇인가라는 힌트가 있고 아마 난독화된 내용을 해독하면 되는 것 같다.

일단 접속해보자.

접속해보면 대충 이런 화면이 나온다. 난독화 내용이 나왔으니까 소스코드 확인부터 해보자.

자바스크립트로 난독화가 된 것 같은 내용이 있었다.

<script type="text/javascript">
  var _0x5a46=['0a029}','_again_5','this','Password\x20Verified','Incorrect\x20password','getElementById','value','substring','picoCTF{','not_this'];(function(_0x4bd822,_0x2bd6f7){var _0xb4bdb3=function(_0x1d68f6){while(--_0x1d68f6){_0x4bd822['push'](_0x4bd822['shift']());}};_0xb4bdb3(++_0x2bd6f7);}(_0x5a46,0x1b3));var _0x4b5b=function(_0x2d8f05,_0x4b81bb){_0x2d8f05=_0x2d8f05-0x0;var _0x4d74cb=_0x5a46[_0x2d8f05];return _0x4d74cb;};function verify(){checkpass=document[_0x4b5b('0x0')]('pass')[_0x4b5b('0x1')];split=0x4;if(checkpass[_0x4b5b('0x2')](0x0,split*0x2)==_0x4b5b('0x3')){if(checkpass[_0x4b5b('0x2')](0x7,0x9)=='{n'){if(checkpass[_0x4b5b('0x2')](split*0x2,split*0x2*0x2)==_0x4b5b('0x4')){if(checkpass[_0x4b5b('0x2')](0x3,0x6)=='oCT'){if(checkpass[_0x4b5b('0x2')](split*0x3*0x2,split*0x4*0x2)==_0x4b5b('0x5')){if(checkpass['substring'](0x6,0xb)=='F{not'){if(checkpass[_0x4b5b('0x2')](split*0x2*0x2,split*0x3*0x2)==_0x4b5b('0x6')){if(checkpass[_0x4b5b('0x2')](0xc,0x10)==_0x4b5b('0x7')){alert(_0x4b5b('0x8'));}}}}}}}}else{alert(_0x4b5b('0x9'));}}
</script>

그냥 1자로 쭉 적혀있는데 자바스크립트를 예쁘게 고쳐주는 사이트가 있다.

Online JavaScript beautifier

 

Online JavaScript beautifier

Beautify JavaScript, JSON, React.js, HTML, CSS, SCSS, and SASS

beautifier.io

위의 사이트로 이동해서 고쳐보자.

이런 식으로 코드가 나왔다.

개발자도구 - console을 통해 해석해보자.

순서를 잘 맞추면 아래의 flag가 나온다.

 

picoCTF{not_this_again_50a029}

 

근데 웹사이트에 있는 이건 왜 있는 거지,,? flag를 입력해도 딱히 변하는 게 없는데