<?php
include "./config.php";
login_chk();
$db = dbconnect();
if(preg_match('/prob|_|\.|\(\)/i', $_GET[pw])) exit("No Hack ~_~");
if(preg_match('/or|and/i', $_GET[pw])) exit("HeHe");
$query = "select id from prob_darkelf where id='guest' and pw='{$_GET[pw]}'";
echo "<hr>query : <strong>{$query}</strong><hr><br>";
$result = @mysqli_fetch_array(mysqli_query($db,$query));
if($result['id']) echo "<h2>Hello {$result[id]}</h2>";
if($result['id'] == 'admin') solve("darkelf");
highlight_file(__FILE__);
?>
이번 문제에서도 id가 admin인 데이터베이스를 찾고 있다.
근데 추가적으로 필터링하는 것이 or와 and가 있다.
지금까지 나도 모르게 or는 ||로 써왔는데 그냥 그대로 쓰면 된다 ...
or를 우회하는 문자는 ||이고 and를 우회하는 문자는 &&이다.
이건 프로그래밍을 하다보면 다 자연스럽게 익어있을 것이다.
그럼 먼저 아래에 pw부분에 대입할 쿼리를 생각해보자.
별 다를 것 없이 아래와 같이 해주면 된다.
마지막 공백은 탭으로 우회해주고
페이로드로 보내게 되면
flag를 얻을 수 있다.