OWASP TOP 10 인젝션

OWASP TOP 10

2018. 8. 14. 20:03

오늘 배워볼 내용은 인젝션이 무엇인지와 자세하게는 SQL 인젝션을 알아보겠습니다

인젝션은 주사, 주입의 뜻을 가지고 있습니다

인젝션은 코드 인젝션으로도 부릅니다

즉, 코드 인젝션은 프로그램에 코드를 주입하는 것으로 이해하시면 될 것 같습니다

인젝션은 SQL, NoSQL,운영체제 명령어, ORM, LDAP, EL, OGNL 인젝션으로 다양하게 활용될 수 있습니다

프로그램에 코드를 주입하는 것을 통해서 권한 이상의 정보를 획득합니다


SQL 인젝션을 알아보는 것을 통해서 어떻게 공격 시나리오를 펼칠 수 있는지에 대해서 살펴보겠습니다

웹애플리케이션은 Client가 데이터를 요청하고 Server에서 요청에 대한 응답을 제공해줍니다

우리가 웹을 구성한다면 입력을 받고, 그에 따라 Query를 서버가 받습니다

그리고 서버는 사용자에게 Query에 대한 대답을 제공합니다


하지만 사용자가 어떠한 Query를 하여도 대답을 항상 Yes로 받을 수 있습니다

    • ' or 1=1--
    • ' or 1=1# (MYSQL의 경우)
    • ' or 'secure'='secure'--
    • ' or 'ab'='a'+'b'--

SQL 인젝션을 통해서 다음과 같은 것을 할 수 있습니다

    • DB 구조 파악
    • DB 저장값 조회
    • 관리자 계정 추가
    • 서버 정보 조회 
    • DB 삭제
    • DB 종료

SQL 인젝션을 쉽게 하기 위해서는 DB의 구조와 Query를 구조를 알고 있다면 좀 더 쉽게 공격자는 원하는 정보를 획득할 수 있습니다 

오픈소스를 사용하는 경우에는 DB의 구조가 알려져 있기 때문에 더욱 더 유의하여야 합니다


SQL 인젝션을 막는 방법으로는 다음과 같은 방법이 있습니다 


1. Escape Single Quote &Reject known bad input

*_escape_string()함수를 활용하여 '이 입력이 되어도 ''이 되도록 설정할 수 있습니다

string mysql_real_escape_string(string $unescaped_string[, resource $link_identifier])

2. Allow only good input 

SQL을 데이터베이스가 이해하기 쉬운 형태로 해석을 해 놓은 상태의 명령문인 

Prepared statement로 만들어서 전달해줍니다

명령을 전달하기 위해서 prepare함수를 활용하여 SQL을 전달합니다 

$prepare('INSERT INTO table(a,b) VALUES (;a, :b););


참고 사이트

http://php.net/manual/kr/function.mysql-real-escape-string.php

https://idchowto.com/?p=16398

http://mrrootable.tistory.com/25

https://blog.lael.be/post/55

http://www.itworld.co.kr/howto/108468

'OWASP TOP 10' 카테고리의 다른 글

OWASP Foundation과 2017 OWASP TOP 10 소개  (0) 2018.08.07