<?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__);
?>
저번 Gremlin과 비슷한 소스 코드이다.
가장 큰 차이점은 pw
값이 md5()
함수를 32자리의 16진수 값을 반환하게 된다.
md5()
로 인해 pw
로 뚫으려면 길어지므로 그냥 문제 취지로 추정되는 id
를 이용해보겠다.
소스 코드를 보면 id=='admin
일 때 문제가 해결된다. 따라서 id
값에 admin
값을 넣어주고 나머지 뒤에 존재하는 쿼리는 주석으로 씹어주면 해결이 된다.
https://los.rubiya.kr/chall/cobolt_b876ab5595253427d3bc34f1cd8f30db.php?id=admin%27%23