목록분류 전체보기 (329)
뉴비에욤
9 번째 문제, "9. ACCESS CONTROL ISSUES - PART 1"을 클릭한다. 목표를 보면 버튼을 클릭할 때 API 자격 증명을 접근할 수 있는데 앱을 실행하지 않고 해당 자격 증명에 접근해야 한다. API 자격 증명을 보면 위 사진과 같다. APK. 파일의 Manifest.xml 파일을 보면 위 사진과 같은데, activity는 intent-filter로 보호 된 것을 볼 수 있다. 그러나 절대 intenet-filter를 보호 메커니즘으로 사용하면 안 된다. intent-filter가 activity와 같은 어플리케이션 컴포넌트에 쓰였을 때 해당 컴포넌트는 공개적으로 export 되기 때문에 임의로 접근할 수 있게 되어 진다. * 인텐트 필터와 구성 요소에 대해서는 다음 링크 참고 ->..
8 번째 문제 "8. INPUT VALIDATION ISSUES - PART 3"을 클릭한다. 목표를 보면 웹 URL을 이용하는 것이 아니라, 다른 것을 이용하여 민감 정보를 접근하라고 한다. 일단 혹시 모르니 http://google.com 입력 후 VIEW를 클릭한다. 그냥 구글 홈페이지가 열릴 뿐 별다른 행위는 발생하지 않는다. (logcat 으로 보아도 마찬가지) InputValidation2URISchemeActivity 클래스의 코드를 대충 보면 별 문제가 없어 보인다. 문제는 위 사진에서 강조 된 라인에서 사용자의 입력에 대하여 별다른 필터링을 하지 않고 loadUrl 함수의 인자로 사용한다는 뜻이다. > URL 이 아닌 다른 것을 이용하여 민감 정보를 획득하라고 했으니 파일 접근을 시도해 ..
7 번째 문제, "7.INPUT VALIDATION ISSUES - PART 1"을 클릭한다. 목표를 보면 특정한 사용자의 이름을 알지 못하는 상태에서 모든 사용자의 데이터에 대하여 접근하는 것이다. 3명의 사용자가 있는데 단 한번의 악용적인 검색을 통해 모든 데이터를 가져와야 한다. 사용자는 모른다고 하지만 게싱을 통해 어플의 이름인 "diva"를 입력하고 SEARCH를 클릭하면 위 사진처럼 diva 사용자의 아이디, 비밀번호, 신용카드 번호가 나타난다. SQLInjectionActivity 클래스를 보면 SQL 쿼리를 볼 수 있다. DB 생성 후 3명의 사용자(admin, dvia, john)에 대한 데이터를 삽입한다. 그리고 "SELECT * FROM sqliuser WHERE user=\'"사용자..
6 번째 문제 "6. INSECURE DATA STORAGE - PART 4"를 클릭한다. 임의의 로그인 정보를 입력한다. InsecureDataStorage4Activity 클래스 코드를 보면 외장저장소 위치에 uinfo.txt 라는 파일을 생성하는데 파일명 앞에 '.' 이 붙는다 > 보통 안드로이드에서 외장 저장소라 하면은 /sdcard 경로를 의미한다. > 파일명 앞에 '.' 을 붙이면 숨김 파일로 인식 되어 파일 탐색기의 기본 설정으로는 보이지 않기 때문에 숨김 파 일 표시를 하거나 "ls -a" 명령를 이용해야 한다. /sdcard 경로로 이동하면 숨김 파일인 ".uinfo.txt" 파일을 보면 사용자가 입력한 로그인 정보를 볼 수 있다.
5번째 문제 "5. INSECURE DATA STORAGE - PART 3"을 클릭한다. 기존 문제들과 마찬가지로 임의의 로그인 정보를 입력한다. InsecureDataStorage3Activity 클래스 코드를 보면 uinfo 문자열로 시작하는 임시 파일을 만들어 사용자가 입력한 값을 저장한다. diva 패키지 경로로 이동해보면 uinfo+숫자+tmp 이름을 가지는 파일을 볼 수 있는데 내용을 보면 사용자가 입력한 로그인 정보임을 알 수 있다.
4 번째 문제 "INSECURE DATA STORAGE - PART 2, 안전하지 않은 데이터 저장 파트 2"를 클릭한다. 목표는 이전과 마찬가지로 민감한 정보가 어디에 어떻게 저장되는지, 관련 코드를 알아내는 것이다. 임의의 인증 정보를 입력하면 성공적으로 저장되었다는 메시지가 나타난다. InsecureDataStorage2Activity 클래스 코드를 보면 ids2 라는 데이터베이스를 생성 후 myuser 라는 테이블을 추가한다. 그리고 사용자가 입력한 값을 해당 테이블에 삽입한다. 위 사진에서 보는 것처럼 diva 앱의 전체 패키이 경로에서 databases 라는 폴더를 보면 2가지 종류의 파일이 있다. > divanotes.db > ids2 InsecureDataStorage2Activity 클래..
3번째 문제인 "INSECURE DATA STORAGE - PART 1, 안전하지 않은 데이터 저장 파트 1"를 클릭한다. 목표를 보면 식별 정보가 어디에 어떻게 저장되는지, 관련 코드는 어떻게 되는지 알아내야 한다. 입력란을 보면 써드파티 서비스의 사용자 이름과 비밀번호를 입력하라고 하는데 이런 류의 어플은 실제로 사이트 별로 계정과 이름을 다르게 설정할 경우 외우는 것이 힘들 수 있기 때문에 자동 로그인을 위해 실제로 사용하기도 한다. 임의의 아이디와 비밀번호를 입력하면 성공적으로 저장되었다는 메시지가 나타난다. adb shell을 이용해 DIVA 앱이 설치 된 대상 디바이스의 쉘을 얻는다. 안드로이드는 보통 어플 관련 데이터가 "/data/data/어플 패키지" 경로에 저장된다. > cd `ls |..
2번째 문제인 "HARDCODING ISSUES - PART 1, 하드코딩 이슈 파트 1"를 클릭한다. 목표를 보면 어떤 정보가 어디에 하드 코딩 되어 있는지 찾으라고 한다. 중간쯤을 보면 벤더 키를 입력하라고 되어 있는데 특정한 키를 이용해야 벤더(개발 회사)만의 기능을 이용할 수 있는 듯 하다. 임의의 벤더 키를 입력하면 접근이 거부되었다고 나온다. HardcodeActivity 클래스를 보면 access 함수에 조건이 있는데 사용자가 입력한 값을 "vendorsecretkey" 문자열과비교하고 있다. 해당 키를 입력하면 접근 허용 메시지가 나타난다.
DIVA 앱을 설치하고 실행하면 위 사진처럼 13개의 취약한 문제점 목록이 나타나는데, 일단 첫 번째 문제인 "1. INSECURE LOGGING, 안전하지 않은 로깅"을 클릭 한다. Objective(목표)를 보면 로깅되는 정보와 왜 그런 취약점이 발생하는지 관련 된 코드를 알아내야 한다. 입력 창을 보면 카드 번호를 입력하라고 되어 있다. 임의의 카드 번호를 입력하고 "CHECK OUT"을 클릭하면 에러 메시지가 발생한다. 안전하지 않은 로깅이라 하면 민감 정보(아이디, 비밀번호, 세션 값, 금융 정보)가 평문으로 로그 파일에 남는다는 뜻이기 때문에 컴퓨터와 연결하여 adb를 이용하여 로그 정보를 실시간으로 살펴 보면 된다. 컴퓨터와 연결 된지 확인 후 로그를 볼 수 있게 logcat 명령어를 실행한..