들어가면 다음의 화면이 뜬다. 코드를 보면 다음과 같다. 를 그냥 치니깐 no hack이라고 떴다. 문자열을 그대로 입력했을때 필터링이 걸리는 것 같다. 자세히 살펴보니 특수문자들은 사용이 가능하지만 알파벳을 그대로 붙여서 입력했을때는 필터링에 걸리는것 같다. 이런 경우에는 NULL byte(%00)를 각 글자사이마다 입력을 하여 우회를 할 수 있다. a%00l%00e%00r%00t(1); 위를 폼에 입력했을때는 script가 실행이 안되어서 url에 직접 입력했더니 url이 실행 되었다.
들어가면 다음과 같은 화면이 나온다. 코드는 다음과 같다. 폼안에 이름과 코맨트를 입력하고 captcha와 같은 글자를 2초내에 입력해야 문제가 풀리는 것 같다. 이 모든 것을 2초안에 하기는 힘들다. 따라서 개발자 도구 콘솔 창을 활용해야 될거 같다. 이런 코드를 콘솔창에 입력하면 새로고침후 바로 엔터를 누르면 이 코드가 실행된다. 이름에 A를 넣고 코맨트에 A를 넣고 captcha를 넣는부분에 회색네모에 있는 captcha의 값을 넣어준다. 그리고 submit()함수를 이용하여 제출 버튼을 안눌러도 제출되도록 한다. 그리고 풀렸다,
들어가면 다음과 같은 화면이 뜬다. 자바스크립트 문제니깐 코드를 확인해보자 키보드를 누를때마다 이벤트가 발생한다. mv함수를 실행하게 되는데 cd가 124이면 문제는 풀릴것이다. cd를 키코드 값이라고 추측할 수 있다. 100 4 (Num Lock) 97 1 (Num Lock) 119 F8 115 F4 124 | |를 누르면 풀릴것이다. 풀렸다.
들어가면 다음과 같이 뜬다. 그대로 제출을 누르면 다음과 같이 뜬다. id에 다른 글자를 입력하면 hello가 뜬다. id를 바꿀때마다 쿠키값을 확인하니 쿠키값이 계속 바뀌어져 있다. ex) a -> 쿠키값 : MGNjMTc1YjljMGYxYjZhODMxYzM5OWUyNjk3NzI2NjE%3D -> md5를 이용한 암호화 값 : 0cc175b9c0f1b6a831c399e269772661 -> 쿠키값에서 %3D ==으로 바꾼후 디코딩 : 0cc175b9c0f1b6a831c399e269772661 쿠키값에 a를 "md5->base64방식으로 인코딩->==을 %3D로 바꿈"이란 절차로 바꾼 것을 집어넣은 것을 볼 수 있다. 따라서 admin도 이런식으로 바꾸면 될 거 같다. admin을 한꺼번에 md5를 이용..
들어가면 다음과 같이 뜨면서 페이지 이동이 된다. alert창이 뜨지 않기 위해 다음의 절차를 진행한다. 크롬에서 설정으로 들어간다. 개인정보 및 보안에서 사이트 설정으로 들어간다. 콘텐츠에서 자바스크립트에 들어간다. 차단에서 추가를 눌러 webhacking.kr 페이지를 등록한다. 다시 문제에 들어가면 흰 화면이 뜨고 소스코드를 확인할 수 있다. ?getFlag를 url 뒤에 넣어주면 될거 같다. 다시 페이지를 자바스크립트 허용으로 바꿔주고 ?getFlag를 입력하면 풀린다.
들어가면 위의 화면이 뜬다. pregmatch 함수를 보면 select, from, &가 필터링되어있는 것을 확인할 수 있다. Mysql에서 Reserve된 Keyword들이 여러개 있다. (select, from, where, in, like, limit...) 기본적으로 이 키워드들은 대소문자를 구별하지 않는다. 따라서 SeLect나 select나 다 똑같은 값으로 읽힌다. 하지만 이거랑 반대로 php는 모든 문자열에대해 case sensitive이다. 대소문자를 구별한다는것이다. 따라서 위에서는 select만 필터링되어있기 때문에 SeleCt라고 써도 php는 다른 문자열로 인식하고 Mysql에서는 같은 문자열로 인식하기 때문에 우회가 가능하다. 근데 코드에서 admin의 no가 2라고 하였기 때문..
들어가면 위의 화면이 뜬다. 소스코드를 확인하면 위와 같다. ul이라는 변수에 URL에서 ".kr" 문자열의 인덱스값을 저장한다. 그리고 ul에 30을 곱한다. 이값을 form에 넣고 값이 맞다면 사이트 이동하는것을 확인할 수 있다. 개발자도구의 콘솔창에 위와 같은 코드를 작성하면 540이 뜨는 것을 확인할 수 있다. 540을 넣으면 풀린다.
javascript가지고 하는 문제인거 같다. 코드를 보면 이모티콘들이 엄청나게 많이 있다. console창에 붙여볼려니깐 undefined라고 떠서 구글에 다른 방법을 찾아봤다. aaencode라는 것이 뜨는데 보니깐 저 간단한 문구도 aaencode를 이용하면 이렇게 긴 이모티콘으로 뜨는 거 같다. 일본인이 만든거 같은데 일본이 귀여운건 잘만드는거 같다. 아무튼 이 문제의 코드도 aaencode되어 있다는것으로 유추할수 있고 이를 decode를 해야 할 것이다. aaencode decode라고 검색해보니 decode할 수 있는 싸이트가 나왔다. decode를 하면 다음과 같은 코드가 나온다. 코드를 보기좋게 만들어보았다. substr(start,end) : start위치부터 start+end까지의 문..
들어가면 다음과 같은 화면이 뜬다. 코드를 살펴보자 마우스를 O에 가져다 대면 O가 yOu로 바뀌고 마우스를 빼면 다시 O로 바뀌는 것을 알 수 있다. 또한 O를 클릭할때마다 1씩 왼쪽으로 가는것을 화인할 수 있다. O의 left==1600px일때 this.href를 통해 무언가가 실행되는 것을 알 수 있다. 따라서 this.style.left=parseInt(this.style.left, 10)+1 에서 1을 1599로 바꿔주면 left가 1600이 될것이다. 바꾼다음 O를 클릭하면 left는 1600이 되고 다음과 같은 alert창이 뜨고 풀린다.