본문 바로가기

보안공부/Webhacking.kr 풀이

webhacking.kr 26번 문제 풀이 - 두번인코딩

WEBHACKING.KR 26번 문제 풀이

두번인코딩 ]


오늘은 webhacking.kr의 26번 문제를 풀어보자.

들어가면 이 페이지의 백엔드 코드를 담은 index.phps로 가는 하이퍼링크 하나만 있습니다.


저 링크를 통해 들어가면 이 페이지의 프론트와 백엔드를 모두 확인할 수 있는데, 언제나 그랬듯 백엔드 부분만 살펴볼것이다.

if(eregi("admin",$_GET[id])) { echo("<p>no!"); exit(); } 

GET을 통해 넘어온 id값이 admin이라면 no!를 띄우고 종료한다.

$_GET[id]=urldecode($_GET[id]); 

사이트를 로드할때 처음 하는 인코딩과 별개로 한번 더 인코딩하여 id값으로 설정해준다.

if($_GET[id]=="admin") 
{ 
@solve(26,100); 
}

id값이 admin이라면 문제가 해결된다.


코드도 분석해보았으니 이제 풀어보자.


우선 넘어온 값은 한번 인코딩되어 저장되니 한번 인코딩된 값이 PHP 코드상에서 동작할것이다.

따라서 첫 값은 admin값을 ASCii 인코딩한 값인 %61%64%6D%69%6E이다.


허나, 앞서 언급한 바와 같이 admin이라고 인코딩되어 Request된다.


내부적으로 urlencode함수를 통해 한번 더 인코딩된다.

따라서 우리는 앞서 인코딩한 %61%64%6D%69%6E를 한번 더 인코딩하여야 한다.

따라서 들어갈 값은 %25%36%31%25%36%34%25%36%44%25%36%39%25%36%45이 된다.


그러면 문제가 해결된다.




WEBHACKING.KR 26번 문제 클리어!