일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- webhacking
- robot image
- httplib2
- http.client
- urllib.request
- HTML
- js 해석
- Visual sutdio
- webhacking 6
- php base64 encode
- 쿠키 사용법
- php 해석
- hacking
- php
- 비주스
- webhacking.kr 14
- php code
- hidde flag
- webhacking.kr
- web cookie
- webhacking 14
- aiohttp
- faster_than_requests
- js code 해석
- js 문제
- js 코드
- Web
- 쿠키는 맛있음
- php code 해석
- repl.lt
- Today
- Total
it 공부 일기 - 워게임 ctf 풀이 및 언어 강좌모음
webhacking 6번 문제 php 코드 해석 본문
webhacking.kr 의 6번 문제 php 코드를 보면
부분이
인코딩 시키는 부분과
디코딩 시키는 부분이있다.
이제 하나씩
해석을 해보자
include "../../config.php";
- include 함수를 이용해 ../../ 위치에있는 config.php 파일을 포함한다.
if($_GET['view_source']) view_source();
- 만약에 $_GET 배열중에 view_source 키값이 존재한다면 view_source() 라는 함수를 불러온다
if(!$_COOKIE['user']){
- 만약에 $_COOKIE(쿠키) 배열중에 user 이라는 쿠키가 존재하지 않으면
$val_id="guest";
- $val_id 라는 이름으로 guest 문자열을 $val_id 변수에 저장
$val_pw="123qwe";
- $val_pw라는 이름으로 123qwe 문자열을 $val_pw 변수에 저장
for($i=0;$i<20;$i++){
-for(초기식,조건식,증감식) 으로 이루어져있는 반복문을 이용하여 i 를 0 부터 20미만까지 1씩 증가하며 20번 반복
$val_id=base64_encode($val_id);
- $val_id 를 base64_encode 함수를 이용하여 인코딩을 시킨후에 $val_id 에 저장
$val_pw=base64_encode($val_pw);
- $val_pw 를 base64_encode 함수를 이용하여 인코딩을 시킨후에 $val_pw 에 저장
}
- $val_id 와 $val_pw 를 base64 인코딩을 for 반복문을 이용하여 20번 인코딩을 시킴
$val_id=str_replace("1","!",$val_id);
- $val_id 에 있는 값중 str_replace 함수를 이용하여 1 이라는 값을 ! 로 치환하여 저장
$val_id=str_replace("2","@",$val_id);
- $val_id 에 있는 값중 str_replace 함수를 이용하여 2 이라는 값을 @ 로 치환하여 저장
$val_id=str_replace("3","$",$val_id);
- $val_id 에 있는 값중 str_replace 함수를 이용하여 3 이라는 값을 $ 로 치환하여 저장
$val_id=str_replace("4","^",$val_id);
- $val_id 에 있는 값중 str_replace 함수를 이용하여 4 이라는 값을 ^ 로 치환하여 저장
$val_id=str_replace("5","&",$val_id);
- $val_id 에 있는 값중 str_replace 함수를 이용하여 5 이라는 값을 & 로 치환하여 저장
$val_id=str_replace("6","*",$val_id);
- $val_id 에 있는 값중 str_replace 함수를 이용하여 6 이라는 값을 * 로 치환하여 저장
$val_id=str_replace("7","(",$val_id);
- $val_id 에 있는 값중 str_replace 함수를 이용하여 7 이라는 값을 ( 로 치환하여 저장
$val_id=str_replace("8",")",$val_id);
- $val_id 에 있는 값중 str_replace 함수를 이용하여 8 이라는 값을 ) 로 치환하여 저장
$val_pw=str_replace("1","!",$val_pw);
$val_pw=str_replace("2","@",$val_pw);
$val_pw=str_replace("3","$",$val_pw);
$val_pw=str_replace("4","^",$val_pw);
$val_pw=str_replace("5","&",$val_pw);
$val_pw=str_replace("6","*",$val_pw);
$val_pw=str_replace("7","(",$val_pw);
$val_pw=str_replace("8",")",$val_pw);
- 변수만 다를뿐이지 str_replace 함수를 이용하여 치환하는 패턴은 $val_id 와 동일
- $val_pw 를 str_replace 함수를 이용해 각 지정한 숫자들을 원하는 특수문자로 치환
Setcookie("user",$val_id,time()+86400,"/challenge/web-06/");
- Setcookie 함수를 이용해 user 쿠키를 생성한 후 $val_id 변수 안에있는 값을 user 값으로 하고 만료시간을 time()+86400 으로 지정하고 경로는 /challenge/web-06/ 으로 한다.
Setcookie("password",$val_pw,time()+86400,"/challenge/web-06/");
- Setcookie 함수를 이용해 password 쿠키를 생성한 후 $val_pw변수 안에있는 값을 password 값으로 하고 만료시간을 time()+86400 으로 지정하고 경로는 /challenge/web-06/ 으로 한다.
echo("<meta http-equiv=refresh content=0>");
- 페이지 소스에 echo 이라는 함수를 이용해 <meta http-equiv=refresh content=0> 를 출력
exit;
- 종료시킨다.
}
그리고 밑에있는 두번째 부분을 살펴보자
$decode_id=$_COOKIE['user'];
- $decode_id 변수명에 cookie 배열중 user 이라는 쿠키 값을 저장한다.
$decode_pw=$_COOKIE['password'];
- $decode_pw 에 cookir 배열중 password 이라는 쿠키값을 저장한다.
$decode_id=str_replace("!","1",$decode_id);
- $decode_id 에 str_replace 함수를 이용해 ! 를 1 로 치환한다.
$decode_id=str_replace("@","2",$decode_id);
- $decode_id 에 str_replace 함수를 이용해 @ 를 2 로 치환한다.
$decode_id=str_replace("$","3",$decode_id);
- $decode_id 에 str_replace 함수를 이용해 $ 를 3 로 치환한다.
$decode_id=str_replace("^","4",$decode_id);
- $decode_id 에 str_replace 함수를 이용해 ^ 를 4 로 치환한다.
$decode_id=str_replace("&","5",$decode_id);
- $decode_id 에 str_replace 함수를 이용해 & 를 5 로 치환한다.
$decode_id=str_replace("*","6",$decode_id);
- $decode_id 에 str_replace 함수를 이용해 *를 6 로 치환한다.
$decode_id=str_replace("(","7",$decode_id);
- $decode_id 에 str_replace 함수를 이용해 ( 를 7 로 치환한다.
$decode_id=str_replace(")","8",$decode_id);
- $decode_id 에 str_replace 함수를 이용해 ) 를 8 로 치환한다.
$decode_pw=str_replace("!","1",$decode_pw);
$decode_pw=str_replace("@","2",$decode_pw);
$decode_pw=str_replace("$","3",$decode_pw);
$decode_pw=str_replace("^","4",$decode_pw);
$decode_pw=str_replace("&","5",$decode_pw);
$decode_pw=str_replace("*","6",$decode_pw);
$decode_pw=str_replace("(","7",$decode_pw);
$decode_pw=str_replace(")","8",$decode_pw);
위에있는 $decode_id 와 변수명만 다를뿐이지 패턴을 똑같다
- $decode_pw 이라는 변수에 str_replace 이라는 함수를 이용해 각 지정한 특수문자를 원하는 문자로 치환함
for($i=0;$i<20;$i++){
-for(초기식,조건식,증감식) 으로 이루어져있는 반복문을 이용하여 i 를 0 부터 20미만까지 1씩 증가하며 20번 반복
$decode_id=base64_decode($decode_id);
-$decode_id 에 base64_decode 함수를 이용하여 base64디코딩을 시킨다.
$decode_pw=base64_decode($decode_pw);
-$decode_pw에 base64_decode 함수를 이용하여 base64디코딩을 시킨다.
}
- $decode_id 와 $decode_pw 를 base64_encode 함수로 디코딩을 for 로 인해 20번 반복 시킴
echo("<hr><a href=./?view_source=1 style=color:yellow;>view-source</a><br><br>");
- echo 함수를 이용하여 웹 페이지에 <hr><a href=./?view_source=1 style=color:yellow;>view-source</a><br><br> 를 출력
echo("ID : $decode_id<br>PW : $decode_pw<hr>");
- echo 함수를 이용하여 웹 페이지에 ID : $decode_id<br>PW : $decode_pw<hr> 를 출력
if($decode_id=="admin" && $decode_pw=="nimda"){
solve(6);
}
- 만약에 $decode_id 와 $decode_pw 가 admin , nimda 이라면 solve(6); 함수를 불러온다.
'wargame code 해석' 카테고리의 다른 글
webhacking 14번 문제 js 코드 해석 (0) | 2021.01.11 |
---|---|
webhacking 1번 문제 PHP 코드 해석 (0) | 2020.07.20 |