https://www.bugbountyclub.com/pentestgym/view/54
일반적인 Union SQL Injection을 위 글을 참고하면 쉽게 풀 수 있었다. 하지만 information_schema가 필터링 되었을 땐 어떻게 우회해야 할까?
https://blog.redforce.io/sqli-extracting-data-without-knowing-columns-names/
위 글이 큰 도움이 됐다.
위와 같은 union 문이 있다면, 어떻게 출력이 될까?
앞 쪽 select 문의 1,2,3이 칼럼명이 되고 1,2,3과 4,5,6의 값이 레코드로 들어간다.
그럼 이 값이 테이블로 간다고 생각해보자.
`from`절 뒤에 나오는 서브 쿼리에는 alias 값을 붙여줘야 한다. 잊지 말자
이 쿼리의 값도 위와 같다.
UNION SQL Injection을 한다고 하면, 특정 열의 특정 행 값을 출력해야할 것이다. 그럼 우리는 2열 1행의 `5`를 출력해보도록 해보겠다.
칼럼 지정
우리는 2열을 지정해야 한다. 그 방법에 어떤 것들이 있을까?
백틱(`) 사용
백틱은 식별자를 나타낼 때 사용된다. 즉, 칼럼명을 지정해서 출력할 수 있다. 2번째 열의 칼럼명이 2이므로 `2`를 통해 2번째 열만 출력할 수 있다.
Alias 사용
별명(Alias)를 사용해도 쉽게 구할 수 있다. mysql에서 Alias 사용법은 `as`를 붙이면 된다.
행 지정
행 지정 방법에 대해 알아보자.
LIMIT 사용
`LIMIT` 구문은 출력되는 행의 수를 제한할 수 있다.
`LIMIT 1,1`은 1번째 인덱스에서 1개의 값을 출력한다는 의미다. 만약 `LIMIT 0,1`이라면 0번째 인덱스에서 1개의 값을출력한다는 의미다.
limit의 위치를 위와 같이 바꿔도 정상적으로 출력된다.
예시
간단한 테이블과 함께 예시를 살펴보자.
위와 같은 테이블이 있을 때, 2번째 행의 password 칼럼을 구해보겠다. 즉, `cs`를 구해보겠다.
만약 서버에서 위와 같이 SQL Injection에 취약한 코드를 가지고 있다는 가정하에 진행하겠다.
칼럼 지정
위와 같이 칼럼 수를 맞춘 후, 백틱(`)으로 특정 칼럼을 지정해 출력시켜주고 있다.
행 지정
앞서 살펴 본 바와 같이 limit을 통해 특정 행을 출력하고 있다. 첫 행은 `union select 1,2`에 해당하는 부분이고, 두 번째 행은 우리가 목표로 하는 값이 아니기 때문에 건너뛰었다. 따라서 3번째 행의 값을 출력시키기 위해 `limit 2,1`을 써주었다.
'분류 전 > 개념 노트장' 카테고리의 다른 글
Interval이 다를 때 OTP 코드가 다른 이유와 드림핵 SuperSecure OTP (0) | 2024.07.07 |
---|---|
[Flask] session 구조 (0) | 2024.04.11 |
[Node.js] prepared statement 사용 시 주의 사항 (1) | 2024.03.28 |
[SQL] mysql boolean 비교 시 동작 방식과 false injection (0) | 2024.02.23 |
[python] pickle 모듈 간단 사용법 및 취약점 (1) | 2024.02.12 |