본문 바로가기

Webhacking

(47)
[Webhacking.kr] old-17번 문제 풀이 일이 너무 바빠서 풀이를 오래 쉬었다. old-17번 부터 다시 풀이 드루가자 별거없다. 그냥 입력창과 체크다. 문제번호가 js-4이니, javascript 문제일 것이다. 코드를 보자 form 태그 내 check 버튼을 누르게되면 sub함수를 실행시킴을 확인할 수 있다. script 내 코드를 보니 sub함수를 확인할 수 있었다. 내용은 간단하다. unlock 변수의 값과 동일한 데이터를 input에 넣고 check 버튼을 눌리면 풀린다. 다만 unlock 변수가 복잡한 사칙연산으로 이루어져 있다. 이걸 굳이 우리가 풀 필요는 없다. 이런건 개발자도구 console에게 맡기자. unlock이 7809297.1임을 확인했다. 찾은 데이터를 입력하고 check버튼을 클릭하면 풀었다. JS문제의 경우 대부분..
[Webhacking.kr] old-16번 문제 풀이 16번 문제는 이렇게 별이랑 점 두개가 덩그러니 놓여있다. 아무것도 없는것을 보아하니 Javascript 문제로 추정된다. 코드를 보니 역시나 Javascript 문제였다. 뭐가 굉장히 많은데 사실 mv 함수 내 마지막 if문의 조건에 맞는다면 문제가 풀린다는 점이 중요하다. (코드가 굉장히 길지만 다른건 해석할 필요도 없는 문제다) 그렇다면 어디서 mv함수를 호출하는지 봤더니... body 태그에 onkeypress 속성으로 들어가 있었고, mv함수의 인자값은 사용자가 입력한 키보드의 ascii code값이 전달된다. 그렇다면 사실 이 문제는 고민할 것이 없다. 마지막 if문은 cd가 124면 성립한다. 즉 ascii code 124에 해당하는 값을 키보드로 입력하면 문제가 풀릴것이다. ascii co..
[Webhacking.kr] old-15번 문제 풀이 15번은 문제가 이게 전부다. 들어가자 마자 Access_Denied라고 한다. alert일테니, javascript 문제라고 판단했다. URI는 저렇게 되어있었고, 들어가자마자 Javascript가 실행되기 때문에 디버깅을 시도했다. 요렇게 개발자 도구에서 디버깅을 킨 상태에서 문제 URI로 접근을 시도했다. script구문이 나왔고, alert다음에는 location.href가 있어, 실제 Flag인 document.write를 보지 못하는 문제였다. 여기서 풀이방법은 4가지가 있다. Javascript를 브라우저 설정에서 꺼버린 뒤, 접근한다. Proxy를 설정하여 response body 내 js코드를 수정한다. 개발자도구를 이용한 디버깅을 통해 알아낸 flag를 직접 접근한다. (야매)팝업창에서..
[Webhacking.kr] old-14번 문제 풀이 14번 문제는 100점짜리 쉬운문제다. 일단 저렇게 무언가를 check하는 부분이 있다. 코드를 보자 코드를 보니 check 버튼을 누르면 ck함수가 onclick attribute로 인해 실행되는 구조이다. ck 함수를 확인해보니... URI에서 .kr의 위치에 30을 곱한값을 input_pwd에 넣고 check 버튼을 누르면 입력한 값의 제곱이 된 값이 ? 뒤에 붙어 이동되는 구조이다. 풀이방법은 두가지가 있다. if문 조건에 맞는 값을 알아내, input에 넣고 check 버튼을 누른다. if문 조건에 맞는 값을 알아내 제곱하여 ?뒤에 붙여 직접 접근한다. 사실 값을 구하는건 어렵지 않다. console에 직접 코드를 실행시켜봄으로써 값이 540이라는 것을 쉽게 알 수 있다. 첫번째 풀이방법대로 5..
[Webhacking.kr] old-12번 문제 풀이 대놓고 javascript challenge라고 한다. javascript 문제가 틀림없으니 개발자 도구를 열어보자 와 욕나올 뻔했다 ㅎㅎ 열심히 난독화 해둔 이 javascript는 대체 무슨 내용일까... 우선 보기가 너무 힘드니, javascript 내용을 복사하여 beautify 해보았다. 총 22줄의 코드가 나왔다. beautify를 하면 보기 편할것이라는 나의 생각은 틀렸다... 일단 해당 코드를 분석해보기 위해, 개발자도구 console에 입력하여 실행시켜 보았다. 결과는 undefined... undefined란 정의되지 않았다... 이 결과를 통해 지금 실행한 구문이 무언가 함수를 실행한다는 것을 알 수 있었다. 그래서 코드를 찬찬히 보던 와중, 맨 마지막에 ('_'); 요부분이 눈에 띄..
[Webhacking.kr] old-11번 문제 풀이 11번 문제다. 시작하자마자 뭐가 틀렸다고 한다. (싸우자는 건가...?) view-source를 눌러보자 범인은 여기에 있었다. 코드자체는 매우 단순하다. pat변수에 저장된 정규표현식에 맞게 GET 방식으로 val 파라미터에 값을 전달하여 서버에 보내면 문제가 풀리는 구조이다. 하지만 정규표현식을 잘 아는사람도 있지만 모르는 사람들도 있을것이다. 그런 사람들을 위한 꿀팁을 준비했다. 바로 regexr.com/ 라는 사이트이다. 정규표현식을 넣고 그 위에 마우스 커서를 올리면 이렇게 설명이 친절하게 나온다. (영어긴 하지만, IT는 영어가 필수니 열심히 익혀보자) 일단 정규표현식을 완벽하게 분석하기 전에 php 코드에 $_SERVER[REMOTE_ADDR] 라는 부분을 해결해야한다. 매우 간단하다. 해..
[Webhacking.kr] old-10번 문제 풀이 10번문제는 뭐가 이렇게 길게 있다. 코드를 살펴보니 onclick에 무언가 정보가 적혀있다. 저 글자를 한번클릭하면 우측으로 1px움직이며, 1600px가 되면, go라는 파라미터에 현재 위치를 담아 전송한다. 즉 저 글자의 위치를 클릭을 통해 1600px로 이동시키면 문제가 풀린다. 풀이방법은 정말 많지만 간단하게는 두개가 있다. 직접 go 파라미터에 1600px를 넣어, 요청을 시도한다. javascript 코드 수정을 통해 1px씩 움직이던 것을 1600px씩 움직이도록 수정한다. 먼저 첫번째 풀이방법은 코드에 나온대로 ?go=1600px를 uri뒤에 붙여주는 것이다. 다만 여기서 그냥 이렇게만 진행하면 no hack을 만날 수 있다. 왜냐하면 해당 문제는 링크 클릭을 통해서 풀리도록 의도한 문제..
[Webhacking.kr] old-09번 문제 풀이 9번 문제는 1, 2, 3번 버튼 그리고 password 입력 버튼이 있다. 하나씩 눌러보았다. 1번은 Apple이 2번은 Banana가 3번에는 Secret이라고 나타난다. 하지만 추가적인 정보가 더 공개되어있다. Table의 컬럼명은 id, no이다 3번의 id는 password이다 컬럼명을 알려주는 것을 통해 확실히 알 수 있는 것은, 이 문제가 SQL Injection 문제라는 것이다. 그래서 인젝션을 몇차례 시도하다보니 아래와 같은 문자들이 필터링 되어있음을 확인할 수 있었다. =, , +, - 등의 연산자 %20, %09, %0a 등의 공백 ', " 와 같은 쿼터 substring, left, binary, ascii, hex 등의 sql function or, and, &&, || 기초적인 ..