1

로그인 로직 생각2

로그인 로직 생각2

노아의 블로그

    목차
반응형

먼저 저는 가장 고려해야할 요소가 무엇인가를 생각해보았습니다.

 

생각해보니까 사용자가 입력한 값"격리" 시킨다면 보다 안전하지 않을까? 를 생각해보았습니다.

그래서 다음과 같은 코드를 생각해봤습니다.

 

select '?' as id

join member as m on id = m.id; 

하지만 되지 않았습니다. 테이블이 없어서 계속 오류가 뜨네염...ㅠ

 

Chat gpt한테 물어봤더니 이렇게 하면 쓸 수 있다고 합니다.

 

사용자가 입력한 값은 괄호() 안과 테이블이 모두 격리되어있죠.

과연 뚫을수 있을까요?

 

WITH subquery AS (
  SELECT '?' AS id
)
SELECT subquery.*
FROM subquery 
JOIN member ON id = member.id;

 

물론 UNION같은것을 쓸수도 있습니다.

그러므로 추리를 못하도록 철저히 막아줍시다.

 

WITH subquery AS (
  SELECT 2 AS id LIMIT 1
)
SELECT subquery.*
FROM subquery 
JOIN member ON id = member id
ORDER BY id DESC
LIMIT 1;

 

네. 성능을 전혀 생각하지 않고 서브쿼리,조인,정렬 등 북치고 장구치고 했습니다.

 

 

하지만 보안상으로는 limit1로 결과수를 제한하고 order by를 우리가 먼저 써버리니까 order by절을 통해 컬럼 수 추리가 불가하고 

테이블과 테이블을 격리시켜서 데이터를 추출하기가 어려워졌습니다.

또한 AS 절을 의존적으로 합니다 with과 select도 의존적입니다. 즉 해커 입맛대로 바꾸기가 어렵다는것. 

 

마지막으로 유니온은 컬럼 수와 타입이 같아야하니까 페이크 컬럼을 추가해보겠습니다.

WITH subquery AS (
  SELECT 1,'2',3,'?' AS id,'5',6  LIMIT 1
)
SELECT subquery.*
FROM subquery 
JOIN member ON id = member id
ORDER BY id DESC
LIMIT 1;

 

이정도면 털기 힘들지 않을까요? ㅎ

 

반응형

'해킹 > SQL Injection' 카테고리의 다른 글

새로 만든 로그인 로직 적용  (0) 2023.04.23
로그인 로직 생각1  (0) 2023.04.23
SQL Injection - Union - 절차적 해킹  (0) 2023.04.21