SQL 인젝션을 사용해서 해결하는 문제였다.
Round 1
한 번의 해결로 끝나는 문제가 아니라 총 5라운드를 해결해야 플래그를 얻을 수 있다.
or은 필터링되어 사용할 수 없었다.
아래 사이트에서 많은 도움을 받았다.
https://www.invicti.com/blog/web-security/sql-injection-cheat-sheet/#LineComments
SQL Injection Cheat Sheet
The Invicti SQL Injection Cheat Sheet is the definitive resource for payloads and technical details about exploiting many different variants of SQLi vulnerabilities.
www.invicti.com
가장 간단한 방법은 주석을 사용해 무시하는 방법이다.
ex) admin'--
이렇게 하면 따옴표 뒤의 패스워드 구문은 무시된다.
Round2
OR 뿐만 아니라 -- 주석까지 사용할 수 없다.
하지만 주석에는 -- 만 있는 게 아니라 /**/도 있다.
ex) admin'/*
이 방법도 주석 뒤의 구문은 무시된다.
Round3
조건문을 사용할 수 없게 필터링된 거 같다.
위 사이트에서 알려준 스태킹을 사용했다.
ex) admin';
세미콜론을 사용하면 바로 쿼리가 끝나기 때문에 패스워드를 무시할 수 있다.
Round4
admin을 사용하지 않고 로그인을 해야 된다.
UNION을 사용해 새 쿼리를 하나 더 실행하는 방법이다.
admin을 사용하지 않고 아무 사용자를 검색한다 그리고 UNION 뒤의 쿼리는 테이블 1번 항목을 검색해 반환한다.
admin은 최고권한이기 때문에 첫 번째 테이블에 있지 않을까
ex) john' UNION SELECT * FROM users LIMIT 1;
john은 아무거나 작성해도 된다. 그리고 공백문자열을 피해야 하기 때문에 띄어쓰기된 부분을 /**/ 주석으로 바꿔준다.
Round5
union도 필터에 막혔다. 위 사이트에 따옴표를 사용하지 않고 문자열을 연결하는 방법이 있다.
https://www.invicti.com/blog/web-security/sql-injection-cheat-sheet/#LineComments
ex) a'||'dmin';
||이 SQL에서는 결합 연산자로 사용되어 admin을 사용한 것과 같은 효과를 준다.
sqlite를 사용한다고 알려줬기 때문에 +는 사용불가!
결과
필터를 알려주던 창에서 플래그를 얻을 수 있었다.
성공!!
'ctf > Web Exploitation' 카테고리의 다른 글
Who are you? 문제 풀어보기 (0) | 2025.05.01 |
---|---|
More Cookies 문제 풀어보기 (0) | 2025.04.15 |
Some Assembly Required 1 문제 풀어보기 (1) | 2025.02.04 |
login 문제 풀어보기 (1) | 2025.01.31 |
It is my Birthday 문제 풀어보기 (0) | 2025.01.25 |
댓글