Webhacking.kr
webhacking.kr
위의 사이트에서 처음으로 (정식) 웹 해킹 문제를 풀어 봤다!

old-3에 들어갔더니 갑자기 노노그램을 하라고 했다.

그래서 노노그램을 풀었더니 클리어됐다....
다음 old-16.

들어가니까 이런 화면이 떴는데 진짜로 뭘 어떻게 해야 할지 몰라서 ai 도움을 받았다. ㅜㅜ
이렇게 아무것도 누를 수 있는 게 없을 때는 option+command+I 단축키로 개발자 도구를 열어서 도움을 받으면 되는 것 같다. (맥북+사파리 단축어)

개발자 도구를 열었더니 이렇게 소스 코드가 보였다.
친절하게 주석으로 "do it!"이라고 쓰여 있어서 cd==124 조건을 맞춰야 하는 건 알았는데, 도대체 저 cd를 입력받는 창이 어디 있는지 몰라서 한참 헤맸다.

알고 보니 콘솔 창을 열어서 직접 함수 이름 mv에다가 인자로 124를 주면 되는 거였다.

성공....
old-26.

여기는 여니까 소스 코드를 볼 수 있는 버튼이 있었다.

눌러 보니까 이렇게 떴다.

아까 배운 것을 바탕으로 개발자 도구를 열어 봤지만 여기저기 뒤져도 힌트를 찾지 못했다. 결국 ai한테 물어보니까 이건 그렇게 하는 게 아니라고 한다. ㅜㅜ
소스 코드가 이미 나와 있는 문제는 굳이 소스 코드를 보려고 (?) 개발자 도구를 열 필요 없는 듯.
어쨌든 solve(26)이 될 조건을 보면 분명 GET으로 받은 id가 "admin"이 되어야 한다고 나와 있다.
이러고 또 id를 어디에 입력해야 되나 한참을 찾았다.
그런데 GET 메소드라서 그냥 url을 바꾸면 되는 거였다.


이 외에도 == 이렇게 두 개 넣어 보거나, 앞에 물음표를 빼 보거나(ai가 넣으라고 알려 줌, 물음표 앞까지를 파일 이름으로 인식한다고 한다.).... 여러 시도를 해 봤지만 계속 no! 아니면 404 에러가 떴다.
소스 코드를 다시 자세히 보자. 404 에러는 잘 모르겠고 "no!"가 뜰 조건이 위에 하나 더 있으니 그걸 봐야 할 것 같다.

no! 뜨는 조건문은 if( preg_match("/admin/", $_GET['id']) )라고 써져 있는데, 이게 뭔지 내가 어떻게 알아.
어쨌든 일치하는지 확인하는 함수인 것 같다.
즉, GET 입력값에 "admin"이 있으면 no!가 띄워진다는 것이다.
그 다음 줄도 봐야 한다. GET으로 받은 id값을 urldecode 함수에다가 넣었다.
입력값을 한 번 더 디코딩해서 쓴다는 것이다.
몰랐는데 디코딩이라는 것은...
1. 앞에 %가 붙은 글자를 다 대상으로 디코딩하는 것이다.
2. 원하는 글자의 아스키 코드 값을 16진수로 바꾼 뒤 앞에 %를 붙이면 된다.

그러니까 'a'를 디코딩하면 %61이 되는 것이다.
디코딩은 언제 일어나냐면, 입력값을 넘길 때 웹/브라우저에서 자동으로 일어나고(1), 이 문제에서는 urldecode() 함수 때문에 한 번 더 일어난다(2).
그럼 디코딩되는 걸 생각하면 입력값을 어떻게 넘겨야 할까.
- admin -> preg_match()에서 바로 걸림. no!
- %61dmin -> 웹/브라우저에서 넘어가면서 즉시 admin이 됨. 따라서 preg_match()에서 걸림. no!
- %2561dmin -> 웹/브라우저에서 넘어갈 때 %61dmin으로 디코딩됨. preg_match() 함수 무사히 통과. 그리고 urldecode() 함수를 거치면서 admin이 되어서 마지막 성공 조건문도 통과.


그렇게 url에 입력해서 풀었다. 다 왔는데도 이 와중에 id= 안 쓰고 ?%2561dmin만 입력했다가, 물음표 앞으로 안 빼고 id=?%2561dmin이라고 썼다가, 우여곡절이 많았다. 막 넣지 말고 생각을 하면서 풀자!!
