[Shielders] Rookies-06

Dong Jung·2022년 9월 5일
0

Rookies

목록 보기
7/24
post-thumbnail

2022.09.05

웹해킹.01

지난시간에 실습환경 세팅을 하였고 해당 환경에서 실습을 가져본다.

SQL injection
1. SQL injection 공격 원리
2. 실습
3. 대응 방법

1. SQL injection 공격원리

SQL injection(이하 '인젝션')은 OWASP top 10 에 항상 들어갈만큼 실제로 많이 일어나는 공격기법이고 그만큼 보안을 생각하는 입장에서는 기본적이며 중요한 해킹기법이라고 생각한다

인젝션의 공격원리

기본적으로 웹브라우저와 웹서버는 HTTP로 통신, 웹서버와 Database는 SQL로 통신을 한다.
공격자는 SQL 공격구문을 웹서버에 전달하고 , 웹서버에서 Database에 SQL문을 작성하는데 공격 구문이 따라붙게된다.
그에 따라 Database에서는 SQL공격구문이 그대로 실행되게 되고 공격자가 원하는 요청을 전달하게된다.

인젝션의 핵심 3요소

  1. 주석처리 : 뒷부분 무력화

    • 오라클DB, MS-SQL : --
    • MySQL, MariaDB : #
  2. 로직 : 논리적으로 참이 되기만 하면 됨
    ' or 1=1 --
    ' or 2>1 --
    ' or 'a'='a' --
    select from [테이블명] where id='admin' and pw='' or 1=1 --';
    ' or 'a'='a
    select
    from [테이블명] where id='admin' and pw='' or 'a'='a';

  3. SQL 중첩문 사용하기

  • 앞의 SQL문을 마감하고, 다른 SQL문을 뒤에 붙여서 실행하도록 유도함
    select ; drop table ~~;
    select * from [테이블명] where id='admin' and pw=''; drop table member ~';

  • 앞의 select문을 뒤의 select문과 union으로 연결
    select * from [테이블명] where id='admin' and pw='' union select ';

※주의사항 : 앞의 select문에서 요청한 개수와 뒤의 select문에서 요청한 개수가 일치해야 함
select id,pw from [테이블명] where id='admin' and pw='' union select userid, accont_number from [테이블명] ';

  • 정보통신망법 위반 : 71조 (5년이하의 징역 또는 5천만원 이하의 벌금)

2.실습

인젝션 실습 페이지


자신의 USER ID를 입력시에 자신의 First name과 Surname이 나오는걸 볼 수 있다.

#으로 주석처리한 공격구문을 삽입하였다(MySQL, MariaDB인걸 확인할 수 있다.)

3. 대응 방법

Escape처리 : 특수문자의 고유 기능을 하지 못하도록 해야 함 ----> 특수문자 앞에 (백슬래시)를 붙임
ex) 4 + 5 = 9 -----> 4 + 5 \= 9
예를 들면 \' or 1\=1 # 와 같이 백슬래시를 붙여줍니다.
사람이 일일이 붙일 수는 없기 때문에 Secure Coding함수를 사용해야 함

mysql_real_escape_string( ) 함수 (PHP에서 사용)
특수문자 중에 \x00, \n, \r, \, ', " and \x1a 앞에 \를 붙여서 Escape처리를 하는 것

profile
보안새내기

0개의 댓글