• 카테고리

    질문 & 답변
  • 세부 분야

    보안

  • 해결 여부

    미해결

select * from member where id= '1' or '1'='1' --

21.03.04 05:58 작성 조회수 371

1

SQL 인젝션 관련하여 질문드립니다.

제목처럼 -- 나 # 등의 주석처리로 로그인을 우회할 수 있는 경우는

insequre_website 의 login.php 에서 로그인을 처리하는 로직 (하단)처럼 

id값과 pw 값을 동시에 받아서 query 로 넘기는 경우만 해당하는거죠? 

  $query = "select * from members where id='{$id}' and password='{$password}'";

즉, 하단의 로직처럼  일단 id가 있는지 확인하고, 

id가 있을 경우 pw값 일치여부를 보는 경우엔 주석처리로 로그인 우회가 안되는게 맞는거죠? 

감사합니다! 

<?php
 
        session_start();
 
        $connect = mysqli_connect("localhost"""""") or die("fail");
 
        //입력 받은 id와 password
        $id=$_GET['id'];
        $pw=$_GET['pw'];
 
        //아이디가 있는지 검사
        $query = "select * from member where id='$id'";
        $result = $connect->query($query);
 
 
        //아이디가 있다면 비밀번호 검사
        if(mysqli_num_rows($result)==1) {
 
                $row=mysqli_fetch_assoc($result);
 
                //비밀번호가 맞다면 세션 생성
                if($row['pw']==$pw){
                        $_SESSION['userid']=$id;
                        if(isset($_SESSION['userid'])){
                        ?>      <script>
                                        alert("로그인 되었습니다.");
                                        location.replace("./index.php");
                                </script>
<?php
                        }
                        else{
                                echo "session fail";
                        }
                }
 
                else {
        ?>              <script>
                                alert("아이디 혹은 비밀번호가 잘못되었습니다.");
                                history.back();
                        </script>
        <?php
                }



출처: https://chamggae.tistory.com/83 [silqia 공부 블로그]

답변 1

답변을 작성해보세요.

0

안녕하세요.

이 경우에도 SQL 인젝션 취약점이 존재할 경우 인증 우회, 데이터 조회 공격이 가능합니다.

말씀하신 인증우회 패턴으로는 되지는 않으나 , 공격 방식을 조금 다르게하면 공격이 가능합니다.

때문에 SQL 인젝션에 대한 취약점을 방어하시는 것이 1순위가 되겠죠.ㅎㅎ