Web해킹 챌린지old 6번 문제입니다.
링크에 접속하니 ID와 PW를 출력해주며 현재 guest로 로그인 되어있다고 말합니다.
제시된 소스코드 링크에 접속해보겠습니다.
가장 먼저 봐야할 곳은 아래 구문입니다
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);
}
쿠키값이 어떠한 방식으로 이루어져 있는지 설명하고 있습니다.
id는 guest로 pw는 123qwe로 설정되어있으며 base64를 이용해 20번 암호화 했음을 알 수 있습니다.
이부분이 해결하는 데 키 역할을 하는 부분입니다.
다음 구문을 보면
$val_id=str_replace("1","!",$val_id);
$val_id=str_replace("2","@",$val_id);
$val_id=str_replace("3","$",$val_id);
$val_id=str_replace("4","^",$val_id);
$val_id=str_replace("5","&",$val_id);
$val_id=str_replace("6","*",$val_id);
$val_id=str_replace("7","(",$val_id);
$val_id=str_replace("8",")",$val_id);
20번 암호화를 한 이후에 각 숫자를 특수문자로 변경하여 한번더 암호화시키는 것을 알 수 있습니다.
이후 구문은 다시 특수문자를 숫자로 바꾸고 deconde를 20번 반복하는 것이고
위의 구문이 첫 페이지에서 봤던 ID와 PW를 페이지에 출력해주는 구문인 것을 알 수 있습니다.
if($decode_id=="admin" && $decode_pw=="nimda"){
solve(6);
우리가 원하는 solve(6)를 실행 하려면 ID=admin, PW=nimda 를 입력하면 된다는 것을 조건으로 알 수 있는데
로그인 창이 없으므로 우리는 admin과 nimda를 20번 base64로 암호화 하고 숫자는 특수문자로 바꿔
쿠키 값을 수정하는 방식으로 해결해야 합니다.
작성은 간편한 파이썬 코드를 이용했습니다.
절반의 구문만으로도 출력은 되지만 위의 구문만으로는 정확히 암호화가 되었는지 확인이 되지 않아
Decode하는 구문을 추가해 마지막에 admin이 출력되는지 확인합니다.
확실하게 admin이 출력되며 암호화도 완벽하게 되었습니다.
암호화된 부분을 쿠키값에 대입해보겠습니다.
solve(6)가 실행되어 문제를 해결했습니다!
'Wargame(Web) > Webhacking.kr Writeup' 카테고리의 다른 글
WebHacking Writeup 7번 문제 (0) | 2022.07.06 |
---|---|
Challenge(old)-03번 문제 Writeup (0) | 2022.06.15 |
Challenge(old)-11번 문제 Writeup (0) | 2022.06.15 |
Challenge(old)-10번 문제 Writeup (0) | 2022.06.15 |
Challenge(old)-01번 문제 Writeup (0) | 2022.06.14 |