일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- XSS
- frida
- Openstack
- foremost
- kibana
- ctf
- Suninatas
- Volatility
- 파이썬
- lord of sql injection
- InsecureBank
- MFT
- 인시큐어뱅크
- 2018
- Docker
- elasticsearch
- NTFS
- SQL Injection
- CTF-d
- ESXi
- beebox
- Strings
- igoat
- Reflected XSS
- 안드로이드
- diva
- base64
- logstash
- vulnhub
- otter
- Today
- Total
목록모바일/Android DIVA (13)
Information Security
목표: 미사일 발사 코드를 알아내는 것이 아닌 애플리케이션을 crash 시키고 해당 원인을 알아내는 것이 목표이다. 임의의 값 1234 입력 시 Acess denied! 메시지를 확인할 수 있다. 소스코드를 보면 DivaJni 메소드를 참조하는 것을 알 수 있다. 소스코드를 보면 '.dotdot'라는 문자열이 하드 코딩된 것을 알 수 있다. 그리고 SIZEMAX가 20으로 설정된 것으로 보아 버퍼오버플로우가 발생할 것 같다. .dotdot 문자열을 입력하면 미사일이 발사 카운트를 보여준다. divajni.c 소스코드 하단을 보면 문자열을 체크하지 않는 strncmp 함수를 사용하는 것을 알 수 있다. A 문자를 40개 입력 시 버퍼오버플로우가 발생하는 것을 알 수 있다.
목표 : 하드 코딩된 정보를 찾아라 1234 입력 시 Access denied! 접근 거부 메시지를 확인할 수 있다. 소스코드를 보면 클래스에서만 접근 가능한 DivaJni djni를 확인할 수 있다. 소스코드를 보면 divajni 라이브러리를 Load 하는 것을 알 수 있다. lib 디렉토리를 확인하면 라이브러리 파일을 확인할 수 있다. adb pull명령어를 통해 libdivajni.so파일을 추출했다. objdump를 이용해 disassemble과정을 거치면 olsdfgad;lh 문자열을 확인할 수 있다. Access granted! 메시지를 확인할 수 있다.
목표 : PIN번호를 설정 후 해당 번호를 통해 접근이 가능한 앱을 PIN번호를 모르는 상태로 앱을 실행하지 않고 접근하기 임의의 PIN 번호를 입력을 하면 PIN 번호가 생성되는 것을 알 수 있다. GO TO PRIVATE NOTES 번튼을 클릭하면 PIN 번호를 입력하라는 화면을 보여준다. 생성된 PIN 번호를 입력 시 정보를 보여주는 것을 알 수 있다. 소스코드를 보면 jakhar.aseem.diva.NotesProvider의 exported가 true로 설정되어 있는 것을 확인할 수 있다. provider를 통해 외부에서 해당 content를 불러올 수 있다. 소스코드에서 provider의 URI의 정보를 확인할 수 있다. 명령어를 실행하면 Private Notes에 저장되어있던 정보가 출력된다.
목표: 앱을 실행하지 않고 Tveeter가 제공하는 PIN을 모르는 상태로 API Credential 획득하기 / 비즈니스 로직 문제이므로 코드를 볼 필요가 있다. Register Now 선택 후 1111 입력 시 에러 메시지가 발생하는 것을 알 수 있다. 뒤로 가서 Alerady Registered를 선택하면 API Credential을 확인할 수 있다. 이번 문제와 관련된 액티비티는 2개라는 것을 알 수 있다. 소스코드를 보면 boolean함수를 통해 aci2rbregnow의 결과를 chk_pin의 값으로 설정한다. isChecked는 체크박스가 선택되었는지를 확인하는 메서드이며 rbregnow는 Register Now체크박스인 것 같다. 따라서 Register Now 체크박스가 선택되었다면 chk_..
목표: 앱을 실행하지 않은 상태에서 API 자격증명 획득하기 VIEW API CREDENTIALS 버튼 클릭 시 API 정보가 노출된 것을 알 수 있다. 소스코드에서 Activity는 intent-filter로 보호된 것을 볼 수 있다. 그러나 절대 intenet-filter를 보호 메커니즘으로 사용하면 안 된다. intent-filter가 Activity와 같은 애플리케이션 컴포넌트에 쓰였을 때 해당 컴포넌트는 공개적으로 export 되기 때문에 임의로 접근할 수 있다. am = Activity Manager, start = Activity 실행, APICredsActivity를 시작하라는 명령어다. 메인 화면에서 바로 Vendor API Credentials 화면을 보여주는 것을 알 수 있다.
목표: web URL외의 정보를 입력해 민감한 정보에 접근하기 입력 값에 https://www.naver.com 입력 후 view를 클릭했다. 네이버 주소로 이동한 것을 알 수 있다. 외부 저장소에 저장되어 있는 .uinfo.txt 파일을 호출했는 데 정보가 노출되는 것을 알 수 있다. file:///data/data/jakhar.aseem.diva/shared_prefs/jakhar.aseem.diva_preferences.xml 호출 시 동일하게 내부 저장소에 저장되어 있는 정보가 노출되는 것을 알 수 있다. WebView 취약점을 이용한 사례 WebKit은 구글 크롬 웹 브라우저와 안드로이드 브라우저에 포함되어 수많은 브라우징들을 위한 엔진. android.webkit 패키지는 웹을 출력하기 위해 ..
목표: 한번의 검색으로 DataBase의 모든 사용자 정보 출력 '(싱글 쿼터)를 입력했다. Logcat 정보를 보면 SQL 쿼리 SELECT * FROM sqliuser WHERE user = ''' 오류가가 보이는 것을 알 수 있다. ' or '1'='1' -- 참값을 만든면 사용자 정보가 노출되는 것을 알 수 있다.
목표: 개인정보가 어디에&어떻게 저장되는 지 및 취약한 코드 검증 test/test 입력 시 데이터가 저장된 것을 알 수 있다. 외부 저장소는 Device에 마운트 시켜 사용하기 때문에 /mnt/sdcard 경로를 이동하면 .uinfo.txt 파일에 test/test 평문으로 저장되어 있는 것을 알 수 있다. 소스 코드를 보면 ExternalStorageDirectoyr에 .uinfo.txt 파일로 평문으로 저장되는 것을 알 수 있다.