티스토리 뷰
힌트로 base64 -> base64 인코딩이란 것이 주어졌고, 문제 페이지의 php 소스코드가 링크 되어있다.
먼저 소스 코드를 보도록 하자.
(1) 윗부분
if(!$_COOKIE[user])
{
$val_id="guest";
$val_pw="123qwe";
for($i=0;$i<20;$i++)
{
$val_id=base64_encode($val_id);
$val_pw=base64_encode($val_pw);
}
Setcookie("user",$val_id);
Setcookie("password",$val_pw);
echo("<meta http-equiv=refresh content=0>");
}
(2) 아랫부분
$decode_id=$_COOKIE[user];
$decode_pw=$_COOKIE[password];
for($i=0;$i<20;$i++)
{
$decode_id=base64_decode($decode_id);
$decode_pw=base64_decode($decode_pw);
}
echo("<font style=background:silver;color:black> HINT : base64 </font><hr><a href=index.phps style=color:yellow;>index.phps</a><br><br>");
echo("ID : $decode_id<br>PW : $decode_pw<hr>");
if($decode_id=="admin" && $decode_pw=="admin")
{
@solve(6,100);
}
우선, PHP 소스니까 당연히 윗 부분부터 실행되서 아랫 부분까지 차례대로 실행될 거고, 한번 "<? ?>" 로 닫혔다고 해서 실행이 끝나는 것이 아니라, 또다른 코드를 만나게 되면 이어서 계속 실행한다.
윗부분. "user" 이름의 쿠키 값이 없다면 실행된다.
그리고 "guest"와 "123qwe" 값을 각각 20번 base64 인코딩 후 "user", "password"이름의 쿠키에 설정해 준다.
아랫부분. "user" 이름과 "password" 쿠키 값을 불러와 각각 20번 base64 디코딩 후, 각각 값이 모두 "admin" 이면 문제를 푼 것으로 간주한다.
본래 코드에는 str_replace 함수가 있지만 여기서는 뺐는데, base64값은 (0~9와 알파벳 대소문자, '+', '/' 그리고 '=') 문자로만 구성되어 있으므로, str_replace 함수를 신경 안써도 이 문제를 풀 수 있다.
https://ostermiller.org/calc/encode.html
"admin" 값을 20번 base64인코딩한 후, URL Encoading 하여 "user", "password" 쿠키에 저장한 다음 페이지를 새로고침한다.
URL 인코딩을 하는 이유는 base64로 인코딩된 값 중 HTTP로 전송될 때 미리 예약된 문자열이 들어 있기 때문이다.
(정확하지 않음. 오류 지적바람)
'Web - Security > * webhacking.kr' 카테고리의 다른 글
[webhacking.kr] 5번 문제 - 300p (0) | 2016.04.15 |
---|---|
[webhacking.kr] 4번 문제 - 150p (0) | 2016.04.15 |
[webhacking.kr] 1번 문제 - 200p (0) | 2016.04.05 |