AndroGoat Writeup
-
INSECURE DATA STORAGE
InsecureStorageActivity为该界面对应activity.- SQLITE
在jadx中打开APP,找到InsecureStorageSQLiteActivity,onCreate$lambda$1方法中可见:

存在SQL注入风险.但由于SQLite默认禁用引号连接的多条语句(后面的语句会报错不执行),所以无法通过SQL注入获取数据.实际利用过程中可考虑通过该语句插入代码,再通过其他有回显的界面触发恶意代码.此处直接获取SQLite数据库查看数据.
数据库:/data/data/owasp.sat.agoat/databases/aGoat,先cp到/data/local/tmp,再chmod,最后adb pull:

查看数据库:

- TEMP FILE
在jadx中打开APP,找到InsecureStorageTempActivity,onCreate$lambda$1方法中可见:

直接cat对应文件即可:

- EXTERNAL STORAGE - SDCARD
与temp file同理,只不过是文件的保存路径不同罢了:

- SQLITE
-
INPUT VALIDATIONS
InputValidationsActivity为该界面对应activity.- INPUT VALIDATIONS - XSS
在jadx中打开APP,找到XSSActivity,onCreate方法中可见:

方框中代码在webview中加载了一个页面,将用户输入的Name内容显示出来.
故输入,即可观察到弹窗. - INPUT VALIDATIONS - SQLI
在jeb中打开APP(jadx打开SQLinjectionActivity会反编译失败),找到SQLinjectionActivity,onCreate$lambda$1方法中可见:

此为select语句,输入admin' or 1=1 --,获取数据:

- INPUT VALIDATIONS - WebView
在jadx中打开APP,找到InputValidationsWebViewURLActivity,onCreate$lambda$0方法中可见:

使用file协议可读取任意文件:

- INPUT VALIDATIONS - QR CODE
在jadx中打开APP,找到QRCodeXSSActivity,在onCreate、onCreate$lambda$1、onCreate$lambda$1$lambda0$方法中可见:

找个二维码生成器,把<script>alert(1)</script>转成二维码,扫描后可得:

- INPUT VALIDATIONS - XSS
-
SIDE CHANNEL DATA LEAKAGE
SideChannelDataLeakageActivity为该界面对应activity.-
KEYBOARD CACHE
在jadx中打开APP,找到KeyboardCacheActivity,代码中虽未见明显漏洞,但可知有输入内容。查看相关layout文件,发现输入框是edittext,没有做输入法泄露管理:

查看测试机输入法,找到对应的keyboard cache(主要关注cache和database,前者是缓存文件,后者里可能有sqlite数据库):

-
INSECURE LOGGING
在jadx中打开APP,找到InsecureLoggingActivity,在onCreate$lambda$1方法中可见:

打开AndroidStudio,使用loggcat搜索password,可见:

-
CLIPBOARD - COPY AND PASTE
在jadx中打开APP,找到ClipboardActivity,在onCreate$lambda$1方法中可见:

可知敏感数据被添加到了剪贴板中.写个恶意app,能够读取剪贴板(实际流程中肯定不是点击才读取剪贴板):实际效果:点击查看代码
class MainActivity : ComponentActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.mainactivity) val button = findViewById<Button>(R.id.button1) val clipboard = getSystemService(CLIPBOARD_SERVICE) as ClipboardManager button.setOnClickListener{ val clipdata:ClipData? = clipboard.primaryClip if(clipdata!=null && clipdata.itemCount>0){ val clipText:String = clipdata.getItemAt(0).coerceToText(this).toString() val text:TextView = findViewById<TextView>(R.id.text) text.text = clipText } } } }
-
-
HARD CODE ISSUES
HardcodeViewActivity为该界面对应activity.- SHOPPING CART
在jadx中打开APP,找到HardCodeActivity,在onCreate$lambda$1方法中可见:

找到promoCode,输入即可触发漏洞:

- AI CHAT
在jadx中打开APP,找到AIChatActivity,可见API key:

实际过程中可以用frida hook onCrate$lambda$1,实时打印API key. - VIEW CLOUD SERVICES
与上文同理,jadx分析CloudServicesActivity可以找到硬编码key:

- SHOPPING CART
-
ROOT DETECTION
非常简单的检测函数,位于RootDetectionActivity,函数名isRooted,核心原理是检测是否存在特定的apk和su文件.直接frida hook返回false即可.isRooted1并未被调用,但也是非常简单的检测函数,检测su ls /data/data能否正常执行.

-
EMULATOR DETECTION
与上文相似,EmulatorDetectionActivity中使用isEmulator函数,通过分析多种环境变量/Flag,检测当前环境是否为模拟器.

-
BINARY PATCHING
在jadx中打开APP,找到BinaryPatchingActivity,分析onCreate方法,可知若private final boolean isAdmin为ture,则可触发按钮.既然是final,考虑改变量.

使用MT管理器提取安装包,查看apk,编辑classes.dex和classes2.dex,找到BinaryPatchingActivity,.line18下的if-eqz改为if-nez,保存.

打包apk,签名并安装即可.

-
BIOMETRIC AUTHENTICATION
在jadx中打开APP,找到BioMetricAuthActivity,分析onCreate$lambda$0方法,可知该app同时将BIOMETRIC_STRONG、BIOMETRIC_WEAK、DEVICE_CREDENTIAL加入了认证方式.

BIOMETRIC_STRONG为高强度生物认证(安全指纹、3D人脸),BIOMETRIC_WEAK为弱生物认证(普通2D人脸等),DEVICE_CREDENTIAL为锁屏PIN/图案/密码.
很多测试机的面部识别都会被Android认定为BIOMETRIC_WEAK.测试机的面部识别能否被照片欺骗可能会受到厂商补丁、系统版本等的影响,但若为WEAK,则说明其不具备3D人脸识别能力,是存在被攻击的可能的(仅具备可能强化过的2D人脸识别能力).
对于没有启用CryptoObject的bio Auth,一般考虑从onAuthenticationFailed()方法入手,该方法在BiometricPrompt.AuthenticationCallback类中实现.
查看app源代码,可发现其自行实现了该类:

跟着分析BioMetricAuthActivity$onCreate$1,可见:

可确定此为面部识别回调函数.故hook Error方法,在其中调用Succeeded方法即可:使用之后连续错误验证直到验证结束,即可看到通过结果:点击查看代码
function bioAuthBypass(){ Java.perform(function () { var callback = Java.use( 'owasp.sat.agoat.BioMetricAuthActivity$onCreate$1' ); var resultclass = Java.use( "androidx.biometric.BiometricPrompt$AuthenticationResult" ) var result = resultclass.$new(null,2) callback.onAuthenticationError.implementation = function () { this.onAuthenticationSucceeded(result); }; }); } setImmediate(bioAuthBypass)
浙公网安备 33010602011771号