목록AOS (64)
Self-Improvement
Developer Login LoginActivity 클래스에서 로그인을 수행할 경우 performlogin() 메소드가 실행된다. 이때 DoLogin 클래스를 입력받은 아이디, 패스워드와 함께 호출하게 된다. DoLogin 클래스 onCreate() 메소드에서는 받아온 데이터를 각 this.username, this.password에 저장하고 RequestTask() 호출하게 된다. RequestTask() 에서는 postData()를 실행시키게 된다. postData() 메소드에서는 Endpoint가 "/login", "/devlogin"인 2가지 로그인 방식이 존재한다. 그 중 아이디가 "devadmin" 일경우 "/devlogin"으로 요청하는 구문이 존재하는데 이는 개발자를 위한 숨겨진 계정으로..
Hidden Create User Button for Admins 로그인 화면인 LoginActivity 클래스의 onCreate() 메소드를 보면 is_admin의 값이 "no"일 경우 CreateUser Button을 setVisibility gone으로 숨기고 있다. resources.arsc/res/values/strings.xml 파일의 is_admin 값을 보면 "no"로 설정되어 있다. 코드 패치 LoginActivity 클래스 onCreate() 메소드에서 equals("no")가 아닌 다른값으로 변경하거나 strings.xml 파일의 is_admin 값을 변경하여 숨겨진 버튼을 확인해보자 is_admin 값을 yes로 패치하였다. 어플리케이션을 재설치 후 확인하였더니 "Create Use..
Login Bypass AndroidManifest.xml 파일에는 액티비티가 선언되어 있으며 이때 exported 설정값이 true이거나 태그 안에 exporter 설정이 안되어 있으면 기본값으로 true로 설정되는데 이때 해당 액티비티를 권한 없이 요청하여 접근할 수 있다. ADB ADB 명령어를 이용하여 해당 액티비티를 요청하면 된다. adb shell am start -n com.android.insecurebankv2/.PostLogin // Drozer Drozer로의 방법은 아래의 명령어를 수행하면 된다. adb forward tcp:31415 tcp:31415 drozer console connect // 취약점 출력 run app.package.attacksurface com.androi..
InsecureBankv2 https://github.com/dineshshetty/Android-InsecureBankv2 GitHub - dineshshetty/Android-InsecureBankv2: Vulnerable Android application for developers and security enthusiasts to learn ab Vulnerable Android application for developers and security enthusiasts to learn about Android insecurities - GitHub - dineshshetty/Android-InsecureBankv2: Vulnerable Android application for develop....
Launch Code를 입력하라고 되어있다. InputValidation3Activity 클래스를 확인해보면 DivaJni 클래스로 djni 객체를 생성한 후 initiateLaunchSequence() 메소드를 수행하여 return 값이 0이 아니면 "Launching in T - 10 ..." 메시지가 출력된다. DivaJni 클래스를 확인해보면 divajni 라이브러리를 로드하고 있고 initiateLaunchSequence() 메소드는 네이티브로 작성되어 있는 것을 확인할 수 있다. divajni 라이브러리의 initiateLaunchSequence() 함수를 보면 궁극적으로 return 하는 곳에서 strncmp() API로 ".dotdot" 문자열과 비교를 하고 있다. 중요한 것은 입력한 값을..
소스코드 내에 vendor key 값을 알아내는게 목적이다. Hardcode2Activity 클래스를 보자면 DivaJni 클래스의 djni 객체를 생성한 후 access() 메소드를 호출하여 입력한 값과 비교한 후 같으면 Access granted!가 출력된다. DivaJni 클래스를 보면 divajni 라이브러리가 로드되고 access() 메소드가 네이티브 함수로 작성되어 있다. divanjni 라이브러리의 access() 함수를 확인해보면 strncmp() API로 "olsdfgad;lh" 값과 비교하게 된다. 해당 값을 입력하면 맞다고 출력하게 된다.
classes.dex 파일을 동적 디버깅하기 위해서는 android:debuggable 을 설정하거나 루팅할 시 ROM에 ro.debuggable을 1로 고정 셋팅이 필요하다. 위 방식을 할 수 없다면 mprop 바이너리(https://github.com/wpvsyou/mprop) 파일을 실행해서 메모리에 ro.debuggable을 1로 설정해주는 것도 가능하지만 필자의 갤럭시 s9에서는 제대로 동작되지 않았다. 찾아보던 중 MagiskHide Props Config 방식으로 설정하는 방식을 알았으며 많은 사람들이 알 수 있지만 정리 차원에서 적어둔다. 안드로이드 폰을 루팅하게 되면 Magisk 어플이 기본적으로 설치되며 Magisk 어플을 실행한 후 "MagiskHide Props Config" 모듈을..
보호되어 있는 글입니다.
보호되어 있는 글입니다.