SQL Injeciton
- WHERE 구문 우회
#ID = 1
#PASSWORD = 1234
#query
SELECT name, email FROM users WHERE ID = '1' and PASSWORD = '1234'
#ID = 1' or '1' = '1'--
#PASSWORD = 1234
#query
SELECT name, email FROM users WHERE ID = '1' or '1' = '1'--' and PASSWORD = '1234'
SELECT name, email FROM users WHERE ID = '1' or '1' = '1'
or True 형태를 만들어서 필요한 정보를 가져오는 방식
- UNION 공격
SELECT name, email FROM users WHERE ID = '1' UNION SELECT name, pw FROM users#'
합집합 UNION 을 이용한 방식
하지만 원래 조회하는 SELECT 문의 칼럼개수와 뒤의 요청 칼럼개수가 같아야 함으로
ORDER BY 를 통해 먼저 몇 개의 칼럼을 반환하는지를 알아내고
SELECT를 이용하여 검색
이러한 지식을 가지고 DVWA에서 실습을 해보았다.
코드의 내용은 다음과 같았다. query 부분을 보니 공부한 내용과 비슷하게 취약점이 있을법한 모습을 볼 수 있었다.
User ID에 각각 1, 2를 넣어봤을때
ID가 1인 admin, ID가 2인 Gordon을 출력했다.
책에서 준 팁에 의하면
' 를 넣었을 때 위와 같이 sql 오류가 뜬다면 SQL Injection에 취약할 확률이 높다.
User ID에
1' or '1' = '1
을 넣었을 때 모든 정보가 출력되는 모습을 볼 수 있었다.
다음으로 UNION을 이용한 sql injection 역시 실습 해 보았다.
UNION은 앞의 SELECT의 요청 COLUMN개수가 같아야 되기 때문에
1' ORDER BY 1#
1' ORDER BY 2#
넣어가며 칼럼의 개수를 찾는다.
칼럼의 개수이상이 됬을때 다음과 같은 오류가 발생하였다. (칼럼개수 2개)
위의 사진과 같이 오류없이 작동하는것을 알 수있고
SELECT 뒤에 상수가 나올시 상수 그대로 결과에 들어가는 모습을 알 수 있다.
이를 통해 어떤 칼럼의 정보가 어느 위치에 있는지를 알 수 있다.
Mysql 데이터베이스 에서는 information_schema 데이터베이스 schemata 테이블에서 데이터를 관리한다
이를 이용하여 schema_name을 가져온다.
의문) Mysql 데이터베이스를 쓰는지 어떻게 알 수 있을까?
데이터베이스 이름이 dvwa 라고 추측하고 dvwa 데이터베이스의 테이블만 출력시킨다.
user 테이블의 칼럼을 출력한 후
user password를 출력하면서 실습을 마친다.
password의 내용은 해싱 되어 있지만
다음과 같은 방식으로 복호화 해서 비밀번호를 알아낼 수도 있다.
'정보보안 > 화이트 해커를 위한 웹해킹의 기술' 카테고리의 다른 글
Command Injection (0) | 2022.01.29 |
---|---|
Blind SQL Injection (0) | 2022.01.29 |
취약한 인증 공격 (0) | 2022.01.25 |
정보 수집 (0) | 2022.01.22 |
Burp Suite 기능 (0) | 2022.01.22 |