LOS 29단계 시작!
이번 문제는 insert 문을 이용하여 해결해야 한다.
먼저 joinmail에 1이라는 값을 넣고 insert 하게 되면 다음과 같은 테이블이 생기게 된다.
insert 문에서는 별도의 필터링이 없다면 여러 열을 삽입할 수 있는 취약점이 존재한다.
때문에 value(0,'ip','1'), (0,'ip',([select 문]) 과 같이 원하는 쿼리를 실행해 볼 수 있게 된다.
no가 1인 email 을 조회하기 위한 select 문은 다음과 같다.
select email from prob_phantom where no=1
이를 이용하여 쿼리를 작성하면
?joinmail=1'), (0,'ip',(select email from prob_phantom where no=1)) %23 이 된다.
그런데 쿼리를 실행해보아도 결과값이 나오지 않았다.
결국 구글링을 해본 결과, Mysql 에서는 쿼리문 내에서 동일한 테이블을 호출할 경우 에러를 발생시킨다는 것을
알 수 있었다.
이를 해결하기 위한 방법으로 별칭을 사용하였다.
별칭을 사용하여 쿼리를 다시 작성하였다.
?joinmail=1'), (0,'ip',(select email from (select email from prob_phantom where no=1) as a))#
쿼리를 입력했을 때, 아래와 같이 성공적으로 이메일을 출력한 것을 볼 수 있었다.
이제 이 이메일을 쿼리에 대입하면 된다.
성공!
'WarGame > LOS (Lord Of SQLInjection)' 카테고리의 다른 글
28단계 : frankenstein (0) | 2020.01.27 |
---|---|
27단계 : blue_dragon (0) | 2020.01.26 |
26단계 : red_dragon (0) | 2020.01.26 |
25단계 : green_dragon (0) | 2020.01.22 |
24단계 : evil_wizard (0) | 2020.01.22 |