목록Android_Vuln (26)
뉴비에욤
13번 문제를 클릭 해 보면 고전적인 메모리 오염 취약점이라고 한다. 일반적으로 사용자의 입력으로 인해 일어아는 메모리 오염 취약점은 스택 오버플로우이다. 해당 문제의 코드를 보면 위 사진과 같은데 12번과 비교했을 때 딱히 달라진 것은 없다.* access 대신 initiateLaunchSequence 함수를 사용한다는 정도가 차이점. 오버플로우 문제로 추정되니 'A' 문자열을 40개 정도 입력해 본다. 40개의 문자 입력 시 뻗는다. logcat을 통해 메시지를 보면 SIGSEGV(세그먼트 폴트) 에러가 발생하였고 eip 레지스터 값이 41414141 인 것을 볼 수 있다. * 전형적인 오버플로우 취약점으로서 지문에서 말한 것처럼 익스가 가능한 환경이긴 하다. 그러나 여러모로 귀찮기 때문에 다른 방법..
12번 문제를 클릭하면 하드 코딩 된 정보를 찾으라고 한다. 일단 대충 게싱으로 때려 박으면 당연히 액세스 거부 오류가 발생한다. JEB로 디컴파일을 해보면 문제에 해당 되는 클래스 코드가 다음과 같다.사용자가 입력한 값을 DivaJni의 access 함수 파라미터로 사용하여 비교 후 분기가 나타난다. DivaJni 코드를 보면 위 사진과 같은데 divajni 라는 라이브러리를 로딩한다. jeb 프로젝트 탐색기의 라이브러리 폴더에서 해당 라이브러리를 검색 후 추출한다. 추출 된 라이브러리에서 문자열을 뽑아내면 그냥 딱 봐도 뭔가 수상한 문자열이 2개 보이는데 우선 첫 번째 문자열을 이용하여 액세스를 시도한다. 액세스 성공
11번째 문제, "ACCESS CONTROL ISSUES - PART3"을 클릭한다. 목표를 보면 PIN을 설정하고 해당 PIN을 이용해야만 개인 노트에 접근할 수 있는데, 우리는 PIN을 알 지 못하는 상태에서 개인 노트에 접근을 해야 한다. 일단 임의의 PIN 코드를 생성하면 위 사진과 같이 성공 메시지가 나타난다. 개인 노트 내용을 알아보기 위해 "GO TO PRIVATE NOTES"를 클릭한다. 이전에 생성한 PIN을 입력한다. 개인 노트 내용은 위 사진과 같다. Manifest.xml 파일을 보면 위 사진과 같이 provider가 exported=true 상태임을 볼 수 있다. 따라서 우리는 provider의 정확한 경로만 알면 앱을 실행하지 않고 해당 내용을 볼 수 있다. diva apk를 a..
10번 문제, "10. ACCESS CONTROL ISSUES - PART 2"를 클릭한다. 목표를 보면 Tveeter에 등록을 하고 나면 TVEETER API 자격 증명을 얻을 수 있다고 한다. 이 앱은 온라인 등록을 해야 하는데, 벤더가 핀 코드를 주면 해당 핀 코드를 이용해서 등록해야 한다.우리의 목표는 핀 코드를 모르는 상태에서 앱 바깥에서 API 자격 증명을 얻는 것으로, 비즈니즈 로직 문제이기 때문에 코드를 봐야한다고 한다. Register Now를 선택하고 VIEW TVEETER API CREDENTIALS 버튼을 클릭한다. 등록을 시도하면 핀 코드를 입력하라고 한다. 임의의 핀 코드를 입력하면 잘못된 코드라는 메시지가 나타난다. Already Registered를 선택하고 API 자격 증명..
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 클래..