오른쪽 버튼 눌러 다운 받기

Download Report

Transcript 오른쪽 버튼 눌러 다운 받기

제 7회 해킹캠프 마지막!!!!! 발표
이주혁(sehkmg@Kroot)
해커스쿨 서버 사무실
PHP
해커스쿨 서버 사무실
…….
…….
…….
…….
……..
…….
…….
…….
…….
……..
id name password
PHP
admin admin 011101
멍멍 정구홍 12345
sehkmg 이주혁…….
54321
…….
…….
Vrat
이제일
13579
…….
…….
…….
……..
…….
…….
……..
채용 공고
근무 시간: 24시간, 숙식 제공
휴무: 없음
조건: 빠르게 읽는 능력, 빠르게 쓰는 능력,
시키는대로 말 잘 듣는 사람
시급: 9990원
나이: 상관 없음
해커스쿨 서버 사무실
PHP
mysql
해커스쿨 서버 사무실
로그인 시도
– id: 멍멍, pw: 12345
해커스쿨 서버 사무실
PHP
members 테이블
에서 id가 ‘멍멍’이
고 pw가 ‘12345’
인 데이터 추출해
줘
mysql
넵!
멍멍 정구홍
12345
해커스쿨 서버 사무실
회원가입 시도
– id: 오타해커, pw: 97531
이름: 김동완
해커스쿨 서버 사무실
PHP
members 테이블
에 id가 ‘오타해
커’고
이름이 ‘김동완’이
고 pw가 ‘97531’
인 데이터 추가해
줘
mysql
넵! 추가 완료했습
니다!
해커스쿨 서버 사무실
회원정보 수정 요청
– id: Vrat, 이름: 이재일
해커스쿨 서버 사무실
PHP
members 테이블
에서 id가 ‘Vrat’인
사람의 이름을 ‘이
재일’ 으로 수정해
줘
mysql
넵! 수정 완료했습
니다!
해커스쿨 서버 사무실
회원 탈퇴 요청
– id: sehkmg, pw: 54321
해커스쿨 서버 사무실
PHP
members 테이블
에서 id가
‘sehkmg’이고
pw가 ‘54321’인
데이터 삭제해줘
mysql
넵! 삭제 완료했습
니다!
그런데!!!
나쁜놈
mysql
해커스쿨 서버 사무실
로그인 시도
– id: admin,
pw: 1’ 또는 id가 ‘admin
해커스쿨 서버 사무실
PHP
음…. 이상한데??
mysql
해커스쿨 서버 사무실
PHP
members 테이블
에서 id가 ‘admin’
이고 pw가 ‘(1’ 또
는 id가 ‘admin)’
인 데이터 추출해
줘
mysql
해커스쿨 서버 사무실
PHP
mysql
members 테이블
에서 id가 ‘admin’
이고 pw가 ‘1’ 또
는 id가 ‘admin’인
데이터 추출중…
???
members 테이블에서
id가 ‘admin’이고 pw가 ‘1’
또는
id가 ‘admin’인
데이터?????
???
???
???
???
해커스쿨 서버 사무실
PHP
mysql
넵!
admin admin
011101
그 후!!
해커스쿨 서버 사무실
PHP
ㅋㅋㅋㅋㅋㅋ
ㅋㅋㅋㅋㅋㅋ
ㅋㅋㅋㅋㅋㅋ
ㅋㅋㅋㅋㅋㅋ
ㅋㅋㅋㅋㅋㅋ
ㅋㅋㅋㅋㅋㅋ
ㅋㅋㅋㅋㅋㅋ
ㅋㅋㅋㅋㅋㅋ
ㅋㅋㅋㅋㅋㅋ
ㅋㅋㅋㅋㅋㅋ
ㅋㅋㅋㅋㅋㅋ
ㅋㅋㅋㅋㅋㅋ
ㅋㅋㅋㅋㅋㅋ
ㅋㅋㅋㅋㅋㅋ
ㅋㅋㅋㅋㅋㅋ
ㅋㅋㅋㅋㅋㅋ
ㅋㅋㅋㅋㅋㅋ
ㅋㅋㅋㅋㅋㅋ
ㅋㅋㅋㅋㅋㅋ
ㅋㅋㅋㅋㅋㅋ
ㅋㅋㅋㅋㅋㅋ
ㅋㅋㅋㅋㅋㅋ
ㅋㅋㅋㅋㅋㅋ
ㅋㅋㅋㅋㅋㅋ
안되겠어!!
해커스쿨 서버 사무실
로그인 시도
– id: admin,
pw: 1’ 또는 id가 ‘admin
해커스쿨 서버 사무실
PHP
문자열 안에
‘(single quote) 가
들어가있네? \로
escape 시켜주
자!!
mysql
해커스쿨 서버 사무실
PHP
members 테이블
에서 id가 ‘admin’
이고
pw가 ‘1\’ 또는
id가 \‘admin’
인 데이터 추출해
줘
mysql
해커스쿨 서버 사무실
PHP
mysql
members 테이블
에서 id가
‘admin’이고
pw가 ‘1\’ 또는
id가 \‘admin’
인 데이터 추출중
…
해커스쿨 서버 사무실
PHP
mysql
그런 데이터는 없
습니다!
귀찮다…
해커스쿨 서버 사무실
PHP
앞으로 문자열 안
에 ‘(single quote)
가 있으면 무시하
도록 해
mysql
넵! 알겠습니다!!
실제로는??
APM
1) 문서 요청
Client
(Browser)
6) 결과 전송
Web Server
(Apache)
5) 실행결과
2) 스크립트 실행요청
3) Query
PHP Parser
4) Data
DBMS
(MySQL)
33
SQL Statements
members 테이블에서
id가 ‘멍멍’이고
pw가 ‘12345’인
데이터 추출해줘
–SELECT * FROM members WHERE
id=‘멍멍’ AND pw=‘12345’
SQL Statements
members 테이블에
id가 ‘오타해커’고
이름이 ‘김동완’이고
pw가 ‘97531’인
데이터 추가해줘
–INSERT INTO members (id, 이름, pw)
VALUES (‘오타해커’, ‘김동완’, ‘97531’)
SQL Statements
members 테이블에서
id가 ‘Vrat’인 사람의
이름을 ‘이재일’ 으로
수정해줘
–UPDATE members SET 이름=‘이재일’
WHERE id=‘Vrat’
SQL Statements
members 테이블에서
id가 ‘sehkmg’이고
pw가 ‘54321’인
데이터 삭제해줘
–DELETE FROM members WHERE
id=‘sehkmg’ AND pw=‘54321’
나쁜놈
mysql
SQL Injection
정상적인 접근
id=멍멍, pw=12345로 접속 시도
members 테이블에서 id가 ‘멍멍’이고 pw가
‘12345’인 데이터 추출해줘
(SELECT * FROM members WHERE id=‘멍
멍’ AND pw=‘12345’)
SQL Injection
SQL Injection 공격
id=admin, pw=1’ 또는 id=‘admin
id=admin, pw=1’ OR id=‘admin
members 테이블에서 id가 ‘admin’이고 pw가
‘1’ 또는 id=‘admin’인 데이터 추출해줘
(SELECT * FROM members WHERE id=‘admin’
AND pw=‘1’ OR id=‘admin’)
SQL Injection에 대한 보안
• 첫번째 방법: 추가적 보안 프로그래밍
id=admin, pw=1’ OR id=‘admin
addslashes(1’ OR id=‘admin);
id=admin, pw=1\’ OR id=\‘admin
SQL Injection에 대한 보안
• 두번째 방법: SQL Statement 수정
SELECT * FROM members WHERE
id=‘admin’ AND pw=‘1’ OR id=‘admin’
‘SELECT * FROM members WHERE id=%s
AND pw=%s’, admin, 1’ OR id=‘admin
실습: SQL Injection
kroot.yonsei.ac.kr/hcamp
SELECT comment FROM chat WHERE id=1
SELECT comment FROM chat WHERE id=1 OR 1