해킹/SQL Injection(11)
-
로그인 로직 생각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같은것을..
2023.04.23 -
로그인 로직 생각1
SQL Injection 공격이 된다고 가정했을때 어떻게 막을것인가 어떻게 공격할것인가 등에 대해서 생각해보았다. 사실 화장실에서 잠깐 생각한거..메모용으로 적은거입니다. 일단 Select * from member where pw = (select * from member where id = ?) 이런 방법을 생각해보았다. 괄호가 있으면 좀더 공격하기 까다로울거 같아서이다. 두번째는 Select * from member where id = ? and password = ? order by desc;를 생각해보았다. order by절을 우리가 먼저 써버리면 해커는 쓰지못하기때문이다. 세번째는 limit절을 쓰는것이다. 어짜피 로그인에 필요한 결과는 하나니까 고의적으로 결과를 제한하는것이다. 이제 자야겠다 ..
2023.04.23 -
SQL Injection - Union - 절차적 해킹
SQL Injecton은 기본적으로 해커들이 사이트의 데이터를 "추출" 하려고 많이 쓰이죠. 해커들한테 데이터란 귀중한 자료여서 삭제하거나 수정하는 일은 별로 없습니다. 그럼 이 추출을 어떻게 할까요? 데이터 추출 방법은 상황에 따라 전략이 달라집니다. 먼저 첫번째로 소개할것은 데이터가 눈에 보이는곳입니다 데이터가 눈에 보이는곳이란 곧 우리가 추출할 데이터가 눈으로 보인다는 소리입니다. 그렇다면 UNION INJECTION을 하면 우리가 입력하는 결과를 눈으로 볼 수 있다는 소리입니다. 하지만 UNION INJECTION을 하려면 SELECT되는 컬럼 수를 알아야하죠. 컬럼 수를 알수있는 방법중 Order by가 있습니다. 아시는 분도 계시겠지만, Order by는 정렬을 할때 사용합니다. 근데 정렬로 ..
2023.04.21 -
SQL Injection - Union
Union은 두개 이상의 테이블을 하나로 뭉치는? 집합하는 그런것이다. 그니까 MEMBER 테이블에 Id와 Password 컬럼이 있다고 가정하고 각각 2개의 데이터 one,1234 two,4321 이라는 id/password 값이 있다고 가정한다. 그렇다면 SELECT * FROM MEMBER UNION SELECT '1111','2222' 이렇게 한다면. 어떤 결과가 나올까? 바로 one 1234 two 4321 1111 2222 라는 결과가 나온다. 눈치를 채신분도 있겠지만 굉장히 위험한 녀석이다. 바로 결과를 변조하는 것이다. Union을 통해서 id가 1111,2222라는 결과를 넣었지만. 이것을 admin으로 바꾼다면? SELECT * FROM MEMBER UNION SELECT 'admin'..
2023.04.14 -
SQL Injection 학습
SQL Injection은 보다시피 SQL 질의문을 삽입하는 공격입니다. 공격을 당할시 DB에 있는 데이터가 유출되거나 인증을 우회해서 관리자 권한으로 로그인하거나 심지어 DB의 데이터 변조까지 가능한 무서운 공격입니다. 로그인 SQL문이 이렇게 있다고 가정해봅시다. SELECT * FROM MEMBER WHERE id = ? AND password = ? 그렇다면 클라이언트에서 로그인 정보를 서버에게 보낼것입니다. 나는 id가 mario고 password 가 mariosuper야. 그럼 저 ? 자리에 사용자가 입력한 문자가 전달되겠죠. 그러면 SQL문은 SELECT * FROM MEMBER WHERE id = 'mario' AND password = 'mariosuper' 가 됩니다. 만약 mario라..
2023.04.14