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)
성공!
[xcz] prob 21 PHP Obfuscation Crack (진행 중) (0) | 2022.07.29 |
---|---|
[xcz] prob 19 Revershit! (미진행) (0) | 2022.07.29 |
[xcz] prob 17 Password Recover... (0) | 2022.07.25 |
[xcz] prob 16 Mountains beyond mountains (0) | 2022.07.22 |
[xcz] prob 15 Tic-Tac-Toe! (0) | 2022.07.21 |
댓글 영역