본문 바로가기
Portswigger/SQL injection

Portswigger - Visible error-based SQL injection solution

by jh117jh 2023. 8. 9.
728x90

에러메세지가 노출될때 노출된 정보를 이용하여 sql injection을 시도하여 administrator계정으로 로그인 하는게 문제 목표이다.

 

우선 trackingid에 싱글쿼터(')를 주입하였더니 문자열이 종료 되지 않았다는 메세지와 함께 쿼리문이 출력되었다.

 

여기서 우리는 tracking이라는 테이블명과 id라는 컬럼명을 알아낼수있다.

 

또한 users테이블과 username컬럼이 존재할수도 있다는 가정하에 union select userna from users를 입력해 오류를 내봤더니

아니나 다를까 존재하는걸 알 수 있다.

같은 방식으로 password컬럼도 확인 가능하다.

 

이제 필요한 테이블과 컬럼명을 알아냈으니 값을 찾아보면 된다.

 

처음에 to_char,to_number를 이용하여 오류를 발생시키려 했는데

 

함수가 존재하지 않는다 나왔다...

힌트에 써있는대로 cast 형변환 함수를 이용하여 찾을수 있다.

cast함수는 cast(값 as 변경할 type)으로 작성되며 우리가 찾을 username,password는 문자형으로 되어있으므로 int로 바꿀시 오류가 나는것을 이용해 찾을수 있다.

 

우선 username 부터 알아보면

' and cast((select username from users) as int)=1-- 를 입력해보면

두개 이상의 행이 반환되었다 오류가 나타난다.

' and cast((select username from users limit 1) as int)=1-- 으로 첫번째 행으로 출력값을 제한해주면 

형식에 대한 입력이 잘못되었다는 메시지와 administrator가 출력되는걸 볼 수있다.

그럼 첫번째 행에 administrator가 존재하므로

password는 ' and cast((select password from users limit 1) as int)=1-- 를 넣어주면 출력될것이다.

 

 

728x90