분석
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
- Intent 관련 함수 등
https://developer.android.com/reference/android/content/Intent#getStringExtra(java.lang.String) - WebView 관련 함수 등
https://developer.android.com/reference/android/webkit/WebView
'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 |