본문 바로가기
3. 웹 애플리케이션 취약점 진단/Lord of Sql Injection

lord of sql injection 40번 - poltergeist

by Robert8478 2023. 12. 22.

이번 문제는 조금 헷갈렸는데 우선 데이터베이스에서 무언가를 찾아야 하는 문제이다.
그런데 다른 데이터베이스에 있는 flag_($hash) 테이블을 가져와야 한다고 되어있다.
즉, flag_% 테이블을 모든 데이터베이스를 뒤져서 가져와야 한다는 뜻이다.

우선 첫 시도는 union select를 해보았는데 이것으로 해답을 찾기는 어려울듯 했다.

그래서 구글링으로 찾아본 결과 sqlite에서 테이블을 불러오는 명령어를 찾아내었고
블라인드 SQLI와 같은 방식으로 하되 쿼리를 select sql from sqlite_master where tbl_name like 'flag_%'
으로 주게되면 sqlite_master 테이블에서 tbl_name, 즉 테이블명이 'flag_%' flag로 시작하는 모든 테이블을 select 할 수 있게 된다. 이를 length와 substr을 이용해 값을 찾아내면 된다.

우선 length를 사용해본 결과 쿼리가 잘 들어간다 길이를 찾아보니 무려 54 길이를 가지고 있다.

그 후 substr을 이용해 하던 방식대로 찾아내면 된다. 프로그램을 이용하여도 길이가 길어서 오래걸렸다.
결과 값은 FLAG{ea5d3bbdcc4aec9abe4a6a9f66eaaa13} 가 나왔다.

그래서 ?pw=FLAG{ea5d3bbdcc4aec9abe4a6a9f66eaaa13} 를 입력해주면 클리어