목록AOS (64)
Self-Improvement
Intent Sniffing and Injection Intent에는 아래와 같이 2가지가 존재한다. 암시적 Intent 특정 의도한 정보를 포함하는 Intent 객체를 생성하고 startActivity() 호출 -> 액티비티 매니저가 의도에 적합한 액티비티 정보를 패키지 매니저에게 요청 -> 패키지 매니저는 요청받은 의도에 적합한 앱에 대한 정보를 전달 -> 액티비티 매니저는 전달받은 앱의 정보를 통해 원하는 액티비티를 실행 ex1) Intent intent = new Intent(ACTION) ex2) Intent intent = new Intent(); intent.setAction(Intent.ACTION_MAIN); 명시적 Intent 실행하고자 하는 컴포넌트가 명확할 때 사용하는 방식 ex1)..
Android Pasteboard & Clipboard vulnerability 안드로이드에는 데이터를 복사하면 클립보드에 저장된다. 클립보드에 저장된 내용에 접근이 가능하기에 복사가 불가능하게 activity_do_transfer.xml 파일에서 EditText의 editable 속성을 false로 설정해주거나 복사한 데이터에 대한 유효시간을 주어 없어지게 해야한다. ADB 아래의 명령어를 하면 나온다는데.. 잘 안나온다 adb shell pe -e | grep -i 'insecurebankv2' > u0_a297 13088 485 23760032 268204 SyS_epoll_wait 0 S com.android.insecurebankv2 adb shell su u0_a297 service call ..
Flawed Broadcast Receivers 브로드캐스트는 전화를 받거나 화면을 껐다 켜거나 스마트폰을 종료했다가 다시 전원을 켜는 등 특정 행동을 했을 때 Intent를 통해 발송되어지며 브로드캐스트 리비서가 수신하여 앱에 행동을 전달하게 된다. 즉, "전원을 겨면 이앱을 실행하라" 라던가 "화면을 켜면 앱에서 실행 중인 음악을 종료하라" 등의 명령을 브로드캐스트로 이용할 수 있다. 어플리케이션이 브로드캐스트를 받기 위해서는 AndroidManifest.xml에 태그로 브로드캐스트 리비서를 등록 해야한다 단, 안드로이드 8.0 부터 몇몇을 제외한 나머지 브로드캐스트 리시버를 AndroidManifest.xml에 등록할 수 없게 되었다. https://developer.android.com/guide..
Exported Content Provider Content Provider(콘텐츠 프로바이더)는 다른 애플리케이션의 데이터베이스나 파일에 접근할 수 있게 해주는 역할을 한다. 즉, 해당 애플리케이션의 데이터를 다른 어플리케이션에서 사용할 수 있게 해주는 것이다. AndroidManifest.xml 에 로 정의되어 있다. Content Provider 에 접근하기 위해서는 Content Provider 의 주소인 URI(Uniform Resource Identifier) 와 Content Resolver(콘텐츠 리졸버)가 필요하다. Content Resolver 를 이용하여 다른 애플리케이션의 Content Provider 에 접근할 수 있으며, 이때 Content Provider 의 주소인 URI 가 ..
Sensitive Information in Memory 중요 정보가 메모리에 저장되는데 평문으로 저장될 경우 메모리를 덤프하여 확인할 수 있다. 메모리 덤프하는 방법은 아래의 글에서 확인하면 된다. https://johyungen.tistory.com/657 Fridump3 안드로이드 어플 메모리 덤프 (device not found 에러 해결) Self-Improvement Fridump3 안드로이드 어플 메모리 덤프 (device not found 에러 해결) 본문 AOS/Basis Fridump3 안드로이드 어플 메모리 덤프 (device not found 에러 해결) JoGeun 2021. 10. 28. 16:56 Prev 1 ··· 46 47 48 49 50 51 johyungen.tistor..
Insecure WebView Implementation & External Storage 어플리케이션의 ViewStatement 를 선택하면 이때까지 전송한 명세서를 볼 수 있다. 이는 ViewStatement 클래스 onCreate() 메소드에서 로직을 확인할 수 있다. ADB ADB에서 확인해보면 Statements_jack.html 파일을 확인할 수 있다. 누구나 접근할 수 있는 외부 저장소에 저장한다는 것과 WebView의 설정에서 자바스크립트을 Enabled 해놓았기 때문에 입력값에 스크립트 구문을 삽입하면 동작된다. XSS 스크립트 구문을 삽입한 후 ViewStatement를 확인하면 동작된다.
Rooting Bypas 어플리케이션을 실행하여 로그인하면 루팅된 단말기의 경우 "Rooted Device!!"가 출력된다. PostLogin 클래스의 showRootStatus() 메소드를 보면 IF문에 의해 루팅 단말기를 판별하게 된다. 본인의 것은 루팅된 단말기이지만 루팅 탐지 로직에 안걸려서 "Device not Rooted!!"로 나오게 되는데 이를 역으로 루팅 단말기로 나오게끔 후킹해보자 (코드 패치도 가능하다) FRIDA 루팅을 탐지하는 로직에서 PostLogin 클래스의 doesSuperuserApkExist(), doesSUexist() 메소드의 리턴값에 의해 결정된다. 두개의 메소드의 리턴값이 false로 나왔기 때문에 나의 단말기에는 "Device not Rooted!!"가 출력된다...
Insecure Logging 디버깅을 위한 용도로 Log.v(), Log.2() 등의 로그를 찍는 경우가 있다. 이러한 로그들 중 중요정보가 없는지 확인하는 절차가 필요하며 jadx 에서 "log."으로 검색하면 목록을 볼 수 있다. ADB ADB의 logcat을 이용하여 실제 로그 메시지가 출력되는 것을 확인하며 DoLogin 클래스에서 로그인을 성공할 시 아래와 같은 로그가 출력하게 된다. adb logcat | grep -i successful logcat | grep "$(ps -e | grep "com.android.insecurebankv2" | awk '{print $2}')
Application Backup Enabled AndroidManifest.xml 파일에 allowBackup이 true로 설정되어 있을 경우 ADB를 통해 어플리케이션을 백업하여 내용들을 확인할 수 있다. 단말기가 루팅되지 않은 경우에도 수행이 가능하다. ADB 아래와 같은 ADB 명령어로 어플리케이션을 백업한다. adb backup com.android.insecurebankv2 수행하면 backup.ab 파일이 생성되는데 이를 tar 확장자로 변경하기 위해선 abe.jar 를 사용해야 한다. abe.jar https://github.com/nelenkov/android-backup-extractor/releases Releases · nelenkov/android-backup-extractor A..
Insecure Storage of Credentials LoginActivity 클래스 onCreate() 메소드에서 " 나서 R.id.fill_data 버튼을 선택할 시 fillData() 메소드가 실행되어 진다. fill_data 버튼을 "Autofill Credentials" 문자열을 가진 버튼으로 layout 폴더에서 찾게 되었다. fillData() 메소드를 보면 "mySharedPreferences" 파일에서 "EncryptedUsername", "superSecurePassword" 값을 가져온다. 그리고는 아이디는 base64로 디코딩, 패스워드는 AES256로 복호화를 진행하게 된다. 실제 mySharedPreferences 파일 내용을 확인해보면 값들이 존재한다. AES256 복호화 ..