CTF : SQL Injection 3
DATE : 2023/12/09
Last updated
DATE : 2023/12/09
Last updated
사이트로 들어가 기본적으로 제공되는 계정으로 로그인하면
302 found response를 받아 index.php로 redirection 된다.
이 페이지에서 SQL Injection을 수행할 수 있는지 확인하기 위해서
위의 SQL을 넣어보면
성공적으로 302 found 응답을 볼 수 있다. 즉! SQL Injection을 수행할 수 있음을 확인한 것이다.
그렇다면 다음으로 SQL을 주입해
의도적으로 에러를 발생 시킨다면 화면에 출력 되는 지를 확인해보자.
이 SQL이 실행되어 결과가 화면에 출력 된다면 ":hanhxx"라는 문구를 볼 수 있을 것이다.
우측의 결과 화면을 확인해보면, 의도한 대로 에러가 화면 상에 제공됨을 확인할 수 있다.
이제 우리는 에러 안에 SELECT문의 결과가 들어가도록 Query를 짜서 공격을 수행하면 된다!
SELECT문이 들어가는 자리 외의 Query는 방금 사용한 Query를 따른다.
그럼, 공격 Query를 정했으니 DB 이름을 알아내 보도록 하자.
DB 이름을 출력하기 위한 SELECT문을 공격 Query에 넣어
실행해보면 XPATH syntax error에서
sqli_2 라는 DB 이름을 확인할 수 있다.
바로 이어서, table 이름을 출력할 Query를 작성해
공격 Query에 넣어주면
전체 길이는 길어지지만! 결과는 위와 같이
간략하게 출력된다. 내용을 보면 "Subquery returns more than 1 row"
결과가 1개 이상이라는 문구를 확인할 수 있다.
이럴 때는 여러 ROW 중 하나를 특정하기 위해서 limit을 사용하면 된다.
첫 번째 TABLE 이름을 확인해보면 flag_table 임을 알 수 있다.
flag가 들어있을 거란 수상한 냄새가 난다. 😏
바로 flag_table 안에 어떤 column이 있는 지 확인해보면
첫 번째 column이 flag임을 어렵지 않게 알아낼 수 있다.
이로써 Table name, column name을 알기 때문에,
이제는 원하는 데이터를 추출할 수 있다.
공격 Query에 SELECT문을 넣어 실행하면~ 응답 페이지에서 FLAG GET!! 👍