ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • SQL-Injection 정리(1)
    Web 2020. 3. 19. 19:01

    기본적인 에러기반 SQL Injection --> ' or '1=1

     

    이것을 기본으로 필터링 또는 우회해서 문제를 푼다.

    ex) select id from test where id='{$_GET[id]}' and pw='{$_GET[pw]}'

    현재 GET 방식으로 파라미터를 전달하고 있다. 

    url이 ~~.php?id=admin&&pw=admin

    이라 하면 sql 구문은 select id from test where id='admin' and pw='admin' 으로 삽입이 되어진다.

    여기에 아무 필터링이 없다는 가정하에

    ~~.php?id=admin&&pw=admin' or '1=1 을 입력하게 되면 

    select id from test where id='admin' and pw='admin' or '1=1' 으로 sql구문이 들어가게 된다.

     pw='admin' or '1=1' 에서 결과 값이 참이 되어 admin으로 로그인이 되는것이 아니라,

    id='admin' and pw='admin' 구문이 거짓으로 되고 그 뒤에 or '1=1'이 들어가 (거짓or참 = 참)이 되어서 결과값이 참이 되어 admin으로 로그인이 되는것이다.

     

    los.rubiya.kr 1번문제 gremlin을 보면 

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

    로그인 인증 부분에서 id($result['id']) solve("gremlin");

    으로 result에 id값이 존재한다면 무조건 풀리게 된다.

     

     

    'Web' 카테고리의 다른 글

    웹 취약점 별 어떻게 공격해야 할까?  (0) 2020.12.20
    SQL Injection 정리 3  (0) 2020.12.18
    XSS - 정리 Reflected (1)  (0) 2020.07.09
    Zh3r0 CTF - WriteUp  (0) 2020.06.17
    SQL-Injection (2) 정리 (from_rubiya.kr)  (0) 2020.03.20
Designed by Tistory.