문제 코드를 보면 poltergeistFlag를 추출해내야 하는 문제입니다. 또한 친절하게 주석으로 flag_{$hash} 테이블에 존재한다고 합니다.
즉, Flag를 알아내기전에 우선 알아야 하는 정보는 다음과 같습니다.
1. flag_{$hash}의 정확한 테이블 이름
2. 해당 테이블에 있는 컬럼 확인하기
mysql에서는 information_schema 테이블 해당 정보가 저장된다면 sqlite에서는 sqlite_master 테이블에서 해당 정보가 저장됩니다.
sqlite_master 테이블에는 name이라는 컬럼이 존재하는데 해당 컬럼에는 해당 db에 존재하는 테이블의 이름들이 저장되어있습니다. 이를 이용하면 테이블의 정확한 이름을 얻을 수 있습니다.
테이블 이름 얻기 : ?pw=' union select name from sqlite_master where name like "flag%"--+-
이제 정확한 테이블의 이름을 얻었으므로 이제 커럼의 이름을 확인 할 차례입니다.
sqlite_master에서는 sql 컬럼이 존재하는 데 이는 테이블을 생성할 때 사용한 쿼리를 저장합니다.
테이블에 있는 컬럼을 확인하기 : ?pw=' union select sql where sqlite_master where name='flag_70c81d99'--+-
다행이도 하나의 컬럼만이 존재합니다. 따라서 flag_70c81d99 테이블읠 flag_0876285c 컬럼의 값을 가져오면 될거라고 판단됩니다.
두둔~~ 드디어 플래그를 획득하였습니다.
'Hacking > LOS : Lord of SQLInjection' 카테고리의 다른 글
LOS : revenant (0) | 2020.11.14 |
---|---|
LOS : nessie (0) | 2020.11.11 |
LOS : banshee (0) | 2020.11.08 |
LOS : manticore (0) | 2020.11.07 |
LOS : chupacabra (0) | 2020.11.06 |