Android/InjuredAndroid

XSSTEST

분석

XSSActivity

public class XSSTextActivity extends c {
    /* access modifiers changed from: protected */
    public void onCreate(Bundle bundle) {
        super.onCreate(bundle);
        setContentView((int) R.layout.activity_xsstext);
    }

    public void submitText(View view) {
        Intent intent = new Intent(this, DisplayPostXSS.class);
        intent.putExtra("com.b3nac.injuredandroid.DisplayPostXSS", ((EditText) findViewById(R.id.editText)).getText().toString());
        startActivity(intent);
    }
}
  • setContentView : 인자로 넘어오는 레이아웃 리소스 ID에 해당하는 파일을 파싱 하여 뷰의 생성과 속성 지정 및 배치하는 과정을 진행한다.
  • putExtra(String name, Bundle value) : 인텐트로 값을 넘기기 위해 사용하는 함수로 name에는 식별하기 위한 값을 넣어주고 value에 넘길 값을 넣어준다.

 

DisplayPostXSS

public final class DisplayPostXSS extends c {
    /* access modifiers changed from: protected */
    public void onCreate(Bundle bundle) {
        super.onCreate(bundle);
        WebView webView = new WebView(this);
        setContentView((View) webView);
        String stringExtra = getIntent().getStringExtra("com.b3nac.injuredandroid.DisplayPostXSS");
        WebSettings settings = webView.getSettings();
        d.b(settings, "vulnWebView.settings");
        settings.setJavaScriptEnabled(true);
        webView.setWebChromeClient(new WebChromeClient());
        webView.loadData(stringExtra, "text/html", "UTF-8");
    }
}
  • getStringExatra(String name) : 인텐트로 넘어오는 값을 받기 위해 사용한다.
  • setJavaScriptEnabled(true) : javascript를 실행할 수 있도록 설정
  • setWebChromeClient(WebChromeClient client) : 크롬 핸들러를 설정한다.
  • loadData(Strings data, String mimeType, Strings encoding) : 주어진 data를 웹뷰에 로드한다.

요약하자면 XSSTestActivity의 submitText()에서 사용자에게 입력받은 값을 String으로 변환 후 인텐트를 통해 DisplayPostXSS으로 넘겨주는데 이때 해당 값을 stringExtra 변수에 저장하게 된다.

이후 WebView활성화 및 여러 셋팅과 JavaScript활성화, 크롬 핸들러 설정을 진행하고 마지막으로 인텐트로 넘어온 사용자 입력 값을 웹뷰에 로드하는 것으로 끝낸다.

 

실제로 입력값을 넣어보면 다음과 같이 출력되는 것을 확인할 수 있다.

 

Exploit

이전 코드를 분석하면 다음과 같이 취약한 부분을 통해 XSS가 발생하는 것을 확인할 수 있다.

  • setJavaScriptEnabled() 함수를 통한 JavaScript 활성화
  • 입력받은 값에 대한 필터링 미흡

사용할 예시 스크립트 "<script>alert('1')</script>"

 

 

Reference

 

'Android > InjuredAndroid' 카테고리의 다른 글

FLAG FOUR - Login 2  (0) 2021.09.21
FLAG THREE - RESOURCES  (0) 2021.09.21
FLAG TWO - EXPORTED ACTIVITY  (0) 2021.09.21
FLAG ONE - Login  (0) 2021.09.21
무결성 검증 - smali 변조  (0) 2021.09.13