김승현
[part 5]누구나 쉽게 따라 하며 배우는 웹 해킹 첫걸음 - 공격기술1 : 데이터베이스를 공격하는 sql injection 본문
[part 5]누구나 쉽게 따라 하며 배우는 웹 해킹 첫걸음 - 공격기술1 : 데이터베이스를 공격하는 sql injection
kshind 2023. 4. 30. 14:15sql injection이란? 해석하게 되면 sql 삽입이며 sql에 악의적인 쿼리를 삽입하여 실행하게 만드는 것.
이때 악의적인 쿼리를 payload라고 함
데이터베이스를 대상으로 하는 공격이기 때문에 정보에 대한 조회, 수정, 삭제를 할 수 있기 때문에 크리티컬함
sqli가 가능한 이유: 아이디 또는 비밀번호를 ''(작은 따옴표)를 기준으로 범위를 지정해서 문자열을 받는 방식인데,
아이디에 admin' or 1=1 --과 같은 방식으로 싱글쿼터를 사용해서 강제적으로 범위를 닫아서 질의문의 내용을 바꿈
여기서 --는 sql에서 주석을 의미함.
-> 따라서 1=1 뒷 부분은 모두 주석처리가 되기 때문에 admin이라는 아이디를 가진 계정에 접근하게 됨
우리가 접속해야 할 아이디가 admin인 것을 아는 것이 당연하진 않음.
-> 이렇게 접근해야할 대상을 모를 경우 사용할 수 있는 방법이 blind sqli이다.
a' or length(pw) < 10 -- : a라는 id의 pw의 길이를 알 수 있는 paylaod (length는 길이를 반환함)
-> 만약 pw가 10 미만이라면 참이기 때문에 정상적으로 로그인이 되고 이상이면 login failed!가 출력됨
a' or substring(pw,1,1)='a' and id = 'admin'-- : admin id의 pw의 첫 자리가 a인지 확인하는 쿼리문
-> admin이라는 id에서 pw의 첫 자리가 a인지 확인하는 payload
sqli 우회방법
1. 특수문자 필터링
- addslashes, +++ mysql_real_escape_string()이라는 함수도 있음(특수문자들 앞에 \를 붙임)
두 가지의 차이점
1. 범위
- addslashes의 경우 ', ", \만 필터링하지만 mysql_real_escape_string함수의 경우 null문자나 0x00문자도 필터링함
2. 인코딩
addslashes의 경우 인코딩을 진행하지 않고 처리를 하기 때문에 인코딩된 문자열의 경우 제대로 처리되지 않을 수 있음
2. prepared statement
- 사용할 쿼리를 미리 준비해두고 필요한 부분만 받는 방식
사용자로부터 입력받은 데이터의 형식을 정확하게 파악하고 의도로부터 벗어나는 것을 방지함
3. orm사용
'book_summary > web' 카테고리의 다른 글
[part 7]누구나 쉽게 따라 하며 배우는 웹 해킹 첫걸음 - 공격기술3 : 비정상적인 요청을 성공시키는 파라미터 변조 (0) | 2023.05.06 |
---|---|
[part 6]누구나 쉽게 따라 하며 배우는 웹 해킹 첫걸음 - 공격기술2 : 다른 사용자를 공격하는 XSS(Cross Site Scripting) (0) | 2023.05.02 |
[part 4]누구나 쉽게 따라 하며 배우는 웹 해킹 첫걸음 - 간단한 웹 서비스 구현하기 (0) | 2023.04.27 |
[part 3]누구나 쉽게 따라 하며 배우는 웹 해킹 첫걸음 - linux와 친해지기 (0) | 2023.03.28 |