1. PHP란 무엇인가
개념 정리
PHP
개인의 홈페이지를 만들 도구로 처음 개발되었으며 주로 HTML 코드를 프로그래밍적으로 생성
서버쪽에서 실행 되는 프로그래밍 언어(server side script에 해당)
Personal Home Page Tools 의 약자에서 PHP:Hypertext Preprocessor 로 의미가 변경됨
웹에 최적화된 언어로 웹 개발에 필요한 많은 로직들이 함수의 형태로 미리 제공함
Server And Clinet
클라이언트에게는 WB(웹브라우저)라는 어플리케이션이, 서버에게는 WS(웹서버)라는 어플리케이션이 존재
클라이언트가 WB이용해 요청을 하면 WS는 응답
이 때, 클라이언트가 요청한 것이 php에 관한 것이라면 WS는 PHP engine을 호출해 처리한 뒤 다시 돌려받고, html로 전달한다.

PHP Application
확장자가 php인 파일 제작
<?php 로 시작하며 ?> 로 끝남
echo : 뒤따라오는 데이터를 화면에 출력
ex)
<?php echo "Hello World!"; ?>
숫자
<?php echo 숫자; ?>형식으로 숫자 자리에 계산식을 입력하면, 계산된 값을 출력
var_dump(expression)함수: expression이 어떤 형식인지 알려주는 함수, 데이터형에 대한 검사와 함께 출력까지 강제로 진행 - 활용도가 떨어짐
ex)
var_dump(6) - 결과: int(6)
var_dump(6.1) - 결과: float(6.1)
var_dump("6") - 결과: string(1) "6"
문자열
""(큰따옴표) 혹은 ''(작은 따옴표)로 감쌈
문자열 안에서 큰따옴표를 출력하고자 한다면 전체 문자열을 작은따옴표로 묶으면 가능
또는 그 앞에 백슬래시(\)를 붙이는 방법도 존재(백슬래시 바로 뒤 문자는 escaping됨)
변수 혹은 문자열을 결합해 출력하고자 한다면 온점(.)사용
주석(comment)
코드에 부가적인 설명을 쓰거나 사용하지 않는 코드를 비활성화시키기 위해서 사용
#대신에 //를 사용 가능
긴 구간을 주석으로 처리하고 싶다면 /* */를 사용
변수
선언 방법 : $변수이름 = 대입할 값(숫자,문자열 모두 가능)
사용 및 호출 : $변수이름
코드의 재활용성을 높여주는 역할을 함
상수
변하지 않는 값
필요에 따라 사용자가 직접 상수를 정의 할 수 있음
선언 : define(상수의 이름, 상수의 값)
사용 : 인용부호 없이 상수의 이름을 적어주면 됨
변수에 담긴 데이터 형을 검사할 때 사용하는 함수
gettype: 인자로 전달된 값의 데이터 형을 출력
settype: 첫번째 인자로 주어진 값을 두번째 인자에 해당하는 데이터 형으로 변경
가변변수
변수의 이름을 변수로 변경하는 기능
ex)
<?php
$title = 'subject';
$$title = 'PHP tutorial';
echo $subject; // PHP tutorial
?>
비교연산자
== : 좌우항이 같으면 true 다르면 false
!= : == 반대 결과
=== : 데이터 형식까지 완전히 같으면 true 다르면 false
입출력과 폼
기본적으로는 URL로 입력을 받지만, 사용자가 일일이 URL에 입력하면 불편함이 따르므로 form을 이용
$_GET[값의 이름]
ex)
$_GET['id'].','.$_GET['password']
'?'는 주소와 데이터를 구분해주는 구분자

'&'는 값과 값을 구분해주는 구분자

'='는 값과 값 사이의 구분자

form
사용자가 입력한 정보를 받아서 서버로 전송하기 위한 HTML 태그

input 태그로 만들어진 입력컨트롤에 입력된 값이 form 태그에서 설정한 action 뒤의 주소로 전달
전달 방법은 form 태그 안의 method로 정함
GET 과 POST 비교
HTML은 데이터를 전송하고 PHP는 데이터를 수신해 처리하며, 서버와 클라이언트의 통신은 HTTP라는 통신 규약에 의해 이루어지며 통신 방법은 GET/POST 등으로 정함
GET
URL상에 서버로 전송하는 데이터가 포함, URL을 복사해 공유하는 등 반드시 주소를 식별해야 할 때 GET을 사용
POST
URL상에 서버로 전송하는 데이터가 포함x ,로그인 등 비밀 유지 위한 상황에는 POST를 사용
조건문
if(조건){ }
else if (조건) { }
else { }
Boolean 자료형
True(혹은 0이 아닌 숫자)와 False(혹은 0, 값이 없는 배열, 빈 문자열, NULL 등) 가능
논리연산자
and : 좌우항 다 참일 때 참이 됨
or : 좌우항 중 하나라도 참일 때 참이 됨
! : Boolean의 값을 역전시킴
반복문
while
while(조건){ 반복실행할 코드; }
for
for(초기화; 반복 지속 여부 ; 반복 실행) { 반복실행할 코드; }
제어
break(반복문을 빠져나온다)
continue(실행은 중단하고 반복문은 계속 지속된다)
함수
function 함수명 ( 인자1, 인자2, ....) {
코드
return 반환값; }
호출: 함수명 ( 인자1, 인자2, ....);
배열
다른 언어에서는 리스트라고도 하는 형태의 데이터 타입
연관된 데이터를 모아서 관리하기 위해서 사용하는 데이터 타입
변수가 하나의 데이터를 임시로 저장하기 위한 것이라면 배열은 여러 개의 데이터를 저장하기 위한 것
$배열명 = [요소1, 요소2, ...];
호출 : 배열명[인덱스]
배열의 제어
count(배열명) : 배열의 크기 반환하는 함수
array_push($배열명, 추가할 요소) : 배열의 끝에 요소 하나를 추가하는 함수
array_merge($배열명, [추가1, 추가2, ...]) : 배열의 끝에 복수의 요소를 추가하는 함수
array_unshift($배열명, 추가할 요소) : 배열의 처음에 요소를 추가하는 함수
array_slice($배열명, 넣고 싶은 위치, 삭제할 개수, 추가할 요소) : 특정 위치에 (~개만큼 삭제한 뒤) 요소를 추가
array_shift($배열명) : 배열의 첫 번째 요소를 제거
array_pop($배열명) : 배열의 마지막 요소를 제거
sort($배열명) : 배열을 오름차순으로 정렬
rsort($배열명) : 배열을 내림차순으로 정렬
연관배열
PHP에서는 인덱스로 문자를 사용하는 것도 가능
일반적으로 다른 언어에서는 숫자를 인덱스로 사용하는 것을 일반적으로 배열, 혹은 indexed array라고 하고, 문자를 인덱스로 사용하는 것을 연관배열(associative array, hash, dictionary)라고 부르지만 PHP에서는 이를 특별히 구분하지 않고 있기 때문에 하나의 배열의 키 값으로 숫자와 문자 모두를 사용 가능
$배열명 = array(key=>value, key=>value, ...);
$배열명 = [];
$배열명[key] = value; # value
호출 : $배열명[key]
foreach 문 : 배열 요소의 개수만큼 반복문을 수행
$배열명 = array(key=>value, key=>value, ...);
foreach($배열명 as $변수1 => $변수2){ 반복실행문; }
ex)
$grades = array('egoing'=>10, 'k8805'=>6, 'sorialgi'=>80);
foreach($grades as $key => $value){
echo "key: {$key} value:{$value}<br />";
}
1.webhacking.kr old 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);
}
/* base64 는 2진 데이터를 ASCII 코드에 해당하는 문자열로 변경해주는 방식을 말하는데 2진 데이터를 ASCII 형태로 변경하는 것을 base64_encode 가 처리해주며, ASCII 형태의 데이터를 2진 데이터로 복원하는 것을 base64_decode 가 처리해 줌*/
$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);
} //decode_id= "guest" , decode_pw="123qwe"
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);
} // "guest"를 "admin"으로 "123qwe"를 "nimda"로 바꾸면 해결!!
?>
</body>
</html>
다음과 같은 코드를 작성하여 encode 시킨다.
<?php
$val_id="admin";
$val_pw="nimda";
for($i=0;$i<20;$i++){
$val_id=base64_encode($val_id);
$val_pw=base64_encode($val_pw);
}
echo $val_id;
echo "\t"; //이거 없으면 어디가 어딘지 알아보기 힘듬
echo $val_pw;
?>
실행된 코드값 - 무지 길다!!
id
Vm0wd2QyUXlVWGxWV0d4V1YwZDRWMVl3WkRSV01WbDNXa1JTVjAxV2JETlhhMUpUVmpBeFYySkVUbGhoTVVwVVZtcEJlRll5U2tWVWJHaG9UVlZ3VlZadGNFSmxSbGw1VTJ0V1ZXSkhhRzlVVmxaM1ZsWmFjVkZ0UmxSTmJFcEpWbTEwYTFkSFNrZGpSVGxhVmpOU1IxcFZXbUZrUjA1R1UyMTRVMkpIZHpGV1ZFb3dWakZhV0ZOcmFHaFNlbXhXVm1wT1QwMHhjRlpYYlVaclVqQTFSMWRyV25kV01ERkZVbFJHVjFaRmIzZFdha1poVjBaT2NtRkhhRk5sYlhoWFZtMXdUMVF3TUhoalJscFlZbGhTV0ZSV2FFTlNiRnBZWlVaT1ZXSlZXVEpWYkZKRFZqQXhkVlZ1V2xaaGExcFlXa1ZhVDJOc2NFZGhSMnhUVFcxb2IxWXhaREJaVmxsM1RVaG9hbEpzY0ZsWmJGWmhZMnhXY1ZGVVJsTk5WMUo1VmpKNFQxWlhTbFpYVkVwV1lrWktTRlpxUm1GU2JVbDZXa1prYUdFeGNHOVdha0poVkRKT2RGSnJhR2hTYXpWeldXeG9iMWRHV25STldHUlZUVlpHTTFSVmFHOWhiRXB6WTBac1dtSkdXbWhaTVZwaFpFZFNTRkpyTlZOaVJtOTNWMnhXWVZReFdsaFRiRnBZVmtWd1YxbHJXa3RUUmxweFVtMUdVMkpWYkRaWGExcHJZVWRGZUdOSE9WZGhhMHBvVmtSS1QyUkdTbkpoUjJoVFlYcFdlbGRYZUc5aU1XUkhWMjVTVGxOSGFGQlZiVEUwVmpGU1ZtRkhPVmhTTUhCNVZHeGFjMWR0U2tkWGJXaGFUVzVvV0ZreFdrZFdWa3B6VkdzMVYySkdhM2hXYTFwaFZURlZlRmR1U2s1WFJYQnhWVzB4YjFZeFVsaE9WazVPVFZad2VGVXlkREJXTVZweVkwWndXR0V4Y0ROV2FrWkxWakpPU1dKR1pGZFNWWEJ2Vm10U1MxUXlUWGxVYTFwb1VqTkNWRmxZY0ZkWFZscFlZMFU1YVUxcmJEUldNalZUVkd4a1NGVnNXbFZXYkhCWVZHdGFWbVZIUmtoUFYyaHBVbGhDTmxkVVFtRmpNV1IwVTJ0a1dHSlhhR0ZVVnpWdlYwWnJlRmRyWkZkV2EzQjZWa2R6TVZZd01WWmlla1pYWWxoQ1RGUnJXbEpsUm1SellVWlNhVkp1UW5oV1YzaHJWVEZzVjFWc1dsaGlWVnBQVkZaYWQyVkdWWGxrUkVKWFRWWndlVmt3V25kWFIwVjRZMFJPV21FeVVrZGFWM2hIWTIxS1IxcEhiRmhTVlhCS1ZtMTBVMU14VlhoWFdHaFlZbXhhVjFsc1pHOVdSbXhaWTBaa2JHSkhVbGxhVldNMVlWVXhXRlZyYUZkTmFsWlVWa2Q0YTFOR1ZuTlhiRlpYWWtoQ1NWWkdVa2RWTVZwMFVtdG9VRll5YUhCVmJHaERUbXhrVlZGdFJtcE5WMUl3VlRKMGExZEhTbGhoUjBaVlZucFdkbFl3V25OT2JFcHpXa2R3YVZORlNrbFdNblJyWXpGVmVWTnVTbFJpVlZwWVZGYzFiMWRHWkZkWGJFcHNVbTFTZWxsVldsTmhWa3AxVVd4d1YySllVbGhhUkVaYVpVZEtTVk5zYUdoTk1VcFZWbGN4TkdReVZrZFdiR1JvVW5wc2IxUldXbmRsYkZsNVkwVmtWMDFFUmpGWlZXaExWMnhhV0ZWclpHRldNMmhJV1RJeFMxSXhjRWhpUm1oVFZsaENTMVp0TVRCVk1VMTRWbGhvV0ZkSGFGbFpiWGhoVm14c2NscEhPV3BTYkhCNFZrY3dOVll4V25OalJXaFlWa1UxZGxsV1ZYaFhSbFp5WVVaa1RtRnNXbFZXYTJRMFdWWktjMVJ1VG1oU2JGcFlXV3hhUm1ReFduRlJiVVphVm0xU1NWWlhkRzloTVVwMFlVWlNWVlpXY0dGVVZscGhZekZ3UlZWdGNFNVdNVWwzVmxSS01HRXhaRWhUYkdob1VqQmFWbFp0ZUhkTk1WcHlWMjFHYWxacmNEQmFSV1F3VmpKS2NsTnJhRmRTTTJob1ZrUktSMVl4VG5WVmJFSlhVbFJXV1ZaR1l6RmlNV1JIWWtaV1VsZEhhRlJVVm1SVFpXeHNWbGRzVG1oU1ZFWjZWVEkxYjFZeFdYcFZiR2hZVm14d1lWcFZXbXRrVmtwelZtMXNWMUl6YURWV01XUXdXVmRSZVZaclpGZGliRXB5Vld0V1MySXhiRmxqUldSc1ZteEtlbFp0TURWWFIwcEhZMFpvV2sxSGFFeFdNbmhoVjBaV2NscEhSbGROTW1oSlYxUkplRk14U1hoalJXUmhVbXMxV0ZZd1ZrdE5iRnAwWTBWa1dsWXdWalJXYkdodlYwWmtTR0ZHV2xwaVdHaG9WbTE0YzJOc1pISmtSM0JUWWtad05GWlhNVEJOUmxsNFYyNU9hbEpYYUZoV2FrNVRWRVpzVlZGWWFGTldhM0I2VmtkNFlWVXlTa1pYV0hCWFZsWndSMVF4V2tOVmJFSlZUVVF3UFE9PQ==
password
Vm0wd2QyUXlVWGxWV0d4V1YwZDRWMVl3WkRSV01WbDNXa1JTVjAxV2JETlhhMUpUVmpBeFYySkVUbGhoTVVwVVZtcEJlRll5U2tWVWJHaG9UVlZ3VlZacVFtRlRNbEpJVm10a1dHSkdjRTlaVjNSR1pVWmFkR05GU214U2JHdzFWVEowVjFaWFNraGhSemxWVmpOT00xcFZXbUZrUjA1R1drWndWMDFFUlRGV1ZFb3dWakZhV0ZOcmFHaFNlbXhXVm0xNFlVMHhXbk5YYlVaclVqQTFSMWRyV2xOVWJVcEdZMFZ3VjJKVVJYZFdha1pYWkVaT2MxZHNhR2xTTW1oWlYxZDRiMkl5Vm5OVmJGWlRZbFZhY2xWcVFURlNNVlY1VFZSU1ZrMXJjRWxhU0hCSFZqRmFSbUl6WkZkaGExcG9WakJhVDJOdFJraGhSazVzWWxob1dGWnRNSGhPUm14V1RVaG9XR0pyTlZsWmJGWmhZMVphZEdSSFJrNVNiRm93V2xWYVQxWlhTbFpqUldSYVRVWmFNMVpxU2t0V1ZrcFpXa1p3VjFKV2NIbFdWRUpoVkRKT2MyTkZhR3BTYXpWWVZXcE9iMkl4V25STldHUlZUVlpXTkZVeGFHOWhiRXB6WTBac1dtSkdXbWhaTW5oWFkxWkdWVkpzVGs1WFJVcElWbXBLTkZReFdsaFRhMlJxVW0xNGFGVXdhRU5UUmxweFVtMUdVMkpWYkRaWGExcHJZVWRGZUdOSE9WZGhhMHBvVmtSS1QyUkdTbkpoUjJoVFlYcFdlbGRYZUc5aU1XUkhWMjVTVGxOSGFGQlZiVEUwVmpGU1ZtRkhPVmhTTUhCNVZHeGFjMWR0U2tkWGJXaGFUVzVvV0ZreFdrZFdWa3B6VkdzMVYySkdhM2hXYTFwaFZURlZlRmR1U2s1WFJYQnhWVzB4YjFZeFVsaE9WazVPVFZad2VGVXlkREJXTVZweVkwWndXR0V4Y0ROV2FrWkxWakpPU1dKR1pGZFNWWEJ2Vm10U1MxUXlUWGxVYTFwb1VqTkNWRmxZY0ZkWFZscFlZMFU1YVUxcmJEUldNV2h2V1ZaS1IxTnNaRlZXYkZwNlZHeGFZVmRGTlZaUFZtaFRUVWhDU2xac1pEUmpNV1IwVTJ0b2FGSnNTbGhVVlZwM1ZrWmFjVk5yWkZOaVJrcDZWa2N4YzFVeVNuSlRiVVpYVFc1b1dGbHFTa1psUm1SWldrVTFWMVpzY0ZWWFZsSkhaREZaZUdKSVNsaGhNMUpVVlcxNGQyVkdWbGRoUnpsb1RWWndlbFl5Y0VkV01ERjFZVWhLV2xaWFVrZGFWM2hIWTIxS1IyRkdhRlJTVlhCS1ZtMTBVMU14VlhoWFdHaFlZbXhhVjFsc1pHOVdSbXhaWTBaa2JHSkhVbGxhVldNMVlWVXhXRlZyYUZkTmFsWlVWa2Q0YTFOR1ZuTlhiRlpYWWtoQ1NWWkdVa2RWTVZwMFVtdG9VRll5YUhCVmJHaERUbXhrVlZGdFJtcE5WMUl3VlRKMGExZEhTbGhoUjBaVlZucFdkbFl3V25KbFJtUnlXa1prVjJFelFqWldhMlI2VFZaWmQwMVdXbWxsYTFwWVdXeG9RMVJHVW5KWGJFcHNVbTFTZWxsVldsTmhWa3AxVVd4d1YySllVbGhhUkVaYVpVZEtTVk5zYUdoTk1VcFdWbGN4TkdReVZrZFdXR3hyVWpCYWNGVnRlSGRsYkZsNVpVaGtXRkl3VmpSWk1GSlBWMjFGZVZWclpHRldNMmhJV1RJeFMxSXhjRWhpUm1oVFZsaENTMVp0TVRCVk1VMTRWbGhvV0ZkSGFGbFpiWGhoVm14c2NscEhPV3BTYkhCNFZrY3dOVll4V25OalJXaFlWa1UxZGxsV1ZYaFhSbFp5WVVaa1RtRnNXbFZXYTJRMFdWWktjMVJ1VG1oU2JGcFlXV3hhUm1ReFduRlJiVVphVm0xU1NWWlhkRzloTVVwMFlVWlNWVlpXY0dGVVZscGhZekZ3UlZWdGNFNVdNVWwzVmxSS01HRXhaRWhUYkdob1VqQmFWbFp0ZUhkTk1WcHlWMjFHYWxacmNEQmFSV1F3VmpKS2NsTnJhRmRTTTJob1ZrUktSMVl4VG5WVmJFSlhVbFJXV1ZaR1l6RmlNV1JIWWtaV1VsZEhhRlJVVm1SVFpXeHNWbGRzVG1oU1ZFWjZWVEkxYjFZeFdYcFZiR2hZVm14d1lWcFZXbXRrVmtwelZtMXNWMUl6YURWV01XUXdXVmRSZVZaclpGZGliRXB5Vld0V1MySXhiRmxqUldSc1ZteEtlbFp0TURWWFIwcEhZMFpvV2sxSGFFeFdNbmhoVjBaV2NscEhSbGROTW1oSlYxUkplRk14U1hoalJXUmhVbXMxV0ZZd1ZrdE5iRnAwWTBWa1dsWXdWalJXYkdodlYwWmtTR0ZHV2xwaVdHaG9WbTE0YzJOc1pISmtSM0JUWWtad05GWlhNVEJOUmxsNFYyNU9hbEpYYUZoV2FrNVRWRVpzVlZGWWFGTldhM0I2VmtkNFlWVXlTa1pYV0hCWFZsWndSMVF4V2tOVmJFSlZUVVF3UFE9PQ==
editcthiscookie를 이용하여
id를 user 쿠키 값에, password를 password 쿠키 값에 넣으면 해결!!

2. webhacking.kr old-33
Challenge 33-1
다 위에서 정리한거다.
<hr>
Challenge 33-1<br>
<a href=index.txt>view-source</a>
<hr>
<?php if($_GET['get']=="hehe") echo "<a href=???>Next</a>";
else echo("Wrong");
?>
https://webhacking.kr/challenge/bonus-6/?get=hehe 치면 Next가 뜸
Challenge 33-2
이것도 정리한거다. 흠 아마 코드를 작성해야 할 것 같다.
<hr>
Challenge 33-2<br>
<a href=lv2.txt>view-source</a>
<hr>
<?php if($_POST['post']=="hehe" && $_POST['post2']=="hehe2") echo "<a href=???>Next</a>";
else echo "Wrong";
?>
위에서 예제로 든 코드를 긁어와서 get을 post로 2.php를 lv2.php로 바꾸고 나머지 값도 알맞게 고쳤다.
<form method="post" action="lv2.php">
post : <input type="text" name="post" />
post2 : <input type="text" name="post2" />
<input type="submit" />
</form>
크롬 개발자 도구를 이용하여 <body> 부분에 넣어 주면 입력창이 뜬다.
post에 hehe, post2에 hehe2를 입력하면 Next가 뜬다.
Challenge 33-3
<hr>
Challenge 33-3<br>
<a href=33.txt>view-source</a>
<hr>
<?php
if($_GET['myip'] == $_SERVER['REMOTE_ADDR']) echo "<a href=???>Next</a>";
else echo "Wrong";
?>
- PHP $_SERVER
header 정보, 경로, 스크립트 위치등을 포함한 배열
포함하는 목록을 웹서버에 의해서 생성되며, 웹서버의 버전에 따라 다른 항목을 제공할 수 있음
- PHP $_SERVER["REMOTE_ADDR"] 란?
웹서버에 접속한 접속자의 IP정보를 갖고 있음
https://webhacking.kr/challenge/bonus-6/33.php?myip=자신의 아이피
아이피는 구글에 내 아이피 주소 치면 나온다.
Challenge 33-4 - 아주 짜증나는 문제...
<hr>
Challenge 33-4<br>
<a href=l4.txt>view-source</a>
<hr>
<?php
if($_GET['password'] == md5(time())) echo "<a href=???>Next</a>";
else echo "hint : ".time();
?>
https://webhacking.kr/challenge/bonus-6/l4.php?password= hint시간+100을 md5 해시 변환 후
될때 까지 새로고침
https://www.convertstring.com/ko/Hash/MD5
MD5 해시 - 온라인 MD5 해시 생성기
www.convertstring.com
Challenge 33-5
<hr>
Challenge 33-5<br>
<a href=md555.txt>view-source</a>
<hr>
<?php
if($_GET['imget'] && $_POST['impost'] && $_COOKIE['imcookie']) echo "<a href=???>Next</a>";
else echo "Wrong";
?>
editcthiscookie를 이용
새 쿠키 만들기-> 이름:imcookie , 값: 상관없음(1로 진행했음)
크롬 개발자 도구를 이용하여 <body> 부분에
<form method="POST" action="md555.php?imget=1">
<input type="text" name="impost" />
<input type="submit" />
</form>
넣어 주면 해결
Challenge 33-6
<hr>
Challenge 33-6<br>
<a href=gpcc.txt>view-source</a>
<hr>
<?php
if($_COOKIE['test'] == $_SERVER['REMOTE_ADDR'] && $_POST['kk'] == md5($_SERVER['HTTP_USER_AGENT'])) echo "<a href=???>Next</a>";
else echo "hint : {$_SERVER['HTTP_USER_AGENT']}";
?>
자기 ip주소를 md5 인코딩 후 editcthiscookie를 이용하여
새 쿠키 만들기-> 이름:test , 값: 자기 ip주소를 md5 인코딩한 값
<form method="POST" action="gpcc.php">
KK : <input type="text" name="kk" />
<input type="submit" name="Submit" />
</form>
자기 ip주소를 md5 인코딩한 값 입력 후 제출
Challenge 33-7
<hr>
Challenge 33-7<br>
<a href=wtff.txt>view-source</a>
<hr>
<?php
$_SERVER['REMOTE_ADDR'] = str_replace(".","",$_SERVER['REMOTE_ADDR']);
if($_GET[$_SERVER['REMOTE_ADDR']] == $_SERVER['REMOTE_ADDR']) echo "<a href=???>Next</a>";
else echo "Wrong<br>".$_GET[$_SERVER['REMOTE_ADDR']];
?>
https://webhacking.kr/challenge/bonus-6/wtff.php?(자신의의 아이피주소에서.을 모두 뺀거)=(자신의의 아이피주소에서.을 모두 뺀거)
해결!!
Challenge 33-8
<hr>
Challenge 33-8<br>
<a href=ipt.txt>view-source</a>
<hr>
<?php
extract($_GET); if(!$_GET['addr']) $addr = $_SERVER['REMOTE_ADDR'];
if($addr == "127.0.0.1") echo "<a href=???>Next</a>";
else echo "Wrong"; ?>
주소 뒤에 ?addr=127.0.0.1
해결!!
Challenge 33-9
<hr>
Challenge 33-9<br>
<a href=nextt.txt>view-source</a>
<hr>
<?php
for($i=97;$i<=122;$i=$i+2){
$answer.=chr($i);
}
if($_GET['ans'] == $answer) echo "<a href=???.php>Next</a>";
else echo "Wrong";
?>
bitnami를 이용해
<?php
for($i=97;$i<=122;$i=$i+2){
$a =chr($i);
$answer .= $a;
}
echo $answer;
?>
acegikmoqsuwy를 얻을 수 있다
https://webhacking.kr/challenge/bonus-6/nextt.php?ans=acegikmoqsuwy
Challenge 33-10
<hr>
Challenge 33-10<br>
<a href=forfor.txt>view-source</a>
<hr>
<?php
$ip = $_SERVER['REMOTE_ADDR'];
for($i=0;$i<=strlen($ip);$i++) $ip=str_replace($i,ord($i),$ip);
$ip=str_replace(".","",$ip);
$ip=substr($ip,0,10);
$answer = $ip*2;
$answer = $ip/2;
$answer = str_replace(".","",$answer);
$f=fopen("answerip/{$answer}_{$ip}.php","w");
fwrite($f,"<?php include \"../../../config.php\"; solve(33); unlink(__FILE__); ?>");
fclose($f);
?>
substr( 추출의 대상이 되는 문자열, 추출을 시작하는 위치 [, length ] )
length : 추출할 문자의 개수, 값이 없으면 문자열의 끝까지 추출
음수일 때는 위치를 뜻하고, 그 위치 앞까지의 문자를 추출
다음과 같은 코드를 따서 값을 얻어야 한다.
<?php
$ip = '자신의 아이피 주소';
for($i=0;$i<=strlen($ip);$i++) {
$ip=str_replace($i,ord($i),$ip);
}
$ip=str_replace(".","",$ip);
$ip=substr($ip,0,10);
$answer = $ip*2;
$answer = $ip/2;
$answer = str_replace(".","",$answer);
echo $ip;
echo "\n";
echo $answer;
?>
answer
27577553775
ip
5515510755
라는 결과를 얻을 수 있고
answerip/{$answer}_{$ip}.php 형식으로 나타내면
/answerip/27577553775_5515510755.php이다.
이를 bonus-6뒤에 입력하면 해결!!
