들어가면 다음과 같은 화면이 뜬다. 코드를 살펴보자 마우스를 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창이 뜨고 풀린다.
소스코드는 다음과 같다. $pat="/[1-3][a-f]{5}_.*$_SERVER[REMOTE_ADDR].*\tp\ta\ts\ts/" 정규식 표현을 pat 변수에 저장한다. [1-3] : 1~3중 하나의 값 [a-f]{5} : a~f중 5개의 값 * : 문자를 0번 이상 반복 $_SERVER[REMOTE_ADDR] : 자신의 외부 ip주소 \tp\ta\ts\ts : \t는 인코딩하면 %09와 같다. %09p%09a%09s%09s if(preg_match($pat,$_GET['val'])){ solve(11); } pat과 val값이 같으면 문제는 풀린다. 따라서 다음과 같이 작성하면 된다. ?val = 1abcde_*내 아이피주소*%09p%09a%09s%09s 풀렸다.
들어가면 다음과 같이 뜬다. 소스코드를 확인하면 다음과 같다. $decode_id =="admin"이고 $decode_pw=="nimda"이면 문제는 풀린다. $decode_id =="admin"과 $decode_pw=="nimda"가 될려면 "admin"과 "nimda"를 20번 base64_encode를 해주고 str_replace함수를 이용하여 변환을 해준다. 그리고 이 값을 각각 'user'의 쿠키값, 'password'의 쿠키값에 저장을 해준다. 따라서 쿠키값을 구하기 위한 코드는 다음과 같다. 이러면 user와 password의 쿠키값이 나오게 되고 이것을 EditThisCookie를 이용하여 쿠키값을 변경해 주면 된다.
들어가면 다음과 같이 뜬다. 소스 코드를 확인해보았다. join 버튼을 누르면 Access_Denied가 뜬다. login버튼을 누르면 mem/login.php로 들어가는 거 같다. 그러면 mem은 디렉토리가 아닐까 생각해보았고 mem으로 들어가 보았다. mem에서 join.php로 들어가보았다. bye가 뜨고 검은 화면이 뜬다. 혹시 몰라서 소스코드를 확인해보았다. 뭐가 보기 어렵게 되어있다. 개발자 도구에서 콘솔창에 복사 붙여넣기 해봤다. 근데 이 위의 것이 필요없이 join페이지에 들어갈때 if(eval(llll+lllllllllllllll+lll+lllllllllllllllllllll+lllllllllllll+lllll+llllllllllllll+llllllllllllllllllll+li+'U'+..
들어가면 다음과 같은 화면이 뜬다. 소스코드는 다음과 같다. 페이지의 쿠키값이 숫자가 아니거나 6이상이면 쿠키값은 1이 된다. 쿠키값이 5보다 클때 solve된다. 따라서 페이지의 쿠키값이 5이상 6미만이면 문제는 풀린다. 크롬에 EditThisCookie라는 확장프로그램을 설치해서 이를 이용하였다. 값을 5.5로 바꿔주었다. 그러면 풀린다.
natas level 11->level 12 문제와 비슷한 문제인듯 하다. 다른점은 이미지 파일만 받는다고 한다. 코드를 보자 genRandomString() 함수는 $string에 characters[0~len(characters) 중 random한 숫자]를 붙여넣는다. 그리고 $string을 리턴한다. makeRandomPath함수는 random string에 path를 만들어 주는 함수로 path가 있는지 확인하는 함수이다. makeRandomPathFromFilename함수는 POST방식으로 filename을 받아서, 해당파일의 확장자를 확인하여 path를 만들어 리턴해주는 함수이다. 이 문제도 마찬가지로 확장자가 jpg로 들어가는 것을 알 수 있다. 전 문제와 다른 코드를 볼수가 있다. exif..
문제 풀이 ereg함수를 통해 "admin"이 필터링 되었다. ereg함수는 preg_match 함수와 비슷한 함수이다. ereg('찾고자 하는 문자', '필터링 할 문자열') -찾고자 하는 문자가 있으면 True, 없으면 False를 출력 -대소문자 구별 x 아무튼 id값을 admin으로 받아와야 하는데 필터링이 되었으니 이를 우회해야한다. ereg함수를 우회하기 위해서는 어떻게 해야할까? 1. 대소문자 적절히 섞는다. 예를 들어, admin이면 ADMIN, Admin 등 2. %00 후 문자열 작성을 한다. 1번 방법으로 우회해보았다.
문제 풀이 저번 문제하고 비슷하다. 다른점은 코드가 하나 더 들어있다. 바로 이 코드이다. 전 문제하고 비슷하지만 이 코드를 이용해서 뭔가를 하는것 같다. 개발자 도구를 이용해서 type을 text로 바꿨다. 그러면 다음과 같이 뜬다. value를 통해 값이 들어가기 때문에 stage #2를 풀었던 것과 비슷하게 하면 될것 같다. 폼 안에 hackeme">
문제 풀이 먼저 를 넣어보았다. 코드가 이렇게 바뀐다. 결과를 보자 꺽쇠나 그런것들이 html encoding 되는 것 같다. country를 고르는 것이 괜히 있는 것이 아닌것 같다. country를 고르고 search를 누르면 다음과 같이 코드가 들어간다. 큰따옴표 없이 코드가 들어가기 때문에 Japan 대신 가 오면 문제는 풀릴 것이다. 그렇다면 option태그의 내용을 로 바꾼다면 문제가 풀릴것이다. 개발자 도구의 console창을 이용하면 option 태그와 그 안의 내용을 script태그와 alert로 바꿀 수 있다. 일단 option태그의 내용을 받아오고 그것을 바꿔야 되기 때문에 dom객체를 이용하였다. option태그가 여러개이기 때문에 getElementsByTagName('option..