DongDD's IT

[2017 Oman CTF Quals] Cool Name Effect(Web, Easy, 50 point) 본문

CTF/Write-up

[2017 Oman CTF Quals] Cool Name Effect(Web, Easy, 50 point)

DongDD 2017. 11. 7. 16:31

[2017 Oman CTF Quals] Cool Name Effect(Easy, 50 point)



Problem : Webmaster developed a simple script to do cool effects on your name, but his code not filtering the inputs correctly execute javascript alert and prove it.


Challenge Link: http://ec2-34-216-12-86.us-west-2.compute.amazonaws.com/cool-effect/


Script를 통한 웹페이지를 만들었는데, 필터링되지 않은 코드에 javascript alert를 실행시키라는 문제 같았다.


사이트에 들어가니 다음과 같은 모습을 볼 수 있었다. Name을 입력하는 것 같이 보이는 Input창 하나가 있었고 Default값으로 "Jane Doe"라고 써있었다. "Go!" 버튼을 클릭 시 입력한 것이 전송되는 것 같았다.




Name에 아무거나 입력했더니 원래 있던 메시지가 내가 입력한 것으로 바뀌었다. 아치형으로 메시지가 출력되는 것을 볼 수 있었다. ?name=asdf가 주소에 나타난 것으로 보아 GET방식을 이용하여 웹페이지가 바뀌는 것을 알 수 있었다.


Script 문제라고 주어져있었기 때문에 먼저 XSS를 넣기 위해 <sciprt> alert("asdf");</script> 구문을 넣어 보았다. script 부분에 "forbidden"이라고 출력된 것으로보아 script가 필터링되어 있는 것을 알 수 있었다.

script를 우회할 방법을 찾아야 될 것 같았다.


필터링을 좀더 확실히 하기 위해서 '<'나 '>'이 필터링되는지 확인해보기 위해 script를 제외하고 이 두 문자를 넣었더니 필터링없이 제대로 출력되는 것을 볼 수 있었다. 필터링은 아마 script에만 되어있는 것 같다.


이번에는 'script'만 입력했더니 [forbidden]이라는 message가 나온 것으로 보아 'script'만 필터링되있다는 것을 확신할 수 있었다. 대문자를 사용하여 만들 Sciprt 구문을 한번 실행시켜 보았다.


우회방법이 무엇이 있을까 생각하다가 대문자로 해보면 어떨까 싶어 Script를 넣어보았다. Script를 넣었더니 필터링되지 않고 제대로 출력되는 것을 볼 수 있었다. 아마 소문자로 이루어진 script만 필터링해 차단하는 것을 알 수 있었다. 이렇게 해서 Flag를 얻어낼 수 있었지만 시작하기전에 봤던 web page의 소스코드에도 문제를 해결할 방법이 적혀있는 것을 볼 수 있었다.



웹페이지에 적혀있던 소스코드의 일부분이다. function(p,a,c,k,e,d)로 보아 packing되어 있는 코드인 것을 알 수 있었다. unpacking하기 위해 http://matthewfl.com/unPacker.html 사이트의 unpacker를 이용해 unpacking을 시도해보았다.


위 그림은 코드의 일부분 중에서 답을 얻어낼 수 있는 부분이라 이 부분만 캡쳐했다.

script를 통해 alert를 실행하면 새로운 alert가 생성되어 입력했던 alert대신 새로운 alert가 보여지게 되는 코드였다.

처음에 풀었던 방법과 다르게 이 script를 조금 수정해 실행해도 답을 얻을 수 있었다.







**************     Answer & Flag     **************



1번 방법으로 해결한 뒤 나오는 모습이다. 크롬자체에서 XSS를 차단했기 때문에 firefox를 이용하여 XSS를 삽입해 실행시켰다.

<Sciprt>alert("asdf");</Script> 를 삽입해 새로운 alert창이 나오며 flag를 출력하는 것을 볼 수 있었다. 


2번 방법으로 Packing된 코드를 Unpack한 후 새로운 alert를 생성하는 코드의 일부분을 조금 수정해 script 실행 시 바로 alert가 나올 수 있도록 수정하였다. 이 코드를 크롬 브라우저에 있는 console창에서 실행했더니 마찬가지로 flag가 출력되는 것을 볼 수 있었다.


1번 방법으로는 답을 얻을 수 있지만 정확한 동작원리를 알 수 없게 되어있지만, 2번 방법으로 코드를 보고 분석한다면 새로운 alert를 생성하는 코드가 숨겨져 있다는 것을 알 수 있었다.

Easy인 이유는 간단한 XSS를 이용해서도 문제를 해결할 수 있어서 아마 이정도 난이도라고 판단하여 메기지 않았나 싶었다.



Comments