티스토리 뷰



힌트로 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>&nbsp;&nbsp;HINT : base64&nbsp;&nbsp;</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
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함