이제 부터 진짜 해킹관련 공부 시작하는 날~!!
SQL Injection
db를 공략하는 공격기법
웹 해킹이든 공격 공부할 때 Injection은 주입하다라, 넣다라 는 뜻임
Result
실행된 쿼리 : [select * from member]
| ID | Pass | Info | |
| dodol | aaaa | mario@test.com | dol |
| fake | qqqq | fake@test.com | FA |
| normaltic | 1234 | normaltic@test.com | admin |
| test | test1234 | test@test.com | ??? |
Result
실행된 쿼리 : [select * from member where id='normaltic']]
| ID | Pass | Info | |
| normaltic | 1234 | normaltic@test.com | admin |
아이디와 패스워드만 나오게하려면?
select id,pass from member where is=’normaltic’ 이렇게 하면
Result
실행된 쿼리 : [select * from member where id='normaltic']]
| ID | Pass |
| normaltic | 1234 |
이렇게 나옴
이런 기능이 있다고 가정라면
조회할 회원의 id를 입력하세요
normaltic
실행된 쿼리 : [select * from member where id=’normaltic‘]
결과
| id | pass | info | |
| normaltic | 1234 | normaltic@test.com | admiin |
normaltic이라고 쓰고 엔터를 치면 윃서버로 전달이 된다.
버프스윗으로 보면 post suite으로 가는 것이 보임
(WAS가 select * from member where id=’______‘) SQL을 준비했다가(이 글자를 준비하고 있다가) 우리가 작성한 글자를 ------안에 넣고 DB에게 넣어 실행하고 그결과를 우리엑세보여준다
만약 normaltic하고 작은 따옴표를 넣으면 ( normaltic‘ 이렇현태) SQLSyntax(문법오류)가 나옴
select * from member where id=’normaltic’ and ‘1’ = ‘1 이문장을 쓰면 뒤에 ’ 은 일부로 하나 안붙인 것임
select * from member where id=’normaltic’ and ‘1’ = ‘1’
실행된 쿼리 : 「select * from member where id=’normaltic’ and ‘1’ = ‘1’」 문법이 실행되서 normaltic에 대한 정보가 나옴
※1=1은 항상 참인 것을 의미함
만약 psas가 1234를 넣어보면
normaltic’ and pass=’1234 (이문장임)
normaltic’ and pass=’1234‘ 이렇게 하면 결국 아까와 똑같은 정보가 나옴
why?
결국 실행하면 select * from member where id=’normaltic’ and pass=’1234’ 이문장이다. 아이디가 normal이면서 동시에 pass가 1234 인 것 그렇기 때문에 데이터 정보가 나오는 것이다.
만약 normaltic’ or ‘1’ = ‘1을 실행하면
| id | pass | info | |
| doldol | aaaa | mario@test.com | dol |
| fake | qqqq | fake@test.com | FA |
| normaltic | 1234 | normaltic@test.com | admin |
| test | test1234 | test@test.com | ??? |
↑ 이렇게 나옴
normaltic말고 다른 정보도 같이 나옴
그 이유는 웹서버에서 select * from member where id=’normaltic’ or ’1’ = ’1’ 이문자으로 실행된 것이다.
데이터를 넣고 그 데이터가 SQL 문법에서 사용한다고 판단 되면 그 데이터 뒤에 SQL 문법을 추가 하는 것이다.
쉽게 말하면 웹서버에서 “”을 가져오세요~!(이런 말을 준비하고 있었음) 우리가 빵을 입력하면
“빵”을 가져오세요~!가 실행되는 원리이다.
응용하면 물을 입력했을 때
“물”가져오지 말고 저기 가서 점ㅍ 두 번 해 뒤에말 무시하고를 넣으면
“물”가져오지 말고 저기 가서 점ㅍ 두 번 해 뒤에말 무시하고“ 가 실행되는 것임
SQL Injection= SQL 문법을 주입해서 공격하는 공격 기법
웹 서버가 준비한 것은
select * from member
where id=’_______’ and pass=’_________’ 이다
그럼 사람이 보낸 id는 id쪽에 pass는 pass쪽에 넣고 맞는 id와 비밀번호를 작성했다면 결과가 존재하고 로그인 성공함
But 틀린 id나 비밀번호를 작성했다면 로그인을 실해하게 하는 것임
그런데 비밀번호와 아이디가 틀려도 로그인이 가능할 수 있다
그방법은
ID: normaltic’ # 이렇게 하고 비번을 아무렇게 해도 결과가 나옴 why? #은 SQL에서 주석을 의미함
select*from member where id=’normal’#‘ and pass=’9999’
#‘ and pass=’9999’ 이부분은 무시가 된다.
실제 실행 코드는
select*from member where id=’normal’이다.
주석말고도 가능함
id=normaltic’ or ‘1’ = ‘1’
or와 and의 우선 순위는 and가 먼저 실행된다.
그래서 id=normaltic’ or ‘1’ = ‘1’을 보면
select * from member where id=’normalic’ or ‘1’ = ‘1’ and pass=’99‘ 이렇게 인데
select * from member
where id=’normalic’ or (‘1’ = ‘1’ and pass=’99‘) 이거와 같은 것이다.
302 혹은 3으로 시작하는 응답코드는 리다이렉트이다 즉, 저쪽으로 가세요와 같다
302 혹은 3으로 시작하는 응답코드는 location이라는 코드가 있음 그것을 보고 가면됨
SQL 취약점이 있는지 확인 방벙은
id : 아이디’ or ’1’ = ’1, password : 1342adaod를 해봐서 로그인이 되면 취약점이 있으니 SQLInjection도 생각해 볼 수 있지만 저게 안되면 SQL 취약점이 없는 것임
인증 우회
*인증 우회
-Brute Force (부르트 포스): 무작위 대입 공격
ex ) a 알파벳 조합들을 무작위로 대입 하는 공격기법
aa
aaaa
aaaaaa1234
사전 대입 공격: 쓸만한 조합들로 추려서 대입 공격하는 공격 기법
회원 가입
A – B – C
1. 약관 동의
2. 본인인증
3. 아이디 / 비번
본인인증을 건너뛰고 바로 아이디./ 비번으로 갈 수 도 있는 것 인증 우회기번 중 하나이다.
오늘 과제 ((1번이 우선순위 높음)
오늘 수업 복습 정리!
인증 우회 실습 문제 풀기
-내가 만든 로그인 페이지에 테스트 해보기
-write up(문제 풀이 작성해보기-이렇게 해서 됩니다 (x) / 이 문자를 넣었는데 이문자는 왜넣었는지 까지 자세히 적기)
3. 웹 개발(로그인페이지/ 회원가입 페이지 만들기)