FastJson and Furious – Hack The Box – @lautarovculic

Difficult: Easy

Category: Mobile

OS: Android

Description: A couple years ago I was experimenting with Android Development and I created this application to hide my secret, but now I forgot how to get it back. Can you help me?

First, download the .zip file and extract them with hackthebox password.

Then, we’ll use apktool for decompile and extract the application content.

				
					apktool d app-release.apk
				
			

We can see that the compiled version SDK is 33, then, I’ll use an Genymotion Android device API 31.

Install the apk file with

				
					adb install -r app-release.apk
				
			

The app looks like

The package is

				
					hhhkb.ctf.fastjson_and_furious
				
			

After read the java source code of the MainActivity.java class, we can notice that

				
					public class MainActivity extends AppCompatActivity {
    public static String POSTFIX = "20240227";
    public static boolean succeed = false;
[...]
				
			

The succeed variable is set in false.

And the function calcHash ever will return “ ” if succeed is false.

Then, we need modify the MainActivity.smali code, and change false for true.

				
					smali_classes2/hhhkb/ctf/fastjson_and_furious
├── Flag.smali
├── MainActivity$1.smali
├── MainActivity.smali
├── R$color.smali
├── R$drawable.smali
├── R$id.smali
├── R$layout.smali
├── R$mipmap.smali
├── R$string.smali
├── R$style.smali
├── R$xml.smali
├── R.smali
└── ui
				
			

Now we need rebuild the apk

				
					apktool b app-release -o patchedFast.apk
				
			

Align the apk

				
					zipalign -v -p 4 patchedFast.apk patchedFastAligned.apk
				
			

Generate a new key

				
					keytool -genkey -v -keystore my-release-key.keystore -alias my-key-alias -keyalg RSA -keysize 2048 -validity 10000
				
			

Sign the apk

				
					apksigner sign --ks my-release-key.keystore --out patchedFastAlignedSigned.apk patchedFastAligned.apk
				
			

Install the apk

				
					adb install -r patchedFastAlignedSigned.apk
				
			

And if we go to jadx, we can see that the MainActivity.java class is now patched.

Then, now if we send a valid json

				
					{"username":"admin","password":"1234"}
				
			

We get this

Assuming that now the app work correctly, let’s keep reviewing the source code searching “hints”

Then, the app now is waiting for a json string.

And this need 2 keys, we can conclude that because

				
					JSONObject parseObject = JSON.parseObject(str.replace("\":", POSTFIX + "\":"));
            if (parseObject.keySet().size() != 2) {
                return "";
				
			

If the key size isn’t 2, then return nothing.

We can see in the class

				
					com.alibaba.fastjson.JSON
				
			

The following information

				
					public abstract class JSON implements JSONStreamAware, JSONAware {
    public static final String DEFAULT_TYPE_KEY = "@type";
    public static final String VERSION = "1.1.52";
[...]
				
			

After a simple research, I found this article

https://jfrog.com/blog/cve-2022-25845-analyzing-the-fastjson-auto-type-bypass-rce-vulnerability/

Then, after some hours, I conclude that we can craft the key 1 (with @type vulnerability) and key 2, the succeed that we fixed for true.

We need a hinted java class for this param.

				
					hhhkb.ctf.fastjson_and_furious.Flag
				
			

The final json looks like

				
					{"@type":"hhhkb.ctf.fastjson_and_furious.Flag","success":true}
				
			

I hope you found it useful (:

One response to “FastJson and Furious – Hack The Box – @lautarovculic”

  1. eyosiyas alemayehu Avatar
    eyosiyas alemayehu

    your great man thank u

Leave a Reply

Your email address will not be published. Required fields are marked *