일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- 세션
- 자바 is-a
- 스프링 종류
- lord of sqlinjectin
- 웹 개발
- 클라이언트
- 소켓
- sqlinjection
- 마이크로서비스 아키택트
- Lord of sqlinjection
- 자바
- php
- XSS
- injection
- 보안
- 웹
- Los
- 스프링구조
- 쿠키
- 자바 Array list
- 자바 문법
- 스프링 특징
- lord of sqlinjection`
- 세션쿠키
- 서버
- 자바 has-a
- sql
- APM
- 스프링
- 해킹
- Today
- Total
LJ
Lord of SQLinjection ( 25번 ) green dragon 본문
25번 그린 드래곤이다.
코드를 보면
preg_match를 사용하여 prob, _, ., ', " 문자를 필터링하고있다.
그러므로 \를 이용해 작은 따옴표를 이스케이핑 처리를 해야한다.
첫번째 부분
SELECT id, pw FROM prob_green_dragon WHERE id='\' AND pw='';
이 부분은 필터링을 우회하기 위해 이스케이핑 문자를 사용한다. 결과적으로 id='\'와 pw=''인 행을 찾는다.
두번째 부분
union select 1,2;
이 부분은 UNION을 사용하여 쿼리의 결과에 추가적인 행을 삽입합니다. 이 경우 1과 2라는 값을 반환합니다.
쿼리는 두 부분으로 나누어진다. 첫 번째 부분은 데이터베이스에서 id='\'와 pw=''인 행을 찾고, 두 번째 부분은 UNION을 통해 결과에 추가적인 행을 삽입한다.
- 데이터베이스에 id='\'와 pw=''인 행이 없으면, 첫 번째 부분은 빈 결과를 반환
- UNION을 통해 1과 2라는 값이 추가로 반환
※만약 UNION 뒤의 값이 컬럼이 정해지지 않은 채로 넣는다면, 첫 번째 SELECT 문의 컬럼 수와 데이터 타입에 맞춰지게 된다. 따라서 UNION 뒤의 값은 첫 번째 SELECT 문의 컬럼을 따르게 된다.
위의 쓴 개념들로
쿼리를 삽입하면
이런식으로 박히게 된다.
하지만 이 방법으로 그냥 넣으면 마지막까지 해결이 되지 않는다.
이유는 query1에서 코드 부분으로 들어갔기 때문에 union이나 select나 char나 의미 있는 문자열이 해석이 되었기 때문이다.
이는 우리의 코드를 헥스값으로 변환함으로 해결할 수 있다.
뒤의 부분의 값들을 핵스값으로 변환하여 삽입하면 뒤의 쿼리까지 전달되어
문제가 해결된다.
※ keypoint
union 뒤의 값에 데이터를 넣을 때 의미있는 컬럼값이 아니면 앞의 컬럼을 자동으로 따르게 된다.
'IT 보안 > 보안첼린지' 카테고리의 다른 글
Lord of SQLinjection ( 26번 ) red dragon (0) | 2024.08.02 |
---|---|
Lord of SQLinjection ( 24번 ) evil wizard (1) | 2024.07.14 |
Lord of SQLinjection ( 23번 ) hell fire (0) | 2024.07.07 |
Lord of SQLinjection ( 22번 ) dark eyes (0) | 2024.07.06 |
Lord of SQLinjection ( 21번 ) iron golem (1) | 2024.07.05 |