티스토리 뷰

LOS 포스팅에 앞서 내용이 틀릴 수도 있으며, 해당 부분 지적은 감사히 받겠습니다.

15단계 소스코드이다.

이번엔 id와 pw에 싱글 쿼터 하나만 필터링되어있다.

id값이 데이터베이스에 있는 값이면 문제가 해결된다.

이 문제는 싱글 쿼터 우회 문제이다. 싱글 쿼터를 우회할 수 있는 방법에 대해 찾아보자.

1. " // 더블 쿼터                   ex) "admin"

2. \ //escape 문자               ex) id='\' and pw='' -> \로인해 id의 뒤 싱글 쿼터가 문자로 인식되며 'and pw가 문자열로 인식된다. pw의 뒷 ' 은 주석처리로 제거할 수 있다.  

3. char(39) // 아스키코드       

 

이번 문제는 2번 방법으로 해결된다.

id 값에 이스케이프 문자 \ 를 넣어주므로 id='\' and pw=''  ' and pw= 가 문자열로 처리된다.

추가로 pw 값에 or 1%23을 집어넣으면 id='존재하지 않는 값' or 1# 이 되어 참인 쿼리가 완성되며 문제는 해결된다.

시행착오

1. 주석처리 시 --+-, %23 은 정상적 처리가 되는데 #는 정상적인 주석으로 처리되지 않는다. 값이 db로 전달되기 전 php에서 # 이 주석으로 처리가 되어 날아가고 db로 전달되어 생기는 문제 같다.

※주석처리 시 #는 정상 작동하지 않음!!※

 

 

 

 

댓글