old-24 문제는 client ip와 agent 정보로 시작합니다.
view-source를 새 링크를 통해 열어보았습니다.
소스 코드 분석
if($ip=="127.0.0.1") {
solve(24);
exit();
}
해당 if문을 통해서 $ip의 값이 127.0.0.1을 가질 때 문제가 해결되는 것을 확인할 수 있습니다.
if($REMOTE_ADDR){
$ip = htmlspecialchars($REMOTE_ADDR);
$ip = str_replace("..",".",$ip);
$ip = str_replace("12","",$ip);
$ip = str_replace("7.","",$ip);
$ip = str_replace("0.","",$ip);
}
$ip의 값은 $REMOTE_ADDR의 값에 의해 결정되는 것을 확인할 수 있습니다.
하지만 풀 코드를 보면 $REMOTE_ADDR에 대한 정보는 없어 보입니다.
사용자 입력 함수가 없기 때문에 사용자가 값을 입력하는 것도 아닙니다.
어떻게 적용시켜야 하는지 알 수 없어서 검색을 해보았고,
쿠키를 적용시키면 문제를 해결할 수 있음을 알았습니다.
쿠키값은 웹 브라우저에서 저장되는 키와 값의 조합인 데이터입니다.
필요에 따라 브라우저가 종료돼도 값이 유지되는 쿠키가 있고,
브라우저를 종료하면 같이 소멸하는 쿠키도 있습니다.
사용자가 웹사이트를 나갔다가 다시 들어갔을 때 로그인 상태가 유지되는 것은
쿠키가 저장되어 사용자가 접속한 기록이 남아있었기 때문입니다.
문제 해결을 위해서는 REMOTE_ADDR에 대한 쿠키 키를 지정하고
REMOTE_ADDR이라는 이름에 값을 추가하는 과정이 필요합니다.
크롬에서는 쿠키 값을 설정할 수 있는 EditThisCookie 프로그램을 제공하고 있습니다.
아래의 링크에서 확장 프로그램 추가를 통해 크롬에서 사용할 수 있게 됩니다.
chrome.google.com/webstore/detail/editthiscookie/fngmhnnpilhplaeedifhccceomclgfbg?hl=ko
문제 해결
이제 어떤 값을 지정해야 하는지 알아보겠습니다.
이미 처음에 코드를 해석한 if문을 통해서 127.0.0.1이 정답임을 알고 있습니다.
하지만 값을 그대로 지정하게 되면 필터링이 됩니다. 그 이유는 아래의 조건 때문입니다.
$ip = str_replace("..",".",$ip);
$ip = str_replace("12","",$ip);
$ip = str_replace("7.","",$ip);
$ip = str_replace("0.","",$ip);
str_replace() 함수는 검사하는 문자열($ip)에 조건("..")에 해당하는 문자가 있다면 지정 문자열(".")로 바꿉니다.
127.0.0.1을 입력하게 되면 4가지의 필터링 조건에 의해 1만 남게 됩니다.
그래서 해당 조건을 우회하는 값을 찾아야 합니다.
다행히 코드에는 허점이 있었습니다.
필터링이 되는 값을 중앙에 두고 양쪽에 원하는 값을 삽입하면
필터링되는 값은 ""로 아무런 문자가 입력되지 않기 때문에 양쪽의 값이 합쳐지게 되는 것입니다.
즉, 1122의 값을 지정하면 가운데 12가 아무런 문자가 없는 것으로 변형되어 왼쪽의 1, 오른쪽의 2가 붙어
12가 되는 것입니다. 이를 바탕으로 값을 만들면 112277...00...00...1
EditThisCookie로 쿠키값을 만들어 보겠습니다.
문제가 있는 페이지에서 프로그램을 작동시키면 아래와 같은 화면이 나옵니다.
+를 클릭하여 쿠키를 추가하는 작업을 진행합니다.
쿠키의 이름은 view-source에서 적혀있던 REMOTE_ADDR 스펠링이 정확히 일치하도록 합니다.
값을 입력한 후에는 아래에 No Restriction값을 Lax로 변경해줍니다.
변경하지 않으면 쿠키가 저장되지 않는 현상이 발생합니다!
client ip 값이 127.0.0.1로 변경되고 문제가 해결되는 것을 확인할 수 있습니다!
'작업 > Webhacking.kr' 카테고리의 다른 글
webhacking.kr old-19 이해하기 (0) | 2020.09.02 |
---|---|
webhacking.kr old-6 이해하기 (0) | 2020.09.02 |
webhacking.kr old-18 이해하기 (0) | 2020.08.30 |
webhacking.kr old-17 이해하기 (0) | 2020.08.30 |
webhacking.kr old-16 이해하기 (0) | 2020.08.30 |