안녕하세요. 오늘은 webhacking 26번 문제를 풀어보겠습니다.

홈페이지로 들어가 webhacking 26번을 눌러주세요.

심플하군요. 한 번 눌러봅시다.

굉장히 간단한 소스입니다. id의 값이 admin이면 문제가 해결된다는군요. 그런데

앞의 eregi함수를 보시면 get[id]에서 admin이란 문자열이 보이면 함수가 종료된다고 하는군요. 그러면 admin을 다른 형태의 값으로 넣어줄 필요가 있습니다.

그런데 if문 위쪽을 보시면 id에 urldecode(get[id])를 저장한다는군요. urldecode는 해당문자열을 url디코딩하는 함수입니다. 그러면 뭐.. admin을 url인코딩한 값을 id에 넣어주면 urldecode에 의해 admin으로 바뀔거고 그러면 문제가 해결됩니다.

url 인코딩 표를 이용해서 admin을 바꾸면 %61%64%6D%69%6E가 됩니다. 넣어줍시다.

이런 eregi에 의해 막혔습니다. 분명 eregi가 urldecode함수보다 앞에 있기 때문에 urldecode에 의해 admin이 된다 하더라도 eregi가 잡아낼 수는 없습니다. 그렇다면 가능성은 하나이죠.

자동으로 %61%64%6D%69%6E가 디코딩 됐다는 것입니다. urldecode에 의해서가 아닌 그냥 자동으로 디코딩이 되버렸기 때문에 eregi에 의해 막힌 것이지요. 

인터넷에서 알아보니 원래 웹 서버와 브라우저 사이에서 데이터 교환시 브라우저는 폼에서 입력받은 데이터를 자동으로 인코딩한 값을 PHP로 보내고 PHP는 받은 인코딩된 값을 자동으로 디코딩하게 된다는 군요.

그렇다면 답은 나왔습니다.

%61%64%6D%69%6E를 한번 더 인코딩 하는 것이지요. 그러면 자동으로 디코딩이 되어도 

%61%64%6D%69%6E가 될 것이고 eregi에 걸리지 않게 된 후 urldecode에 의해 디코딩이 되어 admin이 될 것입니다.

인코딩 하러 가 봅시다. 구글에서 사이트를 찾아 인코딩 해 봅시다.

%2561%2564%256D%2569%256E가 나왔군요. id에 넣어 봅시다.

엔터를 치시면

네 이것으로 문제풀이를 마치겠습니다.


'Webhacking' 카테고리의 다른 글

webhacking 6번 문제  (0) 2015.10.12
webhacking 15번 문제  (0) 2015.10.12
webhacking - 26번 문제  (0) 2015.10.02
webhacking - 18번 문제  (0) 2015.10.02
webhacking - 60번 문제  (0) 2015.09.25
webhacking - 20번 문제  (0) 2015.09.25
Posted by englishmath