Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 신촌 소문난집
- 화이트 해커를 위한 웹 해킹의 기술
- 홍대 카페 장쌤
- 토라비
- 예쁜술집 예술
- graphql mutation error
- apolloclient
- graphql
- 비동기배열처리방법
- 화이트해커를 위한 웹 해킹의 기술
- graphql with reactnative
- graphql with RN
- 도그존
- 잠실새내 도그존
- promise처리
- 운정 소바동
- 홍대 토라비
- useMutation error
- 홍대 예술
- 금별맥주
- promise메서드
- 지보싶 신촌점
- graphql 400
- 비동기배열
- 고르드
- 잠실새내
- typescript
- graphql react native
- 앙버터마카롱
- apollo react native
Archives
- Today
- Total
yehey's 공부 노트 \n ο(=•ω<=)ρ⌒☆
challenge (old-6) 본문
6번 풀이
소스 코드를 먼저 확인해보자
<?php
include "../../config.php";
if($_GET['view_source']) view_source();
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);
}
$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);
$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);
Setcookie("user",$val_id,time()+86400,"/challenge/web-06/");
Setcookie("password",$val_pw,time()+86400,"/challenge/web-06/");
echo("<meta http-equiv=refresh content=0>");
exit;
}
?>
<html>
<head>
<title>Challenge 6</title>
<style type="text/css">
body { background:black; color:white; font-size:10pt; }
</style>
</head>
<body>
<?php
$decode_id=$_COOKIE['user'];
$decode_pw=$_COOKIE['password'];
$decode_id=str_replace("!","1",$decode_id);
$decode_id=str_replace("@","2",$decode_id);
$decode_id=str_replace("$","3",$decode_id);
$decode_id=str_replace("^","4",$decode_id);
$decode_id=str_replace("&","5",$decode_id);
$decode_id=str_replace("*","6",$decode_id);
$decode_id=str_replace("(","7",$decode_id);
$decode_id=str_replace(")","8",$decode_id);
$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);
for($i=0;$i<20;$i++){
$decode_id=base64_decode($decode_id);
$decode_pw=base64_decode($decode_pw);
}
echo("<hr><a href=./?view_source=1 style=color:yellow;>view-source</a><br><br>");
echo("ID : $decode_id<br>PW : $decode_pw<hr>");
if($decode_id=="admin" && $decode_pw=="nimda"){
solve(6);
}
?>
</body>
</html>
소스 코드가 매우 길지만 두 부분으로 나누어서 확인해보자!
우선 첫번째 php 구간을 확인해보면 user 쿠키값이 없을 때 조건문이 실행된다.
id와 pw를 각각 20번씩 base64로 encoding 해주고 1~8까지 숫자를 문자로 치환해주는 과정을 거쳐서 user, password 쿠키에 값을 저장한다.
두번째 php 구간은 user, password 쿠키 값을 가져와서 1~8에 해당하는 문자를 숫자로 되돌려주고 치환된 값을 base64로 20번 decode 해준다.
이렇게 얻은 id값이 admin, pw값이 nimda 라면 6번문제가 해결된다!
그럼 id가 admin, pw가 nimda 라고 가정하고 각 값에 해당하는 쿠키 값을 생성해보자
첫번째 php 구간의 과정을 id에 admin, pw에 nimda를 대입해서 실행하면 쿠키값을 얻을 수 있을 것이다!
해당 페이지에서 과정을 진행하는 것 보다 php코드를 실행하는 사이트나 파이썬 코드를 작성해서 쿠키 값을 얻는게 더 간단할 것이라고 생각해서 파이썬으로 작성해보았다!
import base64
import sys
#id와 pw 값 지정
_id='admin'
_pw='nimda'
#utf-8로 encode (base64 encode 진행을 위해)
_id=_id.encode('utf-8')
_pw=_pw.encode('utf-8')
i=0
for i in range(20):
_id=base64.b64encode(_id)
_pw=base64.b64encode(_pw)
#utf-8 decode
_id=_id.decode()
_pw=_pw.decode()
_id.replace('1','!')
_id.replace('2','@')
_id.replace('3','$')
_id.replace('4','^')
_id.replace('5','&')
_id.replace('6','*')
_id.replace('7','(')
_id.replace('8',')')
_pw.replace('1','!')
_pw.replace('2','@')
_pw.replace('3','$')
_pw.replace('4','^')
_pw.replace('5','&')
_pw.replace('6','*')
_pw.replace('7','(')
_pw.replace('8',')')
#쿠키 값 출력
print('id:',_id)
print('pw:',_pw)
코드를 실행해보면 다음과 같은 쿠키가 출력된다.
이제 얻은 쿠키 값을 EditThisCookie 라는 크롬 확장 프로그램을 통해 변경해서 새로고침하면 6번 문제가 해결된다.
'wargame 풀이 > webhacking.kr' 카테고리의 다른 글
challenge (old25) (0) | 2021.01.21 |
---|---|
challenge (old-42) (0) | 2021.01.19 |
challenge (old-45) (0) | 2021.01.15 |
challenge (old-44) (0) | 2021.01.14 |
challenge (old-18) (0) | 2020.10.17 |
Comments