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번 문제 클리어!
'보안공부 > Webhacking.kr 풀이' 카테고리의 다른 글
webhacking.kr 58번 문제 풀이 - 3분카레... 아니 플래시 (0) | 2018.07.21 |
---|---|
webhacking.kr 12번 문제 풀이 - 아すき (0) | 2018.07.20 |
webhacking.kr 25번 문제 풀이 - NULL TO FLAG (0) | 2018.07.18 |
webhacking.kr 24번 문제 풀이 - FILTERED LOCALHOST (0) | 2018.07.17 |
webhacking.kr 18번 문제 풀이 - SQL주사기 (0) | 2018.07.17 |