writeup/LOS
[Lord of SQL injection] phantom
hoppi
2021. 8. 16. 16:44
64번째 글.
1. 코드 분석

쿼리 스트링을 통해서 joinemail에 값을 전달하면 no가 0이고 내 아이피 주소가 함께 DB에 입력된다.
no=1 또는 ip가 내 아이피이면 테이블에 데이터가 출력된다.
no=1인 email의 주소를 알게 되면 문제가 풀리게 된다.
2. Exploit
일단 괄호를 필터링하지 않으므로 우리는 원하는 값을 insert 할 수 있다.
또한 이전 문제들과 다르게 DML이 필터링 되지 않기 때문에
서브 쿼리를 통해서 no=1의 email을 가져와서 내 아이피만 넣어주면 쉽게 풀 수 있다.
?joinmail=asd1234'), (2,'내 아이피',(select email from prob_phantom as p where no=1))%23
여기서 주의할 것은 같은 테이블을 참조하기 위해서는 서브쿼리에서 테이블에 별칭을 달아줘야 한다.

이렇게 no=1의 email을 쉽게 출력할 수 있었다.
오래간만에 조금 쉬운 문제~
Reference
https://www.lesstif.com/dbms/mysql-error-1093-you-can-t-specify-target-table-tablename-for-update-in-from-clause-18220088.html // You can't specify target table 오류