전체 글 105

[webhacking.kr] webhacking.kr 23

맨 처음 나오는 화면이다. 밑의 문구를 보면 “Your mission is to inject ”가 나와있고, 이를 통해 “를 추가해서 1이라는 alert창을 띄우면 성공할 것 같다. 바로 입력 칸에 입력을 해보니 ‘no hack’이 나오면서 URL이 이와 같이 변경된 것을 볼 수 있다. 현재 code라는 변수에 get방식으로 입력 칸에 작성된 문자열이 전달되는 것을 알 수 있다. 어떤 부분이 필터링 돼서 성공하지 못하는지 알기 위해 시도해 보았다. 문자 하나는 필터링 하지 않지만, 연속으로 문자가 나올 경우(sc, alert 등)에만 필터링해주는 것 같았다. 우회를 해주기 위해 문자 사이에 NULL에 해당되는 ‘%00’을 추가해서 입력해 보았다. 입력시, 밑의 사진과 같이 원하는 ‘%00’만 들어가는 것..

[webhacking.kr] webhacking.kr 15

15번 문제에 들어가면 위와 같이 alert창이 뜨고 확인을 누르면 이전 화면을 돌아가는 것을 해결하였다. 설정 -> 사이트 설정 -> 자바스크립트를 보면 허용으로 되어있는 것을 알 수 있다. 들어가서 자바스크립트를 차단하면 더 이상 안뜨는 것을 알 수 있다. 15번의 코드에서 9번째 줄을 해석해보면 console창에 document.write(“[Get Flag]a>”);을 입력하면 해결이 된다. 콘솔창에 document.write(“[Get Flag]a>”);을 입력하였다. [Get Flag] 하이퍼링크가 뜬다. 하이퍼링크를 누르면 URL에서 ?getFlag을 확인할 수 있으며 성공하였다.

[webhacking.kr] webhacking.kr 14

14번 코드를 분석해보자면 13번째 줄에서 ul은 페이지의 URL 정보를 담고 있으며 ul에서 “.kr”의 문자열 값을 ul에 다시 담는다. 그리고 이 ul에 30을 곱해서 입력창에 입력하면 URL의 ?뒤에 ul*pw.input_pwd.value값이 나타나면서 성공함을 알 수 있다. 위의 URL를 참고해서 “.kr”의 인덱스 값을 구하면 18임을 알 수 있다. 그러므로 ul값은 18이 되고 이것에 30을 곱한 540을 입력하면 된다. 540을 입력하면 URL에 ul*pw.input_pwd.value에 해당되는 291600이 나오면서 성공함을 알 수 있다.

[webhacking.kr] webhacking.kr 12

12번 문제의 첫 화면이다. 소스코드를 확인해보았다. 소스코드가 이모티콘으로 되어있다. 이 코드를 해석하기 위해 마지막에 있는 필요없는 문자열인 (‘_’)을 제외하고 console창에 입력하였다. if문을 보면 ck변수와 enco변수에 의해 추출한 값이 동일하면 password 값을 출력해주는 것 같았다. if문에서는 URL의 =문자부터 문자열을 자른 것을 저장하는 ck변수, 1~122까지의 아스키코드가 저장되어 있는 enco변수, x위치에 저장되어 있는 문자를 return해주는 enco_(x)함수로 이루어져있다. if문 안에 있는 뒷부분을 알기 위해서 if문과 함수 선언 부분을 제외하고 console창에 입력하였다. 위와 같은 코드를 console창에 입력하였다. URL창에 console창에 입력한 코..

[webhacking.kr] webhacking.kr 10

소스 코드를 보면 두 번재 줄에서 O를 클릭하면 오른쪽으로 1px씩 이동하는 것을 알 수 있고 O가 1600px만큼 움직이면 페이지를 ?go=1600px로 이동하는 것을 알 수 있다. 결국 this.style.left의 위치가 1600px이면 되므로 처음에 O가 시작되는 위치를 1599로 지정해 한 번 클릭하면 1600px로 이동할 수 있게 수정하였다. 이와 같이 left값을 1599으로 지정하였다. 그 결과 O가 1599위치로 이동하였고, O를 클릭하면 ?go=1600px가 URL에 나타나면서 성공하였다.

[webhacking.kr] webhacking.kr 07

처음 7번 페이지에 들어갔을 때 나온 화면이다. view-source에 들어가보았다. 소스코드를 보면 GET방식으로 값을 받아 go에 저장한다는 것을 알 수 있고 preg_match를 통해 2, +, =, - 등을 필터링한다는 것을 알 수 있다. 그 밑의 코드들을 보면, data의 값이 2이면 solve됨을 알 수 있다. go값을 2로 맞춰서 lv = 2로 바꿔준다면 해결이 될 것 같다. 근데 위에서 2가 필터링이 되고, =, 사칙연산 등을 필터링하기 때문에 연산을 통해서 2를 만들 수 없음을 알 수 있다. 그래서 아스키 코드와 사용하여 union과 select를 사용해서 쿼리를 작성하였다. 또 rand 함수를 통해서 1부터 5까지 값을 무작위로 받기 때문에 문제가 일어날 수 있지만, 새로고침을 계속 해..