web_security/Lord Of SQL

[LOS : Lord Of SQL Injection] 1번 Gremlin 문제 풀이

HawordFREAKEK 2022. 6. 4. 13:07

네 안녕하세요. Godhaword 입니다.

맨날 Lord Of SQL Injection(이하  los, 혹은 LOS) 정리해서 올려야겠다고 생각은 하는데 귀찮아서 안올리게 되더라구요.
LOS의 앞 쪽 문제는 SQLI에 대한 기본 상식을 물어보는 문제들 입니다.
그래서 생각난 김에 한 번 진도 쫙 뽑아보겠습니다.

 

 

<?php
  include "./config.php";
  login_chk();
  $db = dbconnect();
  if(preg_match('/prob|_|\.|\(\)/i', $_GET[id])) exit("No Hack ~_~"); // do not try to attack another table, database!
  if(preg_match('/prob|_|\.|\(\)/i', $_GET[pw])) exit("No Hack ~_~");
  $query = "select id from prob_gremlin where id='{$_GET[id]}' and pw='{$_GET[pw]}'";
  echo "<hr>query : <strong>{$query}</strong><hr><br>";
  $result = @mysqli_fetch_array(mysqli_query($db,$query));
  if($result['id']) solve("gremlin");
  highlight_file(__FILE__);
?>

 

이 문제를 어려워하신다면 웹 해킹에 대해 방금 입문한 초심자라고 생각합니다.

1. 아니 입력창이 있어야 뭐 입력을 하지
 - POST 방식이 아닌 GET 방식에선 url에 { ?[변수] =  } 이런 식으로도 값을 넘겨줄 수 있습니다.

2. 내가 알던 웹해킹 사이트랑 다른데?
 -   $query "select id from prob_gremlin where id='{$_GET[id]}' and pw='{$_GET[pw]}'";
 이 쿼리문을 보시고 
      if($result['id']) solve("gremlin");
  solve 까지 유도해 내시면 됩니다.

위 문제는 풀이 방식이 크게 두가지로 나뉜다고 생각합니다.

  1. ' or 1=1#
    - 제가 생각하는 정석 풀이입니다.
  2. admin'#
    - admin 이란 계정이 해당 DB에 있을지 없을지 모르는 상황이므로 통상적으로 사용하기엔 1번 방법이 더 좋다고 생각합니다.

 

 

  • 이번 문제로 알 수 있는 것
    - LOS의 문제 유형과 내가 지금 LOS를 풀어도 되는가를 확인(1번 못 풀어서 답보러 오신분은 아직 LOS 푸시면 안된다고 생각합니다. 기본부터 공부하고 오세요)
  • Key Point
     
' or 1=1#