los 29번입니다.
문제를 보면 지금까지 푼 문제들과는 다른 유형임을 알 수 있습니다. 먼저 joinmail의 값을 db에 삽입해주는 쿼리문이 존재합니다. 현재 ip와 email값으로 입력 받은 정보를 db에 저장하게 됩니다. 그리고 문제를 해결하기 위해서는 no=1일 때 email값을 알아내야 문제를 해결할 수 있습니다. 이 문제 해결의 핵심은 한 번에 두 개의 정보를 저장할 수 있고, 이메일의 값으로 서브쿼리문을 이용하여 현재 db에 존재하는 정보를 가져와서 삽입이 가능하다는 뜻입니다. 즉 db에 저장되어 있는 no=1인 이메일 값을 가져와서 db에 새로 저장하여 그 결과를 출력하기 때문에 우리가 확인이 가능합니다.
아래의 쿼리문으로 db에 있는 값을 확인할 수 있었습니다.
?joinmail=flare%27),%20(0,'14.39.81.126',(select email from prob_phantom user where%20no=1))%23
저렇게 공격을 하면 위처럼 결과가 나오는데 지금 확인가능한 이메일을 입력하면 문제가 해결됩니다.
정답 : ?email=admin_secure_email@rubiya.kr