|
이 부분에 관해 기본적인 개념에 관해 설명을 하고자 합니다. Sql Injection을 아실려면 Sql 쿼리문부터 아셔야 할텐대요. 다음과 같은 간단한 로그인 예제 소스를 한번 보겠습니다. String param1 = request.getParameter("user_id"); String param2 = request.getParameter("user_pw"); rs = stmt.executeQuery("SELECT count(*) FROM user_t WHERE userid = '"+param1+"' AND userpw = '"+param2+"'"); rs.next(); if (rs.getInt(1) == 1) { // 로그인 성공로직 } else { // 로그인 실패로직 } 다음 해당 소스에서 이 부분이 중요한대요. SELECT count(*) FROM user_t WHERE userid = '"+param1+"' AND userpw = '"+param2+"' 자.. 이 쿼리문이 무엇을 의미하냐? 해당 DB내의 userid 테이블내에서 param1과 같은것 그리고! userpw 테이블 내에서 param2와 같은것을 가져오라는 쿼리문 입니다. 쉽죠? param1 과 param2는 위 소스의 아래부분을 통해 우리가 입력하게 됩니다. String param1 = request.getParameter("user_id"); String param2 = request.getParameter("user_pw"); 만약에 test / 1234라는 계정이 있다고 가정을 하고 우리가 ID에 test PW에 1234로 입력을 하면 정상 로그인이 될것입니다. Sql 쿼리문은 다음과 같이 되겠죠? SELECT count(*) FROM user_t WHERE userid = 'test' AND userpw = '1234' 하지만 우리가 test라는 계정이 있다는것은 알지만 패스워드를 모른다고 생각해 봅시다. 여기서 Sql Injection 취약점이 존재한다면 우린 로그인을 할수가 있습니다. 이렇게 한번 입력을 해본다고 가정을 하겠습니다. ID에는 test'# 를 PW에는 틀린 비밀번호 2222 를 입력하도록 하겠습니다. 이렇게 입력하면 쿼리문이 어떻게 구성이 될까요? SELECT count(*) FROM user_t WHERE userid = 'test'# ' AND userpw = '2222' 이렇게 되겠네요. 자... 저기서 왜 '# 이 들어갔을까요? ' 는 test 라고 입력 후 괄호를 닫기위해 쓰인것입니다. 'test' 이렇게요. 그럼 #은? 이것이 중요한대요.. MsSQL에서 #은 주석을 의미합니다. 즉 # 뒤의 ' AND userpw = '2222' 이 라인은 주석이 되어버리는거지요. 그럼 서버는 이렇게 쿼리문을 인식하게 됩니다. SELECT count(*) FROM user_t WHERE userid = 'test' 자... 어때요? AND가 무력화 되어버려서 userid가 test인 계정이 당연히 있으므로 참이 되어서 로그인이 되겠죠? 이것이 Sql Injection 입니다. 이외에도 여러 방법이 있습니다. ID에 test' OR 1=1 PW에 역시 틀린비밀번호 2222를 입력한다고 가정하겠습니다. 그럼 쿼리문은... SELECT count(*) FROM user_t WHERE userid = 'test' OR 1=1 AND userpw = '2222' 자... 이건 어찌 될까요? 위의 주석처리 구문말고 OR을 집어넣었습니다. 1 AND 1은 1이죠? 1 OR 0 은 1이죠? userid = 'test' OR 1=1 AND userpw = '2222' 1 OR 1 AND 0 가 되겠죠? OR이 들어감으로서 무조건 참이 되어 버리는거죠.. 주석처리를 안하고 이러한 방법도 있습니다. 어때요? 개념이 잡히시나요? 패턴은 여러가지 입니다. 해당 로그인폼이 어찌 구성되냐에 따라 Sql Injection의 패턴은 다양합니다. 이 다양한 패턴을 자동으로 검색해주는 툴들도 중국크래커들이 많이 만들고 여러분들이 검색하시면 H***등과 같은 툴을 쉽게 구하실수 있습니다. 출처 - http://cafe.naver.com/webhack.cafe |
|
댓글을 달아 주세요