App/InjuredAndroid8 injured.apk | FLAG SEVEN - SQLITE 이 문제는 플래그와 패스워드를 입력해야한다. FlagSevenSqliteActivity 파일의 31~32번 라인을 보면 base64로 암호화되어있다. 디코딩하면 x ="sqlite" y = "f1ag-pa55" 이다. 코드를 보면 알 수 있듯이, DB를 생성하고 데이터가 기록이 된다. 191번 라인의 VGhlIGZsYWcgaGFzaCE= 를 base64로 디코딩해보면 The flag hash! 라는 값을 얻어낼 수 있다. 이것은 md5 암호화 방식이다. 2021. 9. 13. injured.apk | FLAG SIX - LOGIN 3 FlagSixLoginActivity 파일을 확인해보면 73번 라인에서 k.a() 함수에서 반환된 값과 비교한다. k3FElEG9lnoWbOateGhj5pX6QsXRNJKh///8Jxi8KXW7iDpk2xRxhQ== 값이 인자로 넘어가는 것을 알 수 있다. k.a() 함수를 확인해보면 다음과 같다. 이 함수는 복호화 작업을 진행고, 함수를 frida와 연결하고 스크립트를 작성하여 암호화된 값을 넘기기 때문에 우리가 입력하는 값이 어떤 값이 되든 상관 없다. nox_adb shell 접속해서 frida 서버 실행 javascript 파일 제작 7번 라인에서는 k 클래스의 함수를 오버로드해서 클래스를 변수에 할당해준다. 디코딩 기능을 오버로드 해주고, 8번 라인에서 디코드를 진행할 문자열을 정의해준다. 이 .. 2021. 9. 13. injured.apk | FLAG FOUR - LOGIN 2 FlagFourActivity의 submitFlag함수를 확인하면 60번 라인에서 obj 문자열에 입력받은 값을 저장하고, 61번 라인에서 g.a() 메서드의 값을 a2라는 byte 배열에 할당한다. g클래스의 a 함수는 아래와 같다. 여기서 base64로 체크된 문자열을 디코딩하고 f1911a로 반환해준다. 첫번째 사진의 62번 라인에서는 a2에 값이 들어왔는지 확인해주고, 63번 라인에서 if문을 통해 입력한 값이 디코딩된 값과 일치하는지를 비교한다. NF9vdmVyZG9uZV9vbWVsZXRz 값을 디코딩해주면 다음과 같이 flag가 나타나는 것을 확인할 수 있다. 2021. 9. 13. injured.apk | FLAG THREE - RESOURCES 1번과 마찬가지로 FlagThreeActivity 파일을 열어보면 다음과 같이 플래그가 들어가있는 자리에 cmVzb3VyY2VzX3lv 값이 들어있다. 62번 라인에서는 문자열 비교함수를 통해 우리가 입력한 값과 리소스로부터 받은 문자열을 비교한다. R.string.으로 cmVzb3VyY2VzX3lv를 참조한다. APK Easy Tool로 디컴파일 한 파일들을 전체 검색기능을 통해 문자열 검사로 플래그를 찾을 수 있다. 2021. 9. 13. injured.apk | FLAG TWO - EXPORTED ACTIVITY 2번은 첫 화면에서 우회하여 다른 화면을 불러올 수 있다고 알려준다. 147번 라인을 보면 Manifest에서 exported 값이 true로 설정되어있는 것을 볼 수 있다. 인텐트를 허용하면 다른 곳에서 이 활동을 호출할 수 있다. 보통 false로 기본값 설정이 되어있지만, 외부에서의 접근을 허용할 때 true로 설정해준다. exported가 허용되어있기 때문에 adb로 am 명령어를 사용하여 패키지명과 b25lActivity를 입력하면 외부에서 activity 관리자로 접근하여 실행시킬 수 있다. 명령어를 통해 접근할 수 있으므로 인가된 허용자만 접근이 가능한게 아니라는 것이 노출되었기 때문에 취약점이라고 판단한다. 위와 같이 입력하면 flag가 나타난다. 2021. 9. 13. injured.apk | FLAG ONE-LOGIN AndroidManifest에서 1번 문제의 코드가 적혀있는 FlagOneLoginActivity 파일을 확인해본다. onCreate 함수가 실행된 후, submitFlag 함수가 실행된다. 60~61번 라인에서 editText 변수에 우리가 입력하는 값을 받아오는데, 62번 라인에서 if문을 통해 해당 값이 만약 "F1ag_0n3"이라면 FlagOneSuccess 함수를 실행시켜 intent 변수에 저장한다. 66번 라인에서 intent에 저장된 해당 값이 화면에 나타나게 된다. 2021. 9. 13. injured.apk | XSS 다음과 같이 태그를 입력할 경우 자바스크립트가 실행되는 것을 확인할 수 있다. XSS가 실행되는 부분의 코드를 확인하기 위해 XSSTextActivity 파일을 열어봤다. 19번 라인에 인자가 두 개가 들어간다. 뒷 인자가 해당 함수를 통해 문자열로 전달된다. DisplayPostXSS 파일을 확인해보면 17번 라인의 아이디 값과 XSSTextActivity 파일의 19번 라인 아이디 값이 같다. stringExtra 변수에 해당 값을 불러온다. 20번 라인은 자바스크립트를 허용하는 함수이다. 해당 값이 true로 설정되어있고, apk 내에서 내가 입력한 스크립트가 문자열로 인식되어 자바스크립트가 동작하기 때문에 XSS가 실행된다. 2021. 9. 13. injured.apk | smali 변조 안드로이드는 MainActivity의 onCreate 함수를 시작으로 동작한다. jadx를 사용하여 MainActivity를 확인하고, 원하는 값을 변조한다. 우선 AndroidManifest.xml 파일을 확인하면 메인으로 확인되는 코드가 있다. 위 박스에 적혀있는 MainActivity를 들어가보면 프로그램이 시작되는 onCreate 함수를 볼 수 있다. smali 코드 변조를 위해 apk easy tool로 디컴파일하고, smail/b3nac/apk명 폴더 속 MainActivity.smali 파일을 다음과 같이 수정한다. 사진 속 체크 된 내용을 수정 및 추가해줬다. ccit test 라는 문장이 출력되게 하는 smali 문법이다. .locals 0을 1로 바꿔준 이유는 레지스터를 사용하기 위함이.. 2021. 9. 13. 이전 1 다음