상세 컨텐츠

본문 제목

[xcz] prob 18 Web Basic

write up/xcz

by ユンジ 2022. 7. 26. 20:55

본문

http://xcz.kr/START/prob/prob18.php

 

http://xcz.kr/START/prob/prob18.php

 

xcz.kr

 

소스를 보면 이렇게 나오는데 구루에서 html을 듣지도 않았고 웹 프로그래밍 강의도 안 들어서 web 문제가 나오면 항상 막막하다...........................

 

<?
$key = "Congratulations!</br>Key is ??????????????????";
$liillillilliliili = @$_COOKIE['c'];
$liillillliiiliili = @$_GET['g'];
$lilllillliiiliili = @$_POST['p'];
if(empty($liillillilliliili) || empty($liillillliiiliili) || empty($lilllillliiiliili)){exit ('wrong T.T');}
$lililillliiiliili = $liillillliiiliili . $liillillilliliili;
$lilililliiiiliill = $lilllillliiiliili;

function test($a){
$b = '';
    for($i=0; $i < strlen($a); $i++){
        $b = $b . ' - ' . ord(substr($a,$i,1));
    }
    return $b;
}
if(test($lililillliiiliili)==" - 103 - 105 - 118 - 101 - 109 - 101 - 112 - 97 - 115 - 115 - 119 - 111 - 114 - 100" || test($lilililliiiiliill) == " - 107 - 101 - 121 - 112 - 108 - 122 - 33"){
    echo $key;
}
else{
    echo 'wrong T.T';
}
?>

이 부분을 해석해야 문제를 풀 수 있을 것 같다.

 

$liillillilliliili = @$_COOKIE['c'];

c라는 쿠키의 값을 읽고 liillillilliliili(이후 편하게 A로 치환해서 사용)에 대입한다.

 

$liillillliiiliili = @$_GET['g'];

GET 함수를 사용해 얻은 값 g를 liillillliiiliili(이후 편하게 B로 치환해서 사용)에 대입한다.

 

$lilllillliiiliili = @$_POST['p'];

POST 함수를 사용해 얻은 값 p를 lilllillliiiliili(이후 편하게 C로 치환해서 사용)에 대입한다.

 

if(empty($liillillilliliili) || empty($liillillliiiliili) || empty($lilllillliiiliili)){exit ('wrong T.T');}

만약 A, B, C 중 하나라도 값이 비어 있으면 wrong T.T을 출력한다.

 

$lililillliiiliili $liillillliiiliili $liillillilliliili;

lililillliiiliili(이후 편하게 D로 치환해서 사용)에 B와 A의 문자열을 더해 대입한다.

PHP에서는 문자열을 더할 때 '.'을 주로 사용한다고 한다.

 

$lilililliiiiliill $lilllillliiiliili;

lilililliiiiliill(이후 편하게 E로 치환해서 사용)에 C의 값을 대입한다.

 

function test($a){
$b = ' ';
    for($i=0; $i < strlen($a); $i++){
        $b = $b . ' - ' . ord(substr($a,$i,1));
    }
    return $b;
}

문자열이 주어지면 한 글자씩 잘라서 아스키 코드로 변환한 뒤 '-'로 이어 주는 test 함수를 선언....

ord() 함수는 인자를 받으면 아스키 코드로 변환해 주는 함수라고 한다!

 

if(test($lililillliiiliili)==" - 103 - 105 - 118 - 101 - 109 - 101 - 112 - 97 - 115 - 115 - 119 - 111 - 114 - 100" || test($lilililliiiiliill) == " - 107 - 101 - 121 - 112 - 108 - 122 - 33"){
    echo $key;
}
else{
    echo 'wrong T.T';
}

test 함수에 D를 주었을 때 값이  - 103 - 105 - 118 - 101 - 109 - 101 - 112 - 97 - 115 - 115 - 119 - 111 - 114 - 100이고

E를 주었을 때 값이  - 107 - 101 - 121 - 112 - 108 - 122 - 33이면 key 출력, 아니면 wrong T.T 출력!

 

아스키 코드를 다시 문자열로 반환하니 D는 givemepassword, E는 keyplz!가 나왔다.

따라서 A는 password, B는 giveme, C는 keyplz!라고 볼 수 있다.

(A와 B 나누는 건 자유롭게 나눠도 될 듯!)

 

c의 값이 password인 쿠키를 추가해 주고.....

 

GET을 사용하려면 주소 뒤에 ?변수 이름 = 값을 넣어 주면 되므로 ?g=giveme를 넣어 준다.

 

이후 POST를 사용해 p에 keyplz!를 넣어 주면 key가 페이지에 나타난다.

(POST 함수에 관한 블로그 글: https://www.codingfactory.net/11603, https://joongwoonc.tistory.com/45)

 

성공!

관련글 더보기

댓글 영역