WriteUp/LOS_rubiya

LOS -rubiya : Cobolt

vared 2020. 5. 7. 19:09

<코드 분석>

<?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__); 
?>

이전 문제와 비슷한 필터링이다. 

if($result['id'] == 'admin'solve("cobolt"); 여기서 result 의 id 값이 admin 이면 문제가 풀린다.

pw 부분에 걸려있는 것은 md5 해쉬로, 암호화다. 굳이 저기까지 손댈 필요 없다는 의미로 받아들이면 될듯 하다.

다른 아이디를 가져온다면, Hello ___ 로 표시해 준다.


<해설>

먼저 이전 문제와 동일하게 query 를 넣어보자.

?id='or 1=1%23

저기 rubiya를 admin으로 바꿔주면 되겠다. 우리는 아무 값도 id 안에 넣어주지 않았으니까. DB안의 값중 제일 상단에 있는 rubiya라는 아이디를 가져온 것이다. 그렇다면 원하는 id 값을 주면 되겠다. 

?id=admin'%23

Clear!