old-6의 페이지 구성은 view-source, ID 값과 PW 값입니다.
view-source 링크를 새 페이지로 열어보았습니다.
소스 코드 분석
php 코드 부분을 확인해 보았습니다.
$val_id="guest";
$val_pw="123qwe";
for($i=0;$i<20;$i++){
$val_id=base64_encode($val_id);
$val_pw=base64_encode($val_pw);
}
base64_encode()는 base64 방식으로 문자열을 인코딩하는 함수입니다.
데이터를 ASCII 영역의 값으로 암호화한다고 생각하시면 됩니다.
반대의 개념으로 복호화를 진행하여 원래의 값을 가져오는 함수는 base64_decode()입니다.
코드를 해석해보면 $val_id와 $val_pw의 값을 20번 인코딩한다는 것입니다.
그 밑으로는 str_replace() 함수를 통해서 특정 문자를 바꾸는 작업을 가집니다.
Setcookie("user",$val_id,time()+86400,"/challenge/web-06/");
Setcookie("password",$val_pw,time()+86400,"/challenge/web-06/");
Setcookie() 함수는 쿠키를 적용하는 역할을 합니다.
위의 함수에 적용된 인자들의 의미는 다음과 같습니다.
Setcookie(쿠키 이름, 쿠키 값, 적용 시간, 쿠키가 적용된 경로)
user, password라는 이름의 쿠키는 각각 위에서 작업된 $val_id 값과 $val_pw 값을 가지며
86400초 (24시간 x 60분 x 60초)의 시간 동안 유지되고,
/challenge/web-06/에 속한 경로에 쿠키가 적용되었음을 의미합니다.
이제 php코드(2)를 확인해 보겠습니다.
for($i=0;$i<20;$i++){
$decode_id=base64_decode($decode_id);
$decode_pw=base64_decode($decode_pw);
}
if($decode_id=="admin" && $decode_pw=="nimda"){
solve(6);
}
이번에는 base64_decode() 함수로 디코드 과정을 통해 값을 찾아내는 과정을 거칩니다.
디코드 된 값이 $val_id는 admin, $val_pw는 nimda라면 문제가 해결되는 구조입니다.
첫 과정에서는 guest와 123qwe의 값으로 인코딩 작업을 가졌기 때문에 해답이 아닙니다.
그래서 현재의 쿠키 값을 admin과 nimda로 인코딩한 결과로 변경해야 합니다.
문제 해결
간단하게 php 코드를 실행시킬 수 있는 사이트를 활용하겠습니다.
인코딩 작업은 view-source에서 제공된 소스의 일부를 활용하여 쉽게 적용하였습니다.
<?php
$val_id="admin";
$val_pw="nimda";
for($i=0;$i<20;$i++){
$val_id=base64_encode($val_id);
$val_pw=base64_encode($val_pw);
}
echo $val_id;
echo ("\n");
echo $val_pw;
?>
인코딩 된 값을 echo를 통해 출력하여 알 수 있도록 합니다.
결과를 보시면 긴 문자열이 나타난 것을 볼 수 있습니다.
얼핏 보면 두 문자열이 비슷해 보이겠지만, 문자열 중간을 보시면 값이 다름을 알 수 있습니다.
이제 인코딩 된 값을 쿠키에 적용시키도록 하겠습니다.
쿠키 적용은 크롬에서 EditThisCookie 확장 프로그램을 사용하였습니다.
user와 password 쿠키에 각각 admin, nimda 값을 인코딩한 문자열을 붙여 넣기 합니다.
적용이 완료되면 성공 화면이 나타나는 것을 확인할 수 있습니다!
'작업 > Webhacking.kr' 카테고리의 다른 글
webhacking.kr old-25 이해하기 (0) | 2020.09.03 |
---|---|
webhacking.kr old-19 이해하기 (0) | 2020.09.02 |
webhacking.kr old-24 이해하기 (0) | 2020.09.01 |
webhacking.kr old-18 이해하기 (0) | 2020.08.30 |
webhacking.kr old-17 이해하기 (0) | 2020.08.30 |