-
baby-union개인공부/드림핵 2025. 1. 2. 00:20
이번 문제의 경우 Union Based SQL Injection 공격을 통해 FLAG를 획득하는 문제이다.
[문제 해결]
1. 문제 서버 접속
윗 부분에 로그인 시 어떠한 쿼리를 이용하는지에 대한 쿼리문이 적혀 있다.
이를 참고하여 SQL Injection 공격을 시도해본다.
로그인 검증을 우회하는 SQL Injection 구문을 사용하였고 그 결과 현재 db에 저장되어 있는 모든 user들의 id가 노출된 것을 확인 하였다.
이 공격을 통해 알 수 있는 사실은 해당 웹페이지가 SQLI 공격에 취약하다는 사실이다.
2. Union Based SQLI(컬럼 수 확인)
Union Based SQLI 공격에서 가장 중요한 점 중 하나는 컬럼의 수와 데이터 타입을 일치시켜야 한다는 것이다.
만일 일치하지 않는 다면 동작하지 않는다.
우선 컬럼의 수를 알아내기 위해 쿼리문을 입력한다.
컬럼의 수를 한개라고 가정하고 쿼리문을 생성하였고 그 결과 아래와 같은 결과가 리턴되었다.
에러가 발생하였기 때문에 컬럼의 수는 1개보다 더 많다는 것을 알았다. 수를 점점 증가시켜가며 확인을 진행한다.
이를 통해 컬럼의 수가 4개라는 것을 알았다.
이제 Union Based SQLI 공격을 수행하면 된다.
보통 공격의 흐름은 DB->TABLE->COLUMN->DATA 순으로 진행한다.
3. Exploit
database()를 이용하여 현재 사용중인 데이터베이스를 알아 낼 수도 있지만 이번 문제의 경우 information_schema를 이용하였다.
위와 같은 쿼리문을 upw 입력란에 입력하여 쿼리를 실행시켰고 아래와 같은 결과를 통해 현재 DB에 생성되어 있는 TABLE들에 대한 리스트를 확인했다.
onlyflag라는 테이블이 의심스럽다.
위 쿼리문을 이용하여 onlyflag 테이블 내의 컬럼들에 대해 조회했다.
확인된 컬럼들에 대한 데이터를 아래와 같은 쿼리문을 이용하여 조회했다.
그 결과로 아래와 같은 FLAG 조각들을 획득했고 이를 이어붙일시 최종 FLAG 획득이 가능하다.
이 문제를 풀때 테이블 명 확인 후 컬럼을 조회할때 오류가 계속 발생해 해멨었는데 table_name='onlyflag' 부분에 작은 따옴표를 쓰지 않아서 그랬다.
문자열을 표현할때 작은 따옴표 또는 큰 따옴표를 써야 문자열로 인식하는데 이걸 쓰지 않아서 컬럼 이름이나 변수 이름으로 인식하여 쿼리문이 계속 오류가 났던거였다.
다음에는 주의가 필요하다.
'개인공부 > 드림핵' 카테고리의 다른 글
random-test (0) 2025.01.18 Type c-j (0) 2025.01.04 BypassIF (0) 2025.01.01 what-is-my-ip (0) 2024.12.31 Where-is-localhost (0) 2024.12.31