Notice
Recent Posts
Recent Comments
Link
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

ac9uaintance5

웹해킹 & 시큐어 코딩 DAY3 본문

Study/Web

웹해킹 & 시큐어 코딩 DAY3

장징징5_5 2023. 3. 15. 00:04

섹션 2. SQL Injection

1. SQL Injection 이란 무엇인가?

SQL : 구조화된 질의 언어

Injection : 주입 

=> 구조화된 질의 언어를 주입하는 공격

 

2. 취약점 발생 원인

데이터 베이스는 변조된 SQL 질의가 신뢰하기 때문에 반환이 되고, 결과를 구성한 뒤 공격자에게 반환된다.

세션이나 쿠키가 있을 수도 있음.

=> 전체적으로 악의적인 행동

입력값 검증 미흡으로 인해 발생

미완성된 SQL 구문과 사용자 입력값이 합쳐져 입력 값 검증 없이 구문이 조합되어 입력값 검증 미흡으로 인해 취약점 발생 !

실습2-1 취약점 유/무 판별 방법

일단 나의 admin 계정으로 로그인

게시글 아무거나 작성

왼쪽은 idex=2 이고 오른쪽은 idex=2-1 을 한 것이다. 차례로 하나는 test2, 하나는 test1

위에서 산술연산을 한 것이다. -> 취약점 판별 

 

(1) 사용자 입력(파라미터) - 숫자형
산술 연산자를 통해 취약점 판별 가능

$query = "select * from board where idx={$idx}";
이 상태로 
select * from board where idx=4-3 로 질의가 된다.

 

이 방법이 빠르게 취약점을 판별할 수 있는 방법 중 하나.

 

(case when 1=1 then 1 else 2 end)

case 구문 사용하는 방법도 있다.

참이면 첫번째, 거짓이면 두번 째

 

 

te'공백'st는 검색 가능
te'bv'st는 검색 불가능

(2) 사용자 입력(파라미터) - 문자형
연결 연산자 !!!

-> mysql 문제

mysql에서 공백을 하면 검색이 가능함.

 

test%' and '%'='

이렇게 해도 검색 가능

like 연산자는 test%' 까지 본다(?) -> 이부분은 이해가 안됨

test%' and '1'='1

이렇게 하면 검색이 안됨

이게 진단자가 하는 실수라는데,, 뭐가 몬지 일단 넘어가자

 

오늘은 너무 피곤해서 이정도만