EYEN

DIVA 7단계 본문

Wargame/android

DIVA 7단계

EYEN 2024. 5. 2. 23:00

#1 문제 분석

가. 목적

모든 유저 데이터에 유저 이름 모르고 접근하기를 시도하자.

기본으로 3명의 유저가 있고 하나의 악한 검색을 통해 모든 유저의 데이터를 출력해보자.

나. 활용

소스코드, adb

 

#2 취약점 정보

가. 취약점

옳지 않거나 없는 입력조건 문제는 입력값이 쓰이기 전에 필터링되지 않거나 유효성을 확인하지 않을 때 발생한다.

외부에서 입력받는 컴포넌트를 개발할 때 유효성을 확인해라. 한명이 admin이면 admin을 찾아봐라

나. 취약점 확인법

sqlinjection 비스무리하게 시도하기

문제에서는 유저 이름만 검색해도 나온다.

다. 취약점인 이유

입력 유효성을 검증하지 않으면 xss, sqlinjection 공격에 취약할 수 있다.

 

라. 저렇게 개인정보를 출력하는 경우? 혹은 입력값의 유효성을 확인하지 않는 경우?

 실수!

 #3 코드 분석

 

내용:

onCreate:

sqli라는 DB를 만듦-> DB에 sqliuser라는 테이블을 만듦-> 테이블에서 스키마들을 정의해줌-> 값넣음 3개

search:

srchtxt라는 입력칸 객체를 만들어서 입력받음-> 커서 객체가 

1. 

import android.database.Cursor;

 

특정 데이터베이스 쿼리를 실행한 후, 그 결과로 반환되는 데이터 집합을 순회하고 읽을 수 있는 메서드들을 제공

일반적으로 Cursor는 SELECT 쿼리를 실행한 후 결과 집합을 순회할 때 사용됩니다

2. 

Cursor cr = this.mDB.rawQuery("SELECT * FROM sqliuser WHERE user = '" + srchtxt.getText().toString() + "'", null);

 

커서 객체에서 mDB 데이터베이스에 사용자 입력한 값과 동일한 user가 있는지 퀴리문을 보냄

그리고 출력된 결과들을 cr에 저장

 

 

4.

StringBuilder strb = new StringBuilder("");

가변 문자열을 만들기 위한 클래스, 문자열을 동적으로 추가하고 변경할 수 있다. 

문자열을 변경할 때마다 새로운 문자열 객체를 생성하는 것보다 효율적이라서 사용

 

빈문자열로 초기화된 StringBuilder객체를 생성한다

 

 

 

5.

if (cr != null && cr.getCount() > 0) {
                cr.moveToFirst();
                do {
                    strb.append("User: (" + cr.getString(0) + ") pass: (" + cr.getString(1) + ") Credit card: (" + cr.getString(2) + ")\n");
                } while (cr.moveToNext());
            } else {
                strb.append("User: (" + srchtxt.getText().toString() + ") not found");

커서 객체가 널이 아니고 커서개수가 0보다 클 때 moveToFirst 실행

그리고 스트링빌더 객체에 쿼리에 대한 응답인 cr을 각각 user, pass, credit card로 옮겨서 출력

끝날 때까지 계속 옆으로 옮겨가면서

 

처음부터 아예 없으면 사용자가 입력한 값 없다고 출력

 

 

 

#4 취약점 예방

입력값 검증 방법

1. 길이 제한

if (input.length() >= 8 && input.length() <= 20)

 

2. 형식 검사

String emailPattern = "[a-zA-Z0-9._-]+@[a-z]+\\.+[a-z]+"

3. 입력 제한

if (!input.contains(";") && !input.contains("'"))

4. 값의 범위 검사

if (number >= 1 && number <= 100)

5. 입력값 검증 라이브러리 사용-Apache Commons Validator

if (GenericValidator.isEmail(input))

 

'Wargame > android' 카테고리의 다른 글

DIVA 9단계  (0) 2024.05.04
DIVA 8단계  (0) 2024.05.03
DIVA 6단계  (0) 2024.05.02
DIVA 5단계  (0) 2024.05.02
DIVA 4단계  (0) 2024.05.02