<?php
include "./config.php";
login_chk();
$db = dbconnect();
if(preg_match('/prob|_|\.|\(\)/i', $_GET[id])) exit("No Hack ~_~");
if(preg_match('/prob|_|\.|\(\)/i', $_GET[pw])) exit("No Hack ~_~");
$query = "select id from prob_cobolt where id='{$_GET[id]}' and pw=md5('{$_GET[pw]}')";
echo "<hr>query : <strong>{$query}</strong><hr><br>";
$result = @mysqli_fetch_array(mysqli_query($db,$query));
if($result['id'] == 'admin') solve("cobolt");
elseif($result['id']) echo "<h2>Hello {$result['id']}<br>You are not admin :(</h2>";
highlight_file(__FILE__);
?>
코드가 전과 다르다고 하면 결과값의 유무가 아닌 admin 아이디를 찾고 있다.
이번 문제의 정규식도 아래와 같은 문자들을 필터링한다.
그래서 이전에 먼저 공격 계획을 짰는데 아래와 같이 하면 될 거 같다.
이번 역시 우회하는 문자가 핵심적인 것들을 필터링하지 않아서 쉬운 난이도라고 생각이 들었다.
아래처럼 익스플로잇을 하면
id로는 admin을 찾게되고 그 뒤로는 주석에 의해서 무효화가 되면서 COBOLT가 Clear되게 된다.
아직까지는 메우 쉬운 난이도이다.