d0r1

[androgoat] Insecure Data Storage 본문

모바일 진단/Android

[androgoat] Insecure Data Storage

d0r1 2023. 10. 23. 11:25

insecure data storage

안전하지 않은 데이터 저장공간

 

1. shared preferences - part 1

이 둘 중 하나일 것으로 보입니다

먼저 두 개 다 확인해보도록 합시다

우선 어플을 열고 save를 누르면 어떤 반응이 나오는지 확인해보았더니

"data saved"라는 알림이 발생됩니다

 

또한, 문제의 제목에서 shared preferences 라는 것에 의해 

힌트를 얻을 수 있는데, 

SharedPreferences는 안드로이드 앱의 데이터를 키-값 쌍으로 저장하기 위한 기본적인 데이터 저장 방식 중 하나입니다. 이 데이터는 해당 앱 내에서만 접근 가능하며 다른 앱에서 공유되지 않습니다.

즉, 앱 내에 해당 저장공간이 존재하고 있음을 확인할 수 있습니다

해당 부분을 확인해보면

users.xml 이라는 파일이 존재하고 있음을 확인할 수 있고

해당 파일을 확인해보면

password와 username이 저장되고 있음을 확인할 수 있습니다

앱에서 그럼 값을 넣은 다음 확인을 해보도록 해보겠습니다

timber , timber

값이 저장되는 모습을 확인할 수 있습니다

 

2. shared perferences - part 2

다음 레벨로 가기 위해서는 10000 포인트가 필요한데, score를 누를때마다 1 포인트를 지급합니다

그러나, 10000번을 누르지는 말라고 합니다

이 또한, 한번 클릭시 shared_prefs에 생성되므로 ls 를 통해 확인할 수 있습니다

vi 에디터를 사용하여, score를 수정해준 다음, 앱을 재시작하여 버튼을 누르게되면

다음과 같이, 게임을 이겼다고 메시지가 전환됩니다

 

3. SQLite

파일을 확인해보면, aGoat라는 이름으로 데이터베이스 파일이 생성되고 있음을 확인할 수 있습니다.

이를 토대로 find 명령어를 통해 aGoat의 위치를 파악해보니, /data/data/owasp.sat.agoat/databases/에 위치하고 있음을 확인할 수 있습니다.

해당 디렉터리를 확인해보았더니, 3개의 파일이 존재했습니다.

  1. aGoat: 이 파일은 실제 데이터 파일일 수 있으며, 일반적으로 SQLite 데이터베이스 파일과 관련이 있습니다. Android 앱은 종종 SQLite 데이터베이스를 사용하여 구조화된 데이터를 저장합니다. 이 파일은 앱이 저장한 데이터를 포함할 수 있습니다.
  2. aGoat-shm: 이 파일은 SQLite 데이터베이스와 관련된 것으로 보입니다. -shm 확장자 파일은 SQLite에서 사용하는 "Shared Memory" 파일을 나타내며, 데이터베이스 파일에 대한 캐시 및 기타 정보를 저장할 수 있습니다.
  3. aGoat-wal: 이 파일도 SQLite 데이터베이스와 관련이 있습니다. -wal 확장자 파일은 SQLite에서 사용하는 "Write-Ahead Logging" 파일을 나타내며, 데이터베이스에 대한 변경 사항을 기록하고 롤백 및 기타 작업에 사용됩니다.
위 파일들은 Android 애플리케이션 데이터 저장 및 데이터베이스 관리를 지원하기 위해 자동으로 생성되며, 일반적으로 해당 앱에서만 액세스할 수 있습니다. 데이터베이스 파일 (aGoat)은 앱이 저장하는 데이터를 포함하고, 다른 두 파일 (aGoat-shm 및 aGoat-wal)은 데이터베이스 파일을 지원하는데 사용됩니다.

- chatgpt 

파일들은 다음과 같았습니다.

즉, aGoat를 제외한 파일들은 aGoat를 관리하기 위한 파일들로 보입니다.

 

aGoat는 sqlite로 작성되었으므로, sqlite 명령어를 통해 확인할 수 있습니다.

4. tempfile

 

onclick 이벤트 발생 시, users+tmp라는 이름으로 파일을 만들고 있음을 확인할 수 있습니다.

username과 password를 입력하고 save를 진행하면

다음과 같이 username과 password를 담고 있는 파일이 생성되었음을 확인할 수 있습니다

 

5. external storage - sdcard

외부 저장소에 값이 저장되는 듯 합니다

또한  코드를 분석해보면, getExternalStorageDirectory에 의해 외부 저장소의 루트폴더에 저장되고 있음을 확인할 수 있습니다.

 

우선 값을 입력해보겠습니다

다음과 같은 값을 입력했음에도 불구하고, 아무런 알림이 발생하지 않았습니다.

왜 그런가 확인해보았더니, 권한을 부여하지 않았기 때문이었습니다

권한을 부여하고, 다시 시도를 해보겠습니다

그랬더니, 정상적으로 저장되었음을 확인할 수 있었습니다.

우선 sdcard가 문제 이름이므로, sdcard로 이동하여 파일들을 확인해보겠습니다

앞서 봤던 tmp파일이 존재하고 있음을 확인할 수 있습니다

해당 파일을 열어보겠습니다

입력한 username과 password가 기록된 모습을 확인할 수 있습니다.

 

'모바일 진단 > Android' 카테고리의 다른 글

[androgoat] HardCode Issue  (0) 2023.10.25
[androgoat] side channel data leakage  (0) 2023.10.24
[androgoat] Input Validations  (0) 2023.10.24
[DROZER] 설치  (0) 2023.10.20
[androgoat] HTTP/HTTPS  (0) 2023.10.20