** SQL Injection check
SQL injection이 있는지 없는지 확인해야한다. 그 과정에서 확인해야할 것
1. SQL Injection point check
2. 로직 추측
- 식별/인증 동시
- 식별/인증 분리
계정이 있는 경우 SQL Injection이 있는지 check하기 쉽다. 계정을 입력하고 올바르게 입력했을 때와 그러지 않을 때의 차이를 비교할 수 있기 때문이다.
SQL Injection check tip
① 문자열 연결 연산 '','+','||' 이용 (ONLY mysql)
- id 문자열 사이에 '+'을 입력했을 때 로그인이 성공하면 이를 SQL 특수문자로 인식한다는 것.
그럼 이곳이 '을 넣고 특정 SQL문을 삽입할 수 있는 구간이다
② and 연산 이용
식별/인증 동시 로직
select * from member where id='' and pass='';
if(SQL 결과가 있다){
로그인 성공
} else {
로그인 실패
}
서버에 대한 SQL문을 머릿속에 그려본다.
id : mario' or '1'='1
pw: anything
복사 붙여넣기해서 SQL문법이 맞는지 점검하고, 쿼리가 실행되면 어떤 결과가 나올것인지.
or와 and중 and 연산이 우선순위가 더 높다
select * from member where id='mario' or ( '1'='1' and pass='anything';)
'1'='1' and pass='anything'에서는 해당하는 비밀번호가 없으므로 false이다.
그러나 id='mario' or (False)에서는 True or False 이므로 결과는 True가 된다
id에만 SQL Injection point를 check하는 이유?
password에는 SQL Injection이 거의 안 된다. 거의 모든 사이트의 비밀번호에는 hash처리가 되어있기 때문
만약 로그인이 안 되면 어딘가에서 필터링이 일어나고 있는 것이다 이 때는 주석 처리를 사용해본다.
주석이 필터링되어있을수도 있음 -> 주석이 안 먹히면 개행이 되어있는지 의심
id: mario'#
password: anything
select * from member where id='mario'#' and pass='anything';
** Union SQL Injection
식별/인증 동시 로직이 안 되는 경우, Union SQL Injection을 사용해본다.
식별/인증 분리 로직
select ~~ from ~ where id='';
if(db_pass==input_pass) {
로그인 성공
}
(select) union (select)
두 결과를 합쳐서 가져온다
id: x' union select 'test','test1234
select id,pass from login where id='x' union select 'test','test1234'
id가 x인 것은 결과가 나오지 않고 뒤의 'test','test1234' 데이터가 합쳐져 나오기 때문에 'test','test1234'만 출력되어 나온다.
비밀번호를 test1234 로 적용하면 로그인이 될 수 있다.
union select 'test','test1234' 에서 나온 db_pass가 test1234가 되고, 직접 입력한 test1234가 input_pass가 되므로
select id,pass from login where id='x' union select 'test','test1234';
if(test_1234==test_1234) {
로그인 성공
}
** SQL Injection 공격 시나리오
- 인증 우회
- 데이터 탈취(추출)
etc..
'Web Hacking Study > 수업 정리' 카테고리의 다른 글
| [5주차] 4주차 복습, XSS (Stored XSS, Reflected XSS, DOM XSS) (0) | 2022.04.22 |
|---|---|
| [4주차] Union SQL Injection, Error Based SQL Injection, Blind SQL Injection (0) | 2022.04.15 |
| [3주차] 데이터 탈취, Union SQL Injection -2 (0) | 2022.04.09 |
| [2주차] Burp Suite , 세션/쿠키, SQL Injection, 로그인 로직 (0) | 2022.04.01 |
| [1주차] 웹 서버 구조, HTTP 프로토콜, 웹 프록시 (0) | 2022.03.25 |
댓글