<?php
session_start();
require_once "config/dbconn.php";
$userid = $_GET['userid'];
$password = $_GET['password'];
if(isset($userid) && isset($password)) {
$query = "SELECT userid, password FROM user WHERE userid = '${userid}' and password = '".md5($password)."'";
try {
$result = $mysqli->query($query);
$data = mysqli_fetch_array($result);
if(isset($data) && $data[0] == "admin" && $data[1] === md5($password)){
die($flag);
} else {
die("Wrong...");
}
} catch(Exception $e) {
}
} else {
show_source(__FILE__);
}
?>
흠!! 이 문제 못 풀었다...
일단 url로 userid와 password를 전달해주면 조건이 안 맞아서 Wrong이 뜬다.
if(isset($userid) && isset($password)) {
$query = "SELECT userid, password FROM user WHERE userid = '${userid}' and password = '".md5($password)."'";
try {
$result = $mysqli->query($query);
$data = mysqli_fetch_array($result);
if(isset($data) && $data[0] == "admin" && $data[1] === md5($password)){
die($flag);
} else {
die("Wrong...");
}
} catch(Exception $e) {
}
} else {
show_source(__FILE__);
}
조건 부분 다시 체크해보면, 일단 userid와 password를 전달 받지 못하면 코드를 보여준다.
userid와 password를 전달받으면
SELECT userid, password FROM user WHERE userid = '${userid}' and password = '".md5($password)."'
이 형식으로 쿼리를 전달한다.
if(isset($data) && $data[0] == "admin" && $data[1] === md5($password)){
die($flag);
} else {
die("Wrong...");
}
전달된 쿼리 결과, 즉 DB에서 username이 admin이고 admin의 password가 해싱된 값과 url로 전달받은 password를 md5로 해싱한 값이 일치하면 flag를 알려준다. 일단 뭘 시도해봤냐면...
등등등... 근데 다 실패!! password 부분을 통째로 주석처리하면 password가 전달되지를 않으니 코드가 나오고.... 아무튼 실패 실패 실패ㅠ