- SQL injection attack, querying the database type and version on Oracle2025년 07월 10일
- truebird
- 작성자
- 2025.07.10.:29
[문제 설명]
해당 문제는 데이터 베이스 버전 문자열을 표시 하면 되는 문제입니다. 문제에도 보이듯이 category filter에서 SQL 인젝션이 터지고, UNION 공격으로 결과를 도출 할 수 있다고 합니다. 여기서 되짚어 보는 블로그 글이 있습니다.
https://r-ever-scp.tistory.com/entry/SQL-Injection
SQL Injection
[서론]SQL injection이란 웹 애플리케이션이 데이터 베이스에 보내는 쿼리를 공격자가 조작 할 수 있도록 만드는 보안 취약점입니다.이 공격을 통해 공격자가 얻을 수 있는 것은 아래와 같습니다.-
r-ever-scp.tistory.com
블로그 글에 있던 것 처럼 공격 순서를 맞춰서 진행 해보도록 하겠습니다.
[문제 풀이]
1. '를 입력 해서 오류를 확인한다.
2. order by 절을 통해 컬럼 개수 확인
' order by 2 --
order by 3부터는 에러가 나기 때문에 컬럼 개수는 2개로 확인 되었습니다.
3.문자열이 입력 가능한 공간을 찾기
bird' UNION SELECT 'a','a' FROM dual--
운이 좋게도 두 컬럼 모두 다 문자열이 입력 되는 것을 찾을 수 있었습니다. 근데 여기서 주의 깊게 봐야 할 점은 dual 입니다. 왜냐 하면 Oracle의 경우 SQL 파서 문제 때문에 SELECT 문을 사용할 때 항상 FROM을 붙혀야 하기 때문 입니다. 하지만 우리의 Oracle은 이런 경우를 대비해서 dual이라는 내장 dummy table을 제공 합니다. dual의 특징으로는 오직 1행만 있고, Select 문의 결과가 정확히 1개만 반환 되도록 설계 되어 있다는 점이 있습니다.
4. 버전 출력 하기
' UNION SELECT banner, NULL FROM v$version--
oracle의 경우 데이터베이스 버전 정보가 v$version의 banner에 저장 되어 있습니다. 즉 이 문제는 Oracle DB에서의 버전 정보 출력이 핵심인 문제입니다.
다음글이전글이전 글이 없습니다.댓글